本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon OpenSearch 服务中监控审计日志
如果您的 Amazon S OpenSearch ervice 域使用精细的访问控制,则可以为数据启用审核日志。审计日志是高度可定制的,允许您跟踪 OpenSearch集群上的用户活动,包括身份验证成功和失败、对身份验证的请求 OpenSearch、索引更改以及传入的搜索查询。默认配置会跟踪一组常用的用户操作,但建议根据您的具体需求定制设置。
就像OpenSearch 应用程序日志和慢速日志一样,S  OpenSearch  ervice 会将审核日志发布到 CloudWatch 日志。如果启用,则适用标准 CloudWatch 定价
注意
要启用审核日志,必须将您的用户角色映射到该security_manager角色,这样您就可以访问  OpenSearch  plugins/_security REST API。要了解更多信息,请参阅修改主用户。
限制
审计日志具有以下限制:
- 
        
审计日志不包括被目标域访问策略拒绝的跨集群搜索请求。
 - 
        
每个审计日志消息的最大大小为 10,000 个字符。如果审计日志消息超出此限制,则会截断该消息。
 
启用审计日志
启用审结日志是一个两步流程。首先,将您的域配置为将审核日志发布到 CloudWatch 日志。然后,您可以在 OpenSearch 控制面板中启用审核日志,并对其进行配置以满足您的需求。
重要
如果您在执行以下步骤时遇到错误,请参阅 无法启用审核日志 了解故障排除信息。
步骤 1:启用审计日志并配置访问策略
这些步骤将介绍如何使用控制台启用审计日志。您也可以使用或OpenSearch 服务 API 启用它们。 Amazon CLI
为 OpenSearch 服务域启用审核日志(控制台)
- 
          
选择要打开其配置的域,然后转到 Logs(日志)选项卡。
 - 
          
选择 Audit logs(审计日志),然后再选择 Enable(启用)。
 - 
          
创建 CloudWatch 日志组或选择现有日志组。
 - 
          
选择一个包含适当权限的访问策略,或使用控制台提供的 JSON 创建策略:
建议您在策略中使用
aws:SourceAccount和aws:SourceArn条件键来防止出现混淆代理人问题。源帐户是域的所有者,并且源 ARN 是域的 ARN。您的域必须在服务软件 R20211203 或更高版本上才能添加这些条件键。例如,您可以将以下条件块添加到策略:
"Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } } - 
          
请选择启用。
 
步骤 2:在 OpenSearch 控制面板中打开审核日志
在 OpenSearch 服务控制台中启用审计日志后,还必须在 Dashboards 中启用 OpenSearch 审核日志并对其进行配置以满足您的需求。
- 
          
打开 “ OpenSearch 控制面板”,然后从左侧菜单中选择 “安全”。
 - 
          
选择审计日志。
 - 
          
选择启用审计日志录入。
 
控制面板 UI 提供完全控制常规设置和合规性设置。有关所有配置选项的描述,请参阅审计日志设置。
使用启用审核日志 Amazon CLI
以下 Amazon CLI 命令在现有域上启用审核日志:
aws opensearch update-domain-config --domain-namemy-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 } } }
有关更多信息,请参阅亚马逊 OpenSearch服务 API 参考。
审计日志图层和类别
集群通信发生在两个单独的层:REST 层和传输层。
- 
        
REST 层涵盖了与 HTTP 客户端(例如 curl、Logstash、Dashboards、 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  | 
            
               在   | 
          
| 
               COMPLIANCE_INTERNAL_CONFIG_WRITE  | 
            在   | 
          
您可以使用任何类别和消息属性组合。例如,如果您发送 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  | 
              
                 启用或禁用   | 
            
您可以为读取事件指定以下设置。
| 名称 | 后端设置 | 说明 | 
|---|---|---|
| 
                 读取元数据  | 
              
                 read_metadata_only  | 
              
                 仅包含读取事件的元数据。请勿包含任何文档字段。  | 
            
| 
                 忽略的用户  | 
              
                 read_ignore_users  | 
              
                 请勿为读取事件包含特定用户。  | 
            
| 
                 观看的字段  | 
              
                 read_watched_fields  | 
              
                 指定要监视读取事件的索引和字段。添加受监视字段会为每个文档访问生成一个日志,这可能会大大增加审计日志的大小。监视字段支持索引模式和字段模式: 
  | 
            
您可以为写入事件指定以下设置。
| 名称 | 后端设置 | 说明 | 
|---|---|---|
| 
                 写入元数据  | 
              
                 write_metadata_only  | 
              
                 仅包含写入事件的元数据。请勿包含任何文档字段。  | 
            
| 
                 日志差异  | 
              
                 write_log_diffs  | 
              
                 如果仅写入元数据为假,则仅包括写入事件之间的差异。  | 
            
| 
                 忽略的用户  | 
              
                 write_ignore_users  | 
              
                 请勿为写入事件包括某些用户。  | 
            
| 
                 观看索引  | 
              
                 write_watched_indices  | 
              
                 指定要监视写入事件的索引或索引模式。添加受监视字段会为每个文档访问生成一个日志,这可能会大大增加审计日志的大小。  | 
            
审计日志示例
本节包括一个示例配置、搜索请求以及索引的所有读取和写入事件的结果审计日志。
步骤 1:配置审计日志
启用将审计日志发布到 CloudWatch 日志组后,导航到 OpenSearch 仪表板审核日志页面并选择启用审核日志。
- 
          
在常规设置中,选择配置并确保 REST 层处于启用状态。
 - 
          
在合规性设置中,选择配置。
 - 
          
在写入的下面,在观看的字段中将添加所有的写入事件的
accounts添加添加到此索引。 - 
          
在 Read(读取)下的 Watched Fields(监控字段)中,添加
accounts索引的ssn和id-字段:{ "accounts-": [ "ssn", "id-" ] } 
步骤 2:执行读取和写入事件
- 
          
导航到 “ OpenSearch 控制面板”,选择 “开发工具”,然后为示例文档编制索引:
PUT accounts/_doc/0 { "ssn": "123", "id-": "456" } - 
          
要测试读取事件,请发送以下请求:
GET accounts/_search { "query": { "match_all": {} } } 
步骤 3:观察日志
- 
          
打开 CloudWatch 控制台,网址为https://console.aws.amazon.com/cloudwatch/
。  - 
          
在导航窗格中,选择 日志组。
 - 
          
选择您在启用审计日志时指定的日志组。在日志组中,S OpenSearch ervice 会为您域中的每个节点创建一个日志流。
 - 
          
在日志流中,选择搜索全部。
 - 
          
有关读取和写入事件,请参阅相应的日志。在日志出现之前,您可能会有 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" ] } 
要包含请求正文,请返回 OpenSearch 控制面板中的合规性设置并禁用 “写入元数据”。要排除某个具体用户的事件,请将该用户添加到忽略的用户。
有关每个审计日志字段的描述,请参阅审计日志字段参考
使用 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" ] } }