API 审计日志

审计中间件支持通过 Oslo 消息通知能力传递 CADF 审计事件。基于 notification_driver 配置,审计事件可以路由到消息传递基础设施(notification_driver = messagingv2),也可以路由到日志文件( [oslo_messaging_notifications]/driver = log)。

审计中间件为每个 REST API 交互创建两个事件。第一个事件包含从请求数据中提取的信息,第二个事件包含请求结果(响应)。

启用 API 审计日志

审计中间件作为 keystonemiddleware (>= 1.6) 库的一部分提供。有关审计中间件功能的更多信息,请参阅 此处

可以通过对 /etc/ironic/ironic.conf 进行以下更改来为 Bare Metal 服务启用审计。

  1. 要启用 API 请求的审计日志记录

    [audit]
    ...
    enabled=true
    
  2. 要自定义审计 API 请求,审计中间件需要定义 audit_map_file 设置。更新配置设置 ‘audit_map_file’ 的值以设置其位置。Bare Metal 服务的审计映射文件配置选项包含在 etc/ironic/ironic_api_audit_map.conf.sample 文件中。要了解 ironic_api_audit_map.conf 文件中指定的 CADF 格式,请参阅 CADF 格式。

    [audit]
    ...
    audit_map_file=/etc/ironic/api_audit_map.conf
    
  3. 逗号分隔的 Ironic REST API HTTP 方法列表,在审计期间将被忽略。仅当启用 API 审计时才使用。例如

    [audit]
    ...
    ignore_req_list=GET,POST
    

示例审计事件

以下是 ironic 节点列表请求的审计事件示例。

{
   "event_type":"audit.http.request",
   "timestamp":"2016-06-15 06:04:30.904397",
   "payload":{
      "typeURI":"http://schemas.dmtf.org/cloud/audit/1.0/event",
      "eventTime":"2016-06-15T06:04:30.903071+0000",
      "target":{
         "id":"ironic",
         "typeURI":"unknown",
         "addresses":[
            {
               "url":"http://{ironic_admin_host}:6385",
               "name":"admin"
            },
           {
               "url":"http://{ironic_internal_host}:6385",
               "name":"private"
           },
           {
               "url":"http://{ironic_public_host}:6385",
               "name":"public"
           }
         ],
         "name":"ironic"
      },
      "observer":{
         "id":"target"
      },
      "tags":[
         "correlation_id?value=685f1abb-620e-5d5d-b74a-b4135fb32373"
      ],
      "eventType":"activity",
      "initiator":{
         "typeURI":"service/security/account/user",
         "name":"admin",
         "credential":{
            "token":"***",
            "identity_status":"Confirmed"
         },
         "host":{
            "agent":"python-ironicclient",
            "address":"10.1.200.129"
         },
         "project_id":"d8f52dd7d9e1475dbbf3ba47a4a83313",
         "id":"8c1a948bad3948929aa5d5b50627a174"
      },
      "action":"read",
      "outcome":"pending",
      "id":"061b7aa7-5879-5225-a331-c002cf23cb6c",
      "requestPath":"/v1/nodes/?associated=True"
   },
   "priority":"INFO",
   "publisher_id":"ironic-api",
   "message_id":"2f61ebaa-2d3e-4023-afba-f9fca6f21fc2"
}