使用 Barbican 的审计中间件

背景

审计中间件是一种 Python 中间件逻辑,通过 paste 部署过滤器添加到服务请求处理管道中。审计中间件以 CADF 格式构建审计事件数据。

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

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

启用 API 请求的审计

审计中间件作为 keystonemiddleware (>= 1.6) 库的一部分提供。假设 Barbican 部署已经使用 Keystone 进行令牌验证,审计支持仅需要配置更改。它具有 Oslo 消息传递库依赖性,因为它使用它来传递审计事件。pyCADF 库用于以 CADF 格式创建事件。

  • 启用中间件:启用中间件链接。更改主要在服务 paste 部署配置中。

  • 配置中间件:配置中间件链接。可以使用提供的审计映射文件。如果没有针对操作或路径的自定义映射,则相关的映射值将从 pyCADF 库中定义的分类法中派生。

注意

审计中间件过滤器应包含在请求管道中 Keystone 中间件的 keystone_authtoken 中间件之后。这是必要的,以便审计中间件可以利用 keystone_authtoken 中间件设置的环境变量。

步骤

  1. 关闭所有活动的 Barbican 实例。

  2. api_audit_map.conf 复制到 /etc/barbican 目录。

  3. 编辑 /etc/barbican/barbican-api-paste.ini

    将 /v1 app 管道从 barbican_api 替换为 barbican-api-keystone-audit 管道

    [pipeline:barbican-api-keystone-audit]
    pipeline = authtoken context audit apiapp
    
  4. 编辑 barbican.conf 以更新 notification_driver 值。

  5. 启动 Barbican {barbican_home}/bin/barbican.sh start

示例审计事件

以下是关于对称密钥创建请求的审计事件示例

{
   "priority":"INFO",
   "event_type":"audit.http.request",
   "timestamp":"2015-12-11 00:44:26.412076",
   "publisher_id":"uwsgi",
   "payload":{
      "typeURI":"http://schemas.dmtf.org/cloud/audit/1.0/event",
      "eventTime":"2015-12-11T00:44:26.410768+0000",
      "target":{
         "typeURI":"service/security/keymanager/secrets",
         "addresses":[
            {
               "url":"http://{barbican_admin_host}:9311",
               "name":"admin"
            },
            {
               "url":"http://{barbican_internal_host}:9311",
               "name":"private"
            },
            {
               "url":"https://{barbican_public_host}:9311",
               "name":"public"
            }
         ],
         "name":"barbican_service_user",
         "id":"barbican"
      },
      "observer":{
         "id":"target"
      },
      "tags":[
         "correlation_id?value=openstack:7e0fe4a6-e258-477e-a1c9-0fd0921a8435"
      ],
      "eventType":"activity",
      "initiator":{
         "typeURI":"service/security/account/user",
         "name":"cinder_user",
         "credential":{
            "token":"***",
            "identity_status":"Confirmed"
         },
         "host":{
            "agent":"curl/7.38.0",
            "address":"192.168.245.2"
         },
         "project_id":"8eabee0a4c4e40f882df8efbce695526",
         "id":"513e8682f23446ceb598b6b0f5c4482b"
      },
      "action":"create",
      "outcome":"pending",
      "id":"openstack:3a6a961c-9ada-4b81-9095-90968d896c41",
      "requestPath":"/v1/secrets"
   },
   "message_id":"afc3fd93-51e9-4c80-b330-983e66962265"
}

Ceilometer 审计 wiki 可以参考以识别审计事件中不同字段的含义,以了解审计和合规性的 7 个“W”