监控 Amazon OpenSearch Service 中的审计日志 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

监控 Amazon OpenSearch Service 中的审计日志

如果您的 Amazon OpenSearch Service 域使用精细访问控制,则您可以为您的数据启用审计日志。审计日志是高度可定制的,允许您跟踪 OpenSearch 集群上的用户活动,包括身份验证成功和失败、对 OpenSearch 的请求、索引更改以及传入的搜索查询。默认配置会跟踪一组常用的用户操作,但建议根据您的具体需求定制设置。

就像 OpenSearch 应用程序日志和慢速日志,OpenSearch Service 将审计日志发布到 CloudWatch Logs。如果启用,则应用标准 CloudWatch 定价

注意

要启用审计日志,您的用户角色必须映射到 security_manager 角色,它允许您访问 OpenSearch plugins/_security REST API。要了解更多信息,请参阅 修改主用户

限制

审计日志具有以下限制:

  • 审计日志不包括被目标域访问策略拒绝的跨集群搜索请求。

  • 每个审计日志消息的最大大小为 10,000 个字符。如果审计日志消息超出此限制,则会截断该消息。

启用审计日志

启用审结日志是一个两步流程。首先,您需要配置您的域,以便将审计日志发布到 CloudWatch Logs。然后,您需要在 OpenSearch 控制面板中启用审计日志,并配置它们以满足您的需求。

重要

如果您在执行以下步骤时遇到错误,请参阅 无法启用审核日志 了解故障排除信息。

步骤 1:启用审计日志并配置访问策略

这些步骤将介绍如何使用控制台启用审计日志。您也可以使用 Amazon CLI 或 OpenSearch Service API 启用它们

要启用 OpenSearch Service 域(控制台)的审计日志
  1. 选择要打开其配置的域,然后转到 Logs(日志)选项卡。

  2. 选择 Audit logs(审计日志),然后再选择 Enable(启用)。

  3. 创建一个 CloudWatch 日志组或选择一个现有日志组。

  4. 选择一个包含适当权限的访问策略,或使用控制台提供的 JSON 创建策略:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn" } ] }

    建议您在策略中使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。源帐户是域的所有者,并且源 ARN 是域的 ARN。您的域必须在服务软件 R20211203 或更高版本上才能添加这些条件键。

    例如,您可以将以下条件块添加到策略:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
  5. 请选择 启用

步骤 2:在 OpenSearch 控制面板中打开审计日志记录

在 OpenSearch Service 控制台中启用审计日志之后,您还必须在 OpenSearch 控制面板中启用它们,并对其进行配置以满足您的需求。

  1. 打开 OpenSearch 控制面板,然后从左侧菜单中选择 Security(安全)。

  2. 选择审计日志

  3. 选择启用审计日志录入

控制面板 UI 提供完全控制常规设置合规性设置。有关所有配置选项的描述,请参阅审计日志设置

使用 Amazon CLI 启用审计日志记录

以下 Amazon CLI 命令在现有域上启用审计日志:

aws opensearch update-domain-config --domain-name my-domain --log-publishing-options "AUDIT_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true}"

您还可以在创建域时启用审计日志。有关详细信息,请参阅 Amazon CLI 命令参考

使用配置 API 启用审计日志记录

对配置 API 的以下请求将启用现有域上的审计日志:

POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config { "LogPublishingOptions": { "AUDIT_LOGS": { "CloudWatchLogsLogGroupArn":"arn:aws:logs:us-east-1:123456789012:log-group1:sample-domain", "Enabled":true } } }

有关更多信息,请参阅 Amazon OpenSearch Service API reference(《Amazon OpenSearch Service API 参考》)。

审计日志图层和类别

集群通信发生在两个单独的:REST 层和传输层。

  • REST 层涵盖与 HTTP 客户端的通信,例如 curl、Logstash、OpenSearch 控制面板、Java 高级别 REST 客户端、Python 请求库-到达集群的所有 HTTP 请求。

  • 传输层覆盖节点之间的通信。例如,在搜索请求到达集群后(通过 REST 层),服务该请求的协调节点将查询发送到其他节点、接收它们的响应、收集必要的文档,并将它们整理到最终响应中。分片分配和重新平衡等操作也会在传输层上进行。

您可以启用或禁用整个图层的审计日志以及图层的各个审计类别。下表包含审计类别及其可用图层的汇总。

类别 描述 REST 可用 可用于传输

FAILED_LOGIN

请求包含无效凭据,并且身份验证失败。

MISSING_PRIVILEGES

用户没有发出请求的权限。

GRANTED_PRIVILEGES

用户具有发出请求的权限。

OPENSEARCH_SECURITY_INDEX_ATTEMPT

一个请求试图修改 .opendistro_security 索引。

已身份验证

请求包含有效凭据,并且身份验证成功。

INDEX_EVENT

请求对索引执行管理操作,例如创建索引、设置别名或执行强制合并。此类别包含的 indices:admin/ 操作的完整列表可在 OpenSearch 文档中使用。

除了这些标准类别之外,精细的访问控制还提供了几个额外的类别,旨在满足数据合规性要求。

类别 描述

COMPLIANCE_DOC_READ

请求对索引中的文档执行读取事件。

COMPLIANCE_DOC_WRITE

请求对索引中的文档执行了写入事件。

COMPLIANCE_INTERNAL_CONFIG_READ

.opendistro_security 索引中执行读取事件的请求。

COMPLIANCE_INTERNAL_CONFIG_WRITE

.opendistro_security 索引中执行写入事件的请求。

您可以使用任何类别和消息属性组合。例如,如果您发送 REST 请求为文档编制索引,您可能会在审计日志中看到以下行:

  • 在 REST 层上进行身份验证(身份验证)

  • 传输层(授权)上的 GRANTED_PRIVILEGE

  • COMPLIANCE_DOC_WRITE(文档写入索引)

审计日志设置

审计日志有许多配置选项。

常规设置

常规设置允许您启用或禁用单个类别或整个图层。强烈建议将授予的权限和身份验证保留为排除的类别。否则,对集群的每个有效请求都会记录这些类别。

名称 后端设置 描述

REST 层

enable_rest

启用或禁用 REST 层上发生的事件。

REST 禁用类别

disabled_rest_categories

指定要在 REST 层忽略的审计类别。修改这些类别可以大大增加审计日志的大小。

传输层

enable_transport

启用或禁用传输层上发生的事件。

传输禁用类别

disabled_transport_categories

指定传输层上必须忽略的审计类别。修改这些类别可以大大增加审计日志的大小。

属性设置允许您自定义每个日志行中的详细信息量。

名称 后端设置 描述

批量请求

resolve_bulk_requests

启用此设置为批量请求中的每个文档生成一个日志,这可以大大增加审计日志的大小。

请求正文

log_request_body

包括请求的请求正文。

解决索引

resolve_indices

将别名解析为索引。

使用忽略设置排除一组用户或 API 路径:

名称 后端设置 描述

忽略的用户

ignore_users

指定要排除的用户。

忽略的请求

ignore_requests

指定要排除的请求模式。

合规性设置

合规性设置允许您优化索引、文档或字段级别的访问权限。

名称 后端设置 描述

合规性日志

enable_compliance

启用或禁用符合性日志记录。

您可以为读取和写入事件日志记录指定以下设置。

名称 后端设置 描述

内部配置日志记录

internal_config

启用或禁用 .opendistro_security 索引中的事件记录。

您可以为读取事件指定以下设置。

名称 后端设置 描述

读取元数据

read_metadata_only

仅包含读取事件的元数据。请勿包含任何文档字段。

忽略的用户

read_ignore_users

请勿为读取事件包含特定用户。

观看的字段

read_watched_fields

指定要监视读取事件的索引和字段。添加受监视字段会为每个文档访问生成一个日志,这可能会大大增加审计日志的大小。监视字段支持索引模式和字段模式:

{ "index-name-pattern": [ "field-name-pattern" ], "logs*": [ "message" ], "twitter": [ "id", "user*" ] }

您可以为写入事件指定以下设置。

名称 后端设置 描述

写入元数据

write_metadata_only

仅包含写入事件的元数据。请勿包含任何文档字段。

日志差异

write_log_diffs

如果仅写入元数据为假,则仅包括写入事件之间的差异。

忽略的用户

write_ignore_users

请勿为写入事件包括某些用户。

观看索引

write_watched_indices

指定要监视写入事件的索引或索引模式。添加受监视字段会为每个文档访问生成一个日志,这可能会大大增加审计日志的大小。

审计日志示例

本节包括一个示例配置、搜索请求以及索引的所有读取和写入事件的结果审计日志。

步骤 1:配置审计日志

启用审计日志发布到 CloudWatch Logs 组后,导航到 OpenSearch 控制面板审计日志记录页面,然后选择启用审计日志记录

  1. 常规设置中,选择配置并确保 REST 层处于启用状态。

  2. 合规性设置中,选择配置

  3. 写入的下面,在观看的字段中将添加所有的写入事件的 accounts 添加添加到此索引。

  4. Read(读取)下的 Watched Fields(监控字段)中,添加 accounts 索引的 ssnid- 字段:

    { "accounts-": [ "ssn", "id-" ] }

步骤 2:执行读取和写入事件

  1. 导航到 OpenSearch 控制面板,选择开发工具,并对示例文档进行索引:

    PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
  2. 要测试读取事件,请发送以下请求:

    GET accounts/_search { "query": { "match_all": {} } }

步骤 3:观察日志

  1. 访问 https://console.aws.amazon.com/cloudwatch/ 打开 CloudWatch 控制台。

  2. 在导航窗格中,选择 Log groups(日志组)

  3. 选择您在启用审计日志时指定的日志组。在日志组中,OpenSearch Service 会为域中的每个节点创建一个日志流。

  4. 日志流中,选择搜索全部

  5. 有关读取和写入事件,请参阅相应的日志。在日志出现之前,您可能会有 5 秒的延迟。

    示例写入审计日志

    { "audit_compliance_operation": "CREATE", "audit_cluster_name": "824471164578:audit-test", "audit_node_name": "be217225a0b77c2bd76147d3ed3ff83c", "audit_category": "COMPLIANCE_DOC_WRITE", "audit_request_origin": "REST", "audit_compliance_doc_version": 1, "audit_node_id": "3xNJhm4XS_yTzEgDWcGRjA", "@timestamp": "2020-08-23T05:28:02.285+00:00", "audit_format_version": 4, "audit_request_remote_address": "3.236.145.227", "audit_trace_doc_id": "lxnJGXQBqZSlDB91r_uZ", "audit_request_effective_user": "admin", "audit_trace_shard_id": 8, "audit_trace_indices": [ "accounts" ], "audit_trace_resolved_indices": [ "accounts" ] }

    示例读取审计日志

    { "audit_cluster_name": "824471164578:audit-docs", "audit_node_name": "806f6050cb45437e2401b07534a1452f", "audit_category": "COMPLIANCE_DOC_READ", "audit_request_origin": "REST", "audit_node_id": "saSevm9ASte0-pjAtYi2UA", "@timestamp": "2020-08-31T17:57:05.015+00:00", "audit_format_version": 4, "audit_request_remote_address": "54.240.197.228", "audit_trace_doc_id": "config:7.7.0", "audit_request_effective_user": "admin", "audit_trace_shard_id": 0, "audit_trace_indices": [ "accounts" ], "audit_trace_resolved_indices": [ "accounts" ] }

要包含请求正文,请返回合规性设置,然后禁用写入元数据。要排除某个具体用户的事件,请将该用户添加到忽略的用户

有关每个审计日志字段的描述,请参阅审计日志字段参考。有关搜索和分析审计日志数据的信息,请参阅 Amazon CloudWatch Logs 用户指南中的使用 CloudWatch Logs Insights 分析日志数据

使用 REST API 配置审计日志

建议使用 OpenSearch 仪表板配置审计日志,但也可以使用精细访问控制 REST API。本节包含一个示例请求。有关 REST API 的完整文档位于 OpenSearch 文档中。

PUT _opendistro/_security/api/audit/config { "enabled": true, "audit": { "enable_rest": true, "disabled_rest_categories": [ "GRANTED_PRIVILEGES", "AUTHENTICATED" ], "enable_transport": true, "disabled_transport_categories": [ "GRANTED_PRIVILEGES", "AUTHENTICATED" ], "resolve_bulk_requests": true, "log_request_body": true, "resolve_indices": true, "exclude_sensitive_headers": true, "ignore_users": [ "kibanaserver" ], "ignore_requests": [ "SearchRequest", "indices:data/read/*", "/_cluster/health" ] }, "compliance": { "enabled": true, "internal_config": true, "external_config": false, "read_metadata_only": true, "read_watched_fields": { "read-index-1": [ "field-1", "field-2" ], "read-index-2": [ "field-3" ] }, "read_ignore_users": [ "read-ignore-1" ], "write_metadata_only": true, "write_log_diffs": false, "write_watched_indices": [ "write-index-1", "write-index-2", "log-*", "*" ], "write_ignore_users": [ "write-ignore-1" ] } }