跳到主要内容

订阅通知类事件

场景介绍

从6.0.0(20)开始,新增提供统一的安全审计数据多客户端订阅/取消订阅与添加/删除过滤条件接口,应用可以获取设备上的安全审计数据(如下表),并按需进行过滤,以支撑审计相关业务。

审计事件ID说明
0x027000000剪切板复制粘贴事件
0x010000100账号登录登出事件
0x007000000窗口截屏录屏投屏事件
0x00F000000移动存储插拔事件,如U盘、存储卡等具有存储功能的外设插拔事件
0x02E000000打印机事件
0x01C000007文件事件
0x01C000008进程创建退出事件
0x01C000009网络事件
0x01C00000AKIA文件拦截事件
0x02D000000相机事件
0x010000000应用事件
0x011000000edm事件
0x012003000证书操作事件
0x01C00000BKIA文件新增事件
0x01C00000CKIA文件变种事件
0x01C000012KIA文件读事件
0x01C00000E网络流量事件
0x01C00000F网络连接事件
0x00B000000应用权限变更事件
0x003000001DNS审计事件
0x01C001100文件拦截事件
0x018000100app安装拦截事件
0x018000101app卸载拦截事件
0x018000102app更新拦截事件
0x018000103app恢复拦截事件
0x018000104app启动拦截事件
0x030000000USB访问拦截事件
0x0F000001SMB(Samba)外发事件 起始版本: 6.1.0(23)
0x1C000014KIA文件秒开事件 起始版本: 6.1.0(23)
0x27000100HDC(HarmonyOS Device Connector)调测文件事件 起始版本: 6.1.0(23)
0x27000101HDC(HarmonyOS Device Connector)调测拦截事件 起始版本: 6.1.0(23)
0x2F000000多用户空间数据互传事件 起始版本: 6.1.0(23)
0x2F000001多用户空间互换审核策略事件 起始版本: 6.1.0(23)
0x30000100串口访问审计事件 起始版本: 6.1.0(23)
0x03000002网络拦截事件 起始版本: 6.1.0(23)
0x03000100WI-FI拦截事件 起始版本: 6.1.0(23)
0x2E000001打印拦截事件 起始版本: 6.1.0(23)

约束与限制

  1. 当前能力仅支持2in1设备。
  2. 一个进程最大只允许创建2个客户端实例,当前设备最多只允许创建16个客户端实例。
  3. 一个客户端实例最大只允许设置256个Filter,每个Filter限制10条过滤value。

业务流程

流程说明:

  1. 开发者创建审计通知类事件(以下统称为事件)订阅客户端实例,需要提供CallBack。

  2. 开发者使用1中创建的实例订阅事件,需要提供想要订阅的事件id。

  3. 开发者使用1中创建的实例设置事件过滤条件,需要提供事件id和过滤条件信息。

  4. 当事件发生时,审计服务先根据事件过滤条件过滤事件,当事件满足过滤条件时,触发回调通知订阅当前事件的客户端。

  5. 开发者根据审计数据处理业务。

  6. 当开发者应用不需要过滤/使用该审计数据时,开发者可以使用1中创建的实例解除过滤条件,取消对应的订阅事件。

  7. 当开发者应用不需要使用当前实例时,开发者可以删除实例。

    支持先设置过滤条件再订阅事件。

    删除实例后,被删除的实例所有的订阅以及过滤条件将被全部解除。

接口说明

更多接口及使用方法请参见API参考

接口名描述
newClient(callback: Callback<AuditEvent>): Client创建审计通知类事件管理对象Client,Client提供订阅、解订阅、增加事件过滤、移除事件过滤功能。
deleteClient(client:Client): void删除审计通知类事件管理对象。
subscribe(events: NotifyEvent[]): void订阅审计通知类事件。
unsubscribe(events: NotifyEvent[]): void解订阅审计通知类事件。
addFilter(event: NotifyEvent, filter: Filter): void添加审计通知类事件过滤条件。
removeFilter(event: NotifyEvent, filter: Filter): void移除审计通知类事件过滤条件。

开发步骤

  • 在开发准备过程中,需要申请权限:ohos.permission.QUERY_AUDIT_EVENT。
  • 只允许清单内的企业类应用申请该权限,申请方式请参考:申请使用企业类应用可用权限
  1. 导入Device Security Kit模块及相关公共模块。

    import { securityAudit } from '@kit.DeviceSecurityKit';
    import { BusinessError} from '@kit.BasicServicesKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
  2. 创建审计通知类事件客户端实例。

    let client: securityAudit.Client | undefined = undefined;
    const TAG = "SecurityAuditJsTest";
    const callback = (event: securityAudit.AuditEvent) => {
    hilog.info(0x0000, TAG, '%{public}s', 'Security_SecurityAudit_JsApi_Func eventId= ' + event.eventId);
    hilog.info(0x0000, TAG, '%{public}s', 'Security_SecurityAudit_JsApi_Func version= ' + event.version);
    hilog.info(0x0000, TAG, '%{public}s', 'Security_SecurityAudit_JsApi_Func content= ' + event.content);
    hilog.info(0x0000, TAG, '%{public}s', 'Security_SecurityAudit_JsApi_Func timestamp= ' + event.timestamp);
    hilog.info(0x0000, TAG, '%{public}s', 'Security_SecurityAudit_JsApi_Func userId= ' + event.userId);
    hilog.info(0x0000, TAG, '%{public}s', 'Security_SecurityAudit_JsApi_Func deviceId= ' + event.deviceId);
    };
    try {
    client = securityAudit.newClient(callback);
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'newClient failed: %{public}d %{public}s', e.code, e.message);
    }
  3. 订阅审计通知类事件。

    try {
    hilog.info(0x0000, TAG, 'subscribe begin.');
    client?.subscribe([0x02D000000]);
    hilog.info(0x0000, TAG, 'Succeeded in subscribe.');
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'subscribe failed: %{public}d %{public}s', e.code, e.message);
    }
  4. 设置审计通知类事件过滤条件。

    let filter : securityAudit.Filter = {
    type: 0x00000200,
    isInclude: true,
    values : ["2"]
    };
    try {
    hilog.info(0x0000, TAG, 'addFilter begin.');
    client?.addFilter(0x02D000000, filter);
    hilog.info(0x0000, TAG, 'Succeeded in addFilter.');
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'addFilter failed: %{public}d %{public}s', e.code, e.message);
    }
  5. 解除审计通知类事件订阅。

    try {
    hilog.info(0x0000, TAG, 'unsubscribe begin.');
    client?.unsubscribe([0x2E000000]);
    hilog.info(0x0000, TAG, 'Succeeded in unsubscribe.');
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'unsubscribe failed: %{public}d %{public}s', e.code, e.message);
    }
  6. 解除审计通知类事件过滤条件。

    try {
    hilog.info(0x0000, TAG, 'removeFilter begin.');
    client?.removeFilter(0x02D000000, filter);
    hilog.info(0x0000, TAG, 'Succeeded in removeFilter.');
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'removeFilter failed: %{public}d %{public}s', e.code, e.message);
    }
  7. 删除审计通知类事件客户端实例。

    try {
    securityAudit.deleteClient(client);
    } catch (err) {
    let e: BusinessError = err as BusinessError;
    hilog.error(0x0000, TAG, 'deleteClient failed: %{public}d %{public}s', e.code, e.message);
    }