的审核日志Amazon Elasticsearch Service - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

的审核日志Amazon Elasticsearch Service

如果您的域使用精细访问控制,Amazon Elasticsearch Service 会为您的数据提供可选的审核日志。这些日志高度可自定义,并且显示了各种用户活动,包括失败的登录尝试以及访问特定索引、文档或字段的用户。默认配置跟踪一组常见的用户操作,但我们建议根据您的确切需求定制设置。

Elasticsearch 应用程序日志和慢速日志一样,Amazon ES 会将审核日志发布到 CloudWatch Logs。如果启用,则应用标准 CloudWatch 定价

注意

要启用审核日志,您的用户角色必须映射到 security_manager 角色,该角色可让您访问 _opendistro/_security REST API。要了解更多信息,请参阅修改主用户

Limitations

审核日志具有以下限制:

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

  • 每条审核日志消息的最大大小为 10000 个字符。如果审核日志消息超过此限制,它将截断。

启用 审计日志

启用审核日志是一个包含两个步骤的过程。首先,您必须配置域以使用控制台、CloudWatch Logs 或配置 API 将审核日志发布到 AWS CLI。然后,您可以使用 Kibana 或精细访问控制 REST API 调整审核日志设置。

重要

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

为 Amazon ES 域启用审核日志(控制台)

  1. 选择域,然后选择 Logs (日志) 选项卡。

  2. Set up audit logs (设置审核日志) 下,选择 Setup (设置)

  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" } ] }
  5. 选择启用

示例 CLI 命令

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

aws es update-elasticsearch-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}"

您还可以在创建域时启用审核日志。有关详细信息,请参阅 AWS CLI Command Reference

示例配置 API 请求

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

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

有关详细信息,请参阅Amazon Elasticsearch Service 配置 API 参考

审核日志 Kibana UI

在启用审核日志后,请对其进行配置以满足您的需求。

  1. 打开 Kibana,然后选择 Security

  2. 选择 Audit logs (审核日志)

  3. 选择 Enable audit logging (启用审核日志记录)


        审核日志 Kibana UI 屏幕截图

Kibana UI 在 General settings (常规设置)Compliance settings (合规性设置) 下提供对审核日志设置的完全控制。有关所有配置选项的说明,请参阅审核日志设置

审核日志层和类别

集群通信通过两个单独的进行:REST 层和传输层。

  • REST 层包含与 HTTP 客户端(如 curl、Logstash、Kibana、Java 高级别 REST 客户端、Python 请求库—到达集群的所有 HTTP 请求)的通信。

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

您可以为整个层以及某个层的单个审核类别启用或禁用审核日志。下表包含审核类别及其可用的层的摘要。

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

FAILED_LOGIN

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

MISSING_PRIVILEGES

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

GRANTED_PRIVILEGES

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

OPENDISTRRO_SECURITY_INDEX_ATTEMPT

请求尝试修改 .opendistro_security 索引。

已认证

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

INDEX_EVENT

请求对索引执行管理操作,如创建一个索引、设置别名或执行强制合并。Open Distro for Elasticsearch 文档indices:admin/中提供了此类别包含的 操作的完整列表。

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

类别 描述

COMPLIANCE_DOC_READ

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

COMPLIANCE_DOC_WRITE

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

COMPLIANCE_INTERNAL_CONFIG_READ

请求在 .opendistro_security 索引上执行读取事件。

COMPLIANCE_INTERNAL_CONFIG_WRITE

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

您可以有类别和消息属性的任意组合。例如,如果您发送 REST 请求来为文档建立索引,则可能在审核日志中看到以下行:

  • REST 层上的 AUTHENTICATED (身份验证)

  • 传输层上的 GRANTED_PRIVILEGE(授权)

  • COMPLIANCE_DOC_WRITE (写入到索引的文档)

审核日志设置

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

常规设置

常规设置可让您启用或禁用单个类别或整个层。我们强烈建议您将 GRANTED_PRIVILEGES 和 AUTHENTICATED 保留为排除的类别。否则,系统会为针对集群的每个有效请求记录这些类别。

名称 后端设置 描述

REST 层

enable_rest

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

已禁用 REST 的类别

disabled_rest_categories

指定审核类别以忽略 REST 层上的审核类别。修改这些类别会大幅增加审核日志的大小。

传输层

启用传输

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

已禁用传输类别

disabled_transport_categories

指定必须在传输层上忽略的审核类别。修改这些类别会大幅增加审核日志的大小。

利用属性设置,您可以自定义每个日志行中的详细信息量。

名称 后端设置 描述

批量请求

resolve_bulk_requests

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

请求正文

log_request_body

包括请求的请求正文。

解析索引

resolve_indices

将别名解析为索引。

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

名称 后端设置 描述

忽略的用户

忽略用户

指定要排除的用户。

忽略的请求

ignore_requests

指定要排除的请求模式。

合规性设置

合规性设置允许您针对索引、文档或字段级访问进行优化。

名称 后端设置 描述

合规性日志记录

enable_compliance

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

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

名称 后端设置 描述

读取元数据

只读元数据只读

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

忽略的用户

read_ignore 用户

不要为读取事件包含特定用户。

监视的字段

read_watched_fields

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

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

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

名称 后端设置 描述

写入元数据

只写元数据

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

日志差异

写入日志 diffs

如果 write_metadata_only 为 false,则只包括写入事件之间的差异。

忽略的用户

写入用户

不要包含写入事件的某些用户。

监视索引

已写入的索引

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

审核日志示例

本部分包含索引的所有读取和写入事件的示例配置、搜索请求和生成的审核日志。

步骤 1:配置审核日志

在启用将审核日志发布到 CloudWatch Logs 组的功能后,导航到 Kibana 审核日志记录页面并选择 Enable audit logging (启用审核日志记录)

  1. General Settings (常规设置) 中,选择 Configure (配置) 并确保 REST layer (REST 层) 已启用。

  2. Compliance Settings (合规性设置) 中,选择 Configure (配置)

  3. Write (写入) 下的 Watched Fields (监视字段) 中,为所有写入事件将 accounts 添加到此索引。

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

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

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

  1. 导航到 Kibana,选择 Dev Tools 并为示例文档编制索引:

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

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

步骤 3:观察日志

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

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

  3. 选择在启用审核日志时指定的日志组。在日志组内,Amazon ES 为您的域中的每个节点创建一个日志流。

  4. Log streams (日志流) 中,选择 Search all (全部搜索)

  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" ] }

要包含请求正文,请返回到 Kibana 中的 Compliance settings (合规性设置) 并禁用 Write metadata (写入元数据)。要排除特定用户的事件,请将用户添加到 Ignored Users

有关每个审核日志字段的说明,请参阅审核日志字段参考。有关搜索和分析审核日志数据的信息,请参阅 CloudWatch Logs 中的使用 Insights 分析日志数据Amazon CloudWatch Logs User Guide。

审核日志 REST API

我们建议使用 Kibana 配置审核日志,但您也可以使用精细访问控制 REST API。本部分包含示例请求。Open Distro for Elasticsearch 文档中提供了有关 REST API 的完整文档。

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" ] } }