通过操作审计创建跟踪,可以持续将操作日志投递到指定的OSS Bucket中。您可以使用数据湖分析DLA(Data Lake Analytics)可视化地查询和分析OSS Bucket中的操作日志。

前提条件

背景信息

DLA是一款基于Serverless的交互式数据查询分析服务,能够便捷的对不同格式的数据源进行整合并使用统一SQL查询分析。DLA详情,请参见什么是数据湖分析

使用DLA分析OSS中操作日志的原理如下:

  1. 通过操作审计创建跟踪,将操作日志持续投递到OSS Bucket。
  2. 将操作日志从OSS Bucket导入DLA。
  3. DLA将OSS Bucket内以Array形式保存的多条日志记录拆分为多条数据,以JSON保存的每条操作日志转换为结构化的数据表,使得面向OSS Bucket的数据解析被大大简化,直接实现可视化的标准SQL分析。
架构图

操作步骤

  1. 在DLA中创建Schema。
    1. 登录数据湖分析管理控制台
    2. 在页面左上角,选择与OSS所在地域一致的DLA地域。
    3. 在左侧导航栏,单击数据湖管理 > 数据入湖
    4. 数据入湖页面,单击ActionTrail日志清洗右侧的进入向导
    5. ActionTrail日志清洗页面,根据控制台提示进行配置。
      配置项 说明
      ActionTrail文件根目录 操作审计投递到OSS中日志数据的存储目录。目录以AliyunLogs/Actiontrail结尾。
      • 选择位置:自定义操作审计投递到OSS中的日志数据的存储目录。
      • 自动发现:DLA自动设置操作审计投递到OSS中的日志数据的存储目录。
      Schema名称 OSS在DLA中的映射数据库名称。
      清洗后数据保存位置 DLA清洗OSS数据后,将结果数据写入OSS,即数据清洗后的存储位置。
      • 不勾选自定义:DLA默认指定存储位置。
      • 勾选自定义:支持您自定义存储位置。
      数据清洗时间 DLA每天清洗OSS数据的时间。

      系统默认的数据清洗时间是00:30。您可以根据业务规律,将数据清洗时间设置在业务低峰期,以免清洗过程中对业务造成影响。

    6. 单击创建
  2. 将操作审计投递到OSS Bucket中的日志数据同步到DLA中。
    1. ActionTrail日志清洗页面,单击立即同步
    2. 单击Schema列表,在元数据管理页面单击对应Schema名右侧的库表详情
    3. 元数据管理页面,单击页签查看同步情况。
      您也可以在 配置页签更新Schema配置。Schema表结构详情,请参见 Schema表结构
  3. 使用标准SQL语法分析操作审计日志数据。
    1. 在左侧导航栏,选择Serverless SQL > SQL执行
    2. 找到待分析的数据库,双击切换到当前数据库。
    3. 输入查询语句,单击同步执行,系统自动生成执行结果
      SQL
      说明 您可以使用任何符合SQL语法的语句对DLA中的日志信息进行查询。

查询案例

查询指定AccessKey的操作日志

  • 查询语句:select * from `action_trail` where `user_identity_access_key_id` = '目标AccessKey ID' limit 20;
  • 查询结果:前20条目标AccessKey ID产生的操作日志。

查询指定AccessKey访问ECS的操作日志

  • 查询语句:select * from `action_trail` where `user_identity_access_key_id` = '目标AccessKey ID' AND `service_name` = 'Ecs' limit 20;
  • 查询结果:前20条目标AccessKey ID访问ECS产生的操作日志。

Schema表结构

Schema表包含以下关键字段。

名称 类型 是否必选 示例 描述
event_id String F23A3DD5-7842-4EF9-9DA1-3776396A**** 事件ID。操作审计为每个操作事件所产生的一个GUID。
event_name String CreateNetworkInterface 事件名称。
  • 如果eventType的取值是ApiCall,该字段为API的名称。
  • 如果eventType的取值不是ApiCall,该字段为简单的英文短句,表示事件含义。
event_source String ecs.aliyuncs.com 事件来源。
event_time String 2020-01-09T12:12:14Z 事件的发生时间(UTC格式)。
event_type String ApiCall 发生的事件类型。取值:
  • ApiCall:此类事件是最普遍的一类事件。通过userAgent字段可以区分是通过控制台操作还是直接调用API。
  • ConsoleOperation(ConsoleCall):操作审计将此类事件客观封装为控制台行为事件。此类事件的名称并不一定是API名称, 但能够传达基本的行为性质。
  • AliyunServiceEvent:此类事件为阿里云平台对您的资源执行的操作事件,目前主要是预付费实例的到期自动释放事件。
  • PasswordReset:密码重置事件。
  • ConsoleSignin:控制台登录事件。
  • ConsoleSignout:控制台登出事件。
request_parameters 字典 不涉及 API请求的输入参数。
response_elements 字典 不涉及 API响应的数据。
service_name String Ecs 事件相关的云服务名称。
source_ip_address String 11.XX.XX.232 事件发起的源IP地址。
说明 如果API请求是由用户通过控制台操作触发的,那么该字段记录的是用户浏览器端的IP地址,而不是控制台Web服务器的IP地址。
user_agent String Apache-HttpClient/4.5.7 (Java/1.8.0_152) 发送API请求的客户端代理标识。取值示例:
  • AlibabaCloud (Linux 3.10.0-693.2.2.el7.x86_64;x86_64) Python/2.7.5 Core/2.13.16 python-requests/2.18.3
  • Apache-HttpClient/4.5.7 (Java/1.8.0_152)
user_identity_type String ram-user 身份类型。当前支持的身份类型包括:
  • root-account:阿里云账号。
  • ram-user:RAM用户。
  • assumed-role:RAM角色。
  • system:阿里云服务。
user_identity_principal_id String 28815334868278**** 当前请求者的ID。
  • 如果type的取值是root-account,则记录阿里云账号ID。
  • 如果type的取值是ram-user,则记录RAM用户ID。
  • 如果type的取值是assumed-role,则记录RoleID:RoleSessionName。
user_identity_account_id String 112233445566**** 阿里云账号ID。
user_identity_accessKey_id String 55nCtAwmPLkk**** 如果请求者通过SDK访问API,则记录该字段。如果请求者通过控制台登录,则该字段不显示。
user_name String B** 如果type的取值是ram-user,则记录RAM用户名。如果type的取值是assumed-role,则记录RoleName:RoleSessionName。