审计中间件

Keystone 中间件库提供了一个可选的 WSGI 中间件过滤器,它允许对 OpenStack 每个组件的 API 请求进行审计。

审计中间件过滤器利用环境变量来构建 CADF 事件。

Figure 1: Audit middleware in Nova pipeline

上图显示了中间件在 Nova 的管道中的位置。

启用审计中间件

要启用审计,应安装 oslo.messaging。如果未安装,中间件将记录审计事件。可以通过编辑项目的 api-paste.ini 文件来为特定项目启用审计,以包含以下过滤器定义

[filter:audit]
paste.filter_factory = keystonemiddleware.audit:filter_factory
audit_map_file = /etc/nova/api_audit_map.conf

该过滤器应在 Keystone 中间件的 auth_token 中间件之后包含,以便它可以利用 auth_token 设置的环境变量。以下是使用 Nova WSGI 管道的示例

[composite:openstack_compute_api_v2]
use = call:nova.api.auth:pipeline_factory
noauth = faultwrap sizelimit noauth ratelimit osapi_compute_app_v2
keystone = faultwrap sizelimit authtoken keystonecontext ratelimit audit osapi_compute_app_v2
keystone_nolimit = faultwrap sizelimit authtoken keystonecontext audit osapi_compute_app_v2

配置审计中间件

为了正确审计 API 请求,审计中间件需要定义一个 api_audit_map.conf。项目的相应 api_audit_map.conf 文件包含在 pyCADF 库中。

应该通过在过滤器定义中添加 ‘audit_map_file’ 选项的路径来显式指定映射文件的位置

[filter:audit]
paste.filter_factory = keystonemiddleware.audit:filter_factory
audit_map_file = /etc/nova/api_audit_map.conf

可以设置其他选项

[filter:audit]
paste.filter_factory = pycadf.middleware.audit:filter_factory
audit_map_file = /etc/nova/api_audit_map.conf
service_name = test # opt to set HTTP_X_SERVICE_NAME environ variable
ignore_req_list = GET,POST # opt to ignore specific requests

审计中间件可以配置为使用其自己的专用通知驱动程序和主题值。当服务已经使用 oslo messaging 通知,并且希望为审计使用不同的驱动程序时,这会很有用,例如,服务已经通过 ‘messagingv2’ 将通知发送到队列,并且希望通过 ‘log’ 驱动程序将审计通知发送到日志文件。如下所示

[audit_middleware_notifications]
driver = log

当审计事件通过 ‘messagingv2’ 或 ‘messaging’ 发送时,中间件可以指定传输 URL,如果其传输 URL 需要与服务的消息传递传输设置不同。其他与传输相关的设置是从服务配置中定义的 oslo messaging 部分读取的,例如 ‘oslo_messaging_rabbit’。如下所示

[audit_middleware_notifications]
driver = messaging
transport_url = rabbit://user2:passwd@host:5672/another_virtual_host