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

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

在 Amazon Elasticsearch Service 中监控审计日志

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

就像Elasticsearch Logs 和慢速日志,Amazon Es 会将审计日志发布到 CloudWatch Logs。如果启用,标准 CloudWatch 定价适用。

注意

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

Limitations

审计日志具有以下限制:

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

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

启用审核日志

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

重要

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

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

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

  2. Un设置审核日志中,选择设置

  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 命令

以下Amazon 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}"

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

配置 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 中配置审核日志

启用审核日志后,配置它们以满足您的需求。

  1. 打开 Kibana,然后选择安全

  2. 选择审核日志

  3. 选择启用审核日志记录


        审核日志 Kibana UI 屏幕截图

Kibana 用户界面可以完全控制常规设置合规性设置。有关所有配置选项的描述,请参阅审核日志设置

审计日志图层和类别

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

  • REST 层覆盖与 HTTP 客户端的通信,例如卷曲,日志记录,Kibana,Java 高级别 REST 客户端, Python请求库-到达群集的所有 HTTP 请求。

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

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

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

登录失败

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

缺失权限

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

授予的权限

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

打开危险安全索引尝试

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

身份验证

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

索引事件

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

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

类别 描述

法规遵从性文档读取

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

法规遵从性文档写入

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

合规性 _ 内部 _ 配置 _ 读取

请求在.opendistro_security索引。

合规性 _ 内部 _ 配置 _ 写

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

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

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

  • 传输层授予的特权(授权)

  • 法规遵从性文档写入(文档写入索引)

审核日志设置

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

常规设置

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

名称 后端设置 描述

REST 层

启用休息

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

REST 禁用的类别

已禁用的静止类别

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

传输层

启用传输

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

传输残疾类别

已禁用传输类别

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

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

名称 后端设置 描述

批量请求

已解决批量请求

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

请求正文

日志请求正文

包括请求的请求正文。

解决索引

解析指数

将别名解析为索引。

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

名称 后端设置 描述

忽略的用户

忽略用户

指定要排除的用户。

忽略的请求

忽略请求

指定要排除的请求模式。

合规性设置

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

名称 后端设置 描述

合规性日志

启用符合性

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

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

名称 后端设置 描述

读取元数据

仅读取元数据

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

忽略的用户

读取忽略用户

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

观看的字段

读取监视字段

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

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

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

名称 后端设置 描述

写入元数据

仅写元数据

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

日志差异

写入日志差异

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

忽略的用户

写入忽略用户

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

观看索引

写入监视指数

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

审核日志示例

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

第 1 步:配置审核日志

启用将审核日志发布到 CloudWatch Logs 组后,导航到 Kibana 审核日志记录页面,然后选择启用审核日志记录

  1. In常规设置中,选择配置并确保REST 层已启用。

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

  3. Un写入, 在观看的字段,添加accounts,以获取所有写入事件到此索引。

  4. UnRead, 在观看的字段,添加ssnid-字段accounts索引:

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

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

  1. 导航到 Kibana,选择开发工具并索引示例文档:

    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. In日志流中,选择搜索全部

  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,并禁用写入元数据。要排除特定用户的事件,请将用户添加到忽略的用户

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

使用 REST API 配置审计日志

我们建议使用 Kibana 配置审核日志,但也可以使用精细访问控制 REST API。此部分包含一个示例请求。有关 REST API 的完整文档可在Open Distro of Elasticsearch 文档

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