本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
的审核日志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 域启用审核日志(控制台)
-
选择域,然后选择 Logs (日志) 选项卡。
-
在 Set up audit logs (设置审核日志) 下,选择 Setup (设置)。
-
创建 CloudWatch 日志组,或选择现有日志组。
-
选择一个包含适当权限的访问策略,或使用控制台提供的 JSON 创建策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "
cw_log_group_arn
" } ] } -
选择启用。
示例 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
在启用审核日志后,请对其进行配置以满足您的需求。
-
打开 Kibana,然后选择 Security。
-
选择 Audit logs (审核日志)。
-
选择 Enable audit logging (启用审核日志记录)。

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 |
请求在 |
COMPLIANCE_INTERNAL_CONFIG_WRITE |
请求对 |
您可以有类别和消息属性的任意组合。例如,如果您发送 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 |
指定要监视读取事件的索引和字段。添加受监控的字段会为每个文档访问生成一个日志,这可能会显著增加审核日志的大小。受监控字段支持索引模式和字段模式:
|
您可以为写入事件指定以下设置。
名称 | 后端设置 | 描述 |
---|---|---|
写入元数据 |
只写元数据 |
仅包含写入事件的元数据。请勿包含任何文档字段。 |
日志差异 |
写入日志 diffs |
如果 write_metadata_only 为 false,则只包括写入事件之间的差异。 |
忽略的用户 |
写入用户 |
不要包含写入事件的某些用户。 |
监视索引 |
已写入的索引 |
指定要监视写入事件的索引或索引模式。添加受监控的字段会为每个文档访问生成一个日志,这可能会显著增加审核日志的大小。 |
审核日志示例
本部分包含索引的所有读取和写入事件的示例配置、搜索请求和生成的审核日志。
步骤 1:配置审核日志
在启用将审核日志发布到 CloudWatch Logs 组的功能后,导航到 Kibana 审核日志记录页面并选择 Enable audit logging (启用审核日志记录)。
-
在 General Settings (常规设置) 中,选择 Configure (配置) 并确保 REST layer (REST 层) 已启用。
-
在 Compliance Settings (合规性设置) 中,选择 Configure (配置)。
-
在 Write (写入) 下的 Watched Fields (监视字段) 中,为所有写入事件将
accounts
添加到此索引。 -
在 Read (读取) 下的 Watched Fields (监控的字段) 中,添加
ssn
索引的id-
和accounts
字段:{ "accounts-": [ "ssn", "id-" ] }
步骤 2:执行读取和写入事件
-
导航到 Kibana,选择 Dev Tools 并为示例文档编制索引:
PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
-
要测试读取事件,请发送以下请求:
GET accounts/_search { "query": { "match_all": {} } }
步骤 3:观察日志
-
打开 CloudWatch 控制台 (https://console.aws.amazon.com/cloudwatch/
)。 -
在导航窗格中,选择 Log groups (日志组)。
-
选择在启用审核日志时指定的日志组。在日志组内,Amazon ES 为您的域中的每个节点创建一个日志流。
-
在 Log streams (日志流) 中,选择 Search all (全部搜索)。
-
有关读取和写入事件,请参阅相应的日志。日志显示之前,预计会有 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。
有关每个审核日志字段的说明,请参阅审核日志字段参考
审核日志 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" ] } }