通过基于 CADF 的通知事件添加审计功能

https://blueprints.launchpad.net/barbican/+spec/audit-cadf-events

本提案旨在利用 CADF(云审计数据联合)规范在 Barbican 中添加审计功能。其思路是识别可审计的属性,并根据 CADF 事件规范构建审计数据记录,并通过 OpenStack 通知框架向感兴趣的服务和消费者提供交付选项。

DMTF CADF 标准提供审计功能,以符合安全、运营和业务流程。有关 CADF 规范的更多详细信息,请参阅文末的“参考文献”部分。

问题描述

大量企业在迁移到 OpenStack 云时面临挑战。而且,这些挑战中的大多数与 OpenStack 服务的功能无关。相反,这些挑战在于根据严格的企业、行业或区域政策和合规性要求(FIPS-140-2、PCI-DSS、SoX、ISO 27017 等)审计和监控其工作负载和数据。作为云中的安全组件,Barbican 具有类似的审计要求。

此外,Barbican 具有软删除的概念,即使在资源被标记为已删除且不再在实时系统中使用后,也会将其保留在数据库中。其想法是对其资源状态进行审计跟踪。除了标记删除的时间外,这种方法在审计方面提供的价值不大。

提议的变更

为了在 Barbican 中添加审计功能,建议利用现有标准,而不是创建自己的语义和审计数据模型。在 OpenStack 生态系统中,许多服务(Ceilometer、Keystone)都使用基于 CADF 的事件数据模型来报告其资源上的活动。使用 CADF 标准进行审计将允许跨服务进行一致的报告,并允许客户使用通用的审计工具和流程来处理其审计数据。

CADF 模型可以使用 CADF 的七个 W(What、When、Who、On What、Where、From Where、To Where)以规范化的方式回答有关资源上发生活动或事件的关键问题。有关审计事件详细信息,请参阅下面的“审计事件详细信息”部分。

通过将审计事件作为 OpenStack 通知发布,可以最大限度地减少添加审计数据交互的开销,在这种情况下,事件发布者无需等待响应/确认。这样,审计事件的传递就解耦了,并且仍然可以受益于消息传递基础设施的持久性和传递保证。

审计事件详细信息

审计事件数据是使用发起请求的人员、请求结果、操作的资源、资源标识符和事件类型信息构建的。以下是 Barbican REST 资源七个 W 的审计值示例。

W 组件

Resource

CADF 属性

可能的值

What

POST/PUT/ DELETE v1/secrets

event.type event.outcome

activity/monitor/control success/failure/pending

When

event.eventTime

{事件生成时间戳}

Who

initiator.id initiator.type initiator.project_id

{token 用户 ID} service/security/account/user {作用域 token 项目 ID}

From Where

initiator.host initiator.agent

environemnt REMOTE_ADDR environment HTTP_USER_AGENT

On What

target.id target.type

资源 ID (secret/container) data/keymgr/secret

Where

observer.id observer.type

目标服务/keymgr

To Where

CADF 扩展属性(如下所述)可用于捕获作为 REST 请求的一部分提供的特定于域的数据。目前没有计划添加这些属性,因为这可能需要在通用的装饰器逻辑中了解每个资源。

  • event.attachments (结构化或非结构化数据)

  • event.tags (特定于域的标识符/分类)

pyCADF 变更

创建审计事件需要 oslo pyCADF 库。需要更新 pyCADF 库以反映 Barbican 特定的资源类型。根据 pyCADF 贡献者,可以使用现有类型或创建少量新的通用类型。以下 Barbican 特定资源类型将添加到 pyCADF 资源分类法中。

  1. data/keymgr/secret

  2. data/keymgr/container

  3. data/keymgr/order

  4. data/keymgr - 所有其他剩余资源的通用占位符。

  5. service/keymgr

上述类型将添加到 pyCADF 分类法中,如以下链接所述。

审计事件生成

对于 API 请求,将使用审计中间件方法生成审计事件。此中间件现在作为 keystonemiddleware (> 1.5) 库的一部分提供。该库具有 Keystone 中间件,Barbican 用于 Keystone token 验证。

审计中间件将为每个 Barbican REST API 调用创建两个事件。一个包含从请求数据中提取的信息,第二个与请求结果(响应)相关联。将通过 Barbican 特定的配置文件管理映射信息,该配置文件将类似于以下 pycadf 示例链接中描述的文件。https://github.com/openstack/pycadf/tree/master/etc/pycadf

对于异步任务处理工作器,审计事件是使用与任务相关的数据构建的。它可以实现为可以添加到每个任务通用方法(handle_processing、handle_success 和 handle_error)的装饰器,或者可以添加到基本任务处理方法。此审计事件将作为通知发布到与审计中间件使用的相同队列。

审计事件传递

内部审计中间件使用基于 oslo messaging 的通知程序将 CADF 事件发布到配置的消息传递基础设施。审计装饰器将使用类似的方法。

审计中间件通过 barbican-api-paste.ini 中的附加过滤器添加到 Barbican 请求管道中,其中定义了相关的审计映射文件路径。通过装饰器传递审计事件需要是可配置的,因为开发人员框可能不一定具有所需的设置。默认情况下,将禁用作为通知传递审计事件。

oslo messaging 框架支持通过“messagingv2”驱动程序将此审计数据发布到消息队列,或者可以通过其“log”驱动程序将其写入日志文件。

备选方案

我们可以依赖 Barbican 现有的日志记录,但这并不能提供服务审计数据的完整且一致的视图。非标准日志记录意味着云提供商需要特定于服务的审计工具来聚合和分析日志。

安全影响

这通过提供审计功能来提高堆栈的安全性。这将有助于解决 Barbican 服务期望的一些合规性要求。

通知与审计影响

将具有额外的通知功能以发布审计事件。

其他最终用户影响

性能影响

审计事件作为通知发布到队列,无需等待响应/确认,因此相关的总体开销应非常小。当通知写入日志文件时,相关的开销仍然很低,并且可以与添加 2 个日志语句的逻辑相媲美。

其他部署者影响

要通过通知启用审计事件传递,部署者需要更改默认配置。

开发人员影响

无。

实现

负责人

主要负责人

arunkant

工作项

  • 添加新的蓝图并更新 oslo pyCADF 库。

  • 定义带有审计映射配置文件的管道过滤器 barbican_api_audit_map.conf

  • 添加新的装饰器以创建 CADF 事件数据,用于异步工作器处理逻辑。将装饰器添加到相关的 worker 任务方法。

  • 添加启用审计事件生成的能力。默认情况下,需要关闭它。

依赖项

  • pyCADF 库(带有 Barbican 特定的更新分类法)。

测试

将添加新的单元测试,用于中间件和订单处理流程。对于中间件单元测试,需要覆盖 paste 和 api ini 文件以进行配置。Oslo 测试驱动程序 https://github.com/openstack/oslo.messaging/blob/master/oslo_messaging/notify/_impl_test.py 可用于验证消息内容,除了使用模拟修补的方法之外。

文档影响

应记录 CADF 事件的使用情况。对于订单处理流程,记录添加对新订单类型进行审计支持所需的任何审计相关更改。

参考资料