

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

# 在 Amazon OpenSearch 服务中监控审计日志
<a name="audit-logs"></a>

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

就像[OpenSearch 应用程序日志和慢速日志](createdomain-configure-slow-logs.md)一样，S OpenSearch ervice 会将审核日志发布到 CloudWatch 日志。如果启用，则适用[标准 CloudWatch 定价](https://www.amazonaws.cn/cloudwatch/pricing/)。

**注意**  
要启用审核日志，必须将您的用户角色映射到该`security_manager`角色，这样您就可以访问 OpenSearch `plugins/_security` REST API。要了解更多信息，请参阅[修改主用户](fgac.md#fgac-forget)。

**Topics**
+ [限制](#audit-logs-limitations)
+ [启用审计日志](#audit-log-enabling)
+ [使用启用审核日志 Amazon CLI](#audit-log-enabling-cli)
+ [使用配置 API 启用审计日志记录](#audit-log-enabling-api)
+ [审计日志图层和类别](#audit-log-layers)
+ [审计日志设置](#audit-log-settings)
+ [审计日志示例](#audit-log-example)
+ [使用 REST API 配置审计日志](#audit-log-rest-api)

## 限制
<a name="audit-logs-limitations"></a>

审计日志具有以下限制：
+ 审计日志不包括被目标域访问策略拒绝的跨集群搜索请求。
+ 每个审计日志消息的最大大小为 10,000 个字符。如果审计日志消息超出此限制，则会截断该消息。

## 启用审计日志
<a name="audit-log-enabling"></a>

启用审结日志是一个两步流程。首先，将您的域配置为将审核日志发布到 CloudWatch 日志。然后，您可以在 OpenSearch 控制面板中启用审核日志，并对其进行配置以满足您的需求。

**重要**  
如果您在执行以下步骤时遇到错误，请参阅 [无法启用审核日志](handling-errors.md#troubleshooting-audit-logs-error) 了解故障排除信息。

### 步骤 1：启用审计日志并配置访问策略
<a name="audit-log-enable"></a>

这些步骤将介绍如何使用控制台启用审计日志。您也可以[使用或[OpenSearch 服务 API](#audit-log-enabling-api) 启用它们](#audit-log-enabling-cli)。 Amazon CLI

**为 OpenSearch 服务域启用审核日志（控制台）**

1. 选择要打开其配置的域，然后转到 **Logs**（日志）选项卡。

1. 选择 **Audit logs**（审计日志），然后再选择 **Enable**（启用）。

1. 创建 CloudWatch 日志组或选择现有日志组。

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

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "es.amazonaws.com"
         },
         "Action": [
           "logs:PutLogEvents",
           "logs:CreateLogStream"
         ],
         "Resource": "arn:aws:logs:{{us-east-1}}:{{111122223333}}:log-group:/aws/opensearch/domains/domain-name/*"
       }
     ]
   }
   ```

------

   建议您在策略中使用 `aws:SourceAccount` 和 `aws:SourceArn` 条件键来防止出现[混淆代理人问题](https://docs.amazonaws.cn/IAM/latest/UserGuide/confused-deputy.html)。源帐户是域的所有者，并且源 ARN 是域的 ARN。您的域必须在服务软件 R20211203 或更高版本上才能添加这些条件键。

   例如，您可以将以下条件块添加到策略：

   ```
   "Condition": {
       "StringEquals": {
           "aws:SourceAccount": "{{account-id}}"
       },
       "ArnLike": {
           "aws:SourceArn": "arn:aws:es:{{region}}:{{account-id}}:domain/{{domain-name}}"
       }
   }
   ```

1. 请选择**启用**。

### 步骤 2：在 OpenSearch 控制面板中打开审核日志
<a name="audit-log-dashboards-ui"></a>

在 OpenSearch 服务控制台中启用审计日志后，还*必须*在 Dashboards 中启用 OpenSearch 审核日志并对其进行配置以满足您的需求。

1. 打开 “ OpenSearch 控制面板”，然后从左侧菜单中选择 “**安全**”。

1. 选择**审计日志**。

1. 选择**启用审计日志录入**。

控制面板 UI 提供完全控制**常规设置**和**合规性设置**。有关所有配置选项的描述，请参阅[审计日志设置](#audit-log-settings)。

## 使用启用审核日志 Amazon CLI
<a name="audit-log-enabling-cli"></a>

以下 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 命令参考](https://docs.amazonaws.cn/cli/latest/reference/)。

## 使用配置 API 启用审计日志记录
<a name="audit-log-enabling-api"></a>

对配置 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 参考](https://docs.amazonaws.cn/opensearch-service/latest/APIReference/API_LogPublishingOption.html)。

## 审计日志图层和类别
<a name="audit-log-layers"></a>

集群通信发生在两个单独的*层*：REST 层和传输层。
+ REST 层涵盖了与 HTTP 客户端（例如 curl、Logstash、Dashboards、 OpenSearch Java 高级 REST 客户端、Python [请求](https://2.python-requests.org/)库）的通信，所有这些都是到达集群的 HTTP 请求。
+ 传输层覆盖节点之间的通信。例如，在搜索请求到达集群后（通过 REST 层），服务该请求的协调节点将查询发送到其他节点、接收它们的响应、收集必要的文档，并将它们整理到最终响应中。分片分配和重新平衡等操作也会在传输层上进行。

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


| 类别 | 说明 | REST 可用 | 可用于传输 | 
| --- | --- | --- | --- | 
| FAILED\_LOGIN | 请求包含无效凭据，并且身份验证失败。 | 支持 | 是 | 
| MISSING\_PRIVILEGES | 用户没有发出请求的权限。 | 支持 | 是 | 
| GRANTED\_PRIVILEGES | 用户具有发出请求的权限。 | 支持 | 是 | 
| OPENSEARCH\_SECURITY\_INDEX\_ATTEMPT | 一个请求试图修改 .opendistro\_security 索引。 | 否 | 是 | 
| 已身份验证 | 请求包含有效凭据，并且身份验证成功。 | 支持 | 是 | 
| INDEX\_EVENT | 请求对索引执行管理操作，例如创建索引、设置别名或执行强制合并。该类别包含的indices:admin/操作的完整列表可在[OpenSearch 文档](https://docs.opensearch.org/latest/security-plugin/access-control/permissions/)中找到。 | 否 | 是 | 

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


| 类别 | 说明 | 
| --- | --- | 
| 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（文档写入索引）

## 审计日志设置
<a name="audit-log-settings"></a>

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

### 常规设置
<a name="audit-logs-general-settings"></a>

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| REST 层 | enable\_rest | 启用或禁用 REST 层上发生的事件。 | 
| REST 禁用类别 | disabled\_rest\_categories | 指定要在 REST 层忽略的审计类别。修改这些类别可以大大增加审计日志的大小。 | 
| 传输层 | enable\_transport | 启用或禁用传输层上发生的事件。 | 
| 传输禁用类别 | disabled\_transport\_categories | 指定传输层上必须忽略的审计类别。修改这些类别可以大大增加审计日志的大小。 | 

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| 批量请求 | resolve\_bulk\_requests | 启用此设置为批量请求中的每个文档生成一个日志，这可以大大增加审计日志的大小。 | 
| 请求正文 | log\_request\_body | 包括请求的请求正文。 | 
| 解决索引 | resolve\_indices | 将别名解析为索引。 | 

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| 忽略的用户 | ignore\_users | 指定要排除的用户。 | 
| 忽略的请求 | ignore\_requests | 指定要排除的请求模式。 | 

### 合规性设置
<a name="audit-logs-compliance-settings"></a>

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| 合规性日志 | enable\_compliance | 启用或禁用符合性日志记录。 | 

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| 内部配置日志记录 | internal\_config | 启用或禁用 `.opendistro_security` 索引中的事件记录。 | 

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| 读取元数据 | read\_metadata\_only | 仅包含读取事件的元数据。请勿包含任何文档字段。 | 
| 忽略的用户 | read\_ignore\_users | 请勿为读取事件包含特定用户。 | 
| 观看的字段 | read\_watched\_fields | 指定要监视读取事件的索引和字段。添加受监视字段会为每个文档访问生成一个日志，这可能会大大增加审计日志的大小。监视字段支持索引模式和字段模式：<pre>{<br />  "index-name-pattern": [<br />    "field-name-pattern"<br />  ],<br />  "logs*": [<br />    "message"<br />  ],<br />  "twitter": [<br />    "id",<br />    "user*"<br />  ]<br />}</pre> | 

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


| Name | 后端设置 | 说明 | 
| --- | --- | --- | 
| 写入元数据 | write\_metadata\_only | 仅包含写入事件的元数据。请勿包含任何文档字段。 | 
| 日志差异 | write\_log\_diffs | 如果仅写入元数据为假，则仅包括写入事件之间的差异。 | 
| 忽略的用户 | write\_ignore\_users | 请勿为写入事件包括某些用户。 | 
| 观看索引 | write\_watched\_indices | 指定要监视写入事件的索引或索引模式。添加受监视字段会为每个文档访问生成一个日志，这可能会大大增加审计日志的大小。 | 

## 审计日志示例
<a name="audit-log-example"></a>

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

### 步骤 1：配置审计日志
<a name="audit-log-example-step1"></a>

启用将审计日志发布到 CloudWatch 日志组后，导航到 OpenSearch 仪表板审核日志页面并选择**启用审核**日志。

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

1. 在**合规性设置**中，选择**配置**。

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

1. 在**读取**下的**监控字段**中，添加 `accounts` 索引的 `ssn` 和 `id-` 字段：

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

### 步骤 2：执行读取和写入事件
<a name="audit-log-example-step2"></a>

1. 导航到 “ OpenSearch 控制面板”，选择 “**开发工具**”，然后为示例文档编制索引：

   ```
   PUT accounts/_doc/0
   {
     "ssn": "123",
     "id-": "456"
   }
   ```

1. 要测试读取事件，请发送以下请求：

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

### 步骤 3：观察日志
<a name="audit-log-example-step2"></a>

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/)。

1. 在导航窗格中，选择**日志组**。

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

1. 在**日志流**中，选择**搜索全部**。

1. 有关读取和写入事件，请参阅相应的日志。在日志出现之前，您可能会有 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 控制面板中的**合规性设置**并禁用 “**写入元数据**”。要排除某个具体用户的事件，请将该用户添加到**忽略的用户**。

有关每个审计日志字段的描述，请参阅[审计日志字段参考](https://docs.opensearch.org/latest/security-plugin/audit-logs/field-reference/)。有关搜索和分析审核日志数据的信息，请参阅 *Amazon Logs 用户指南中的使用 CloudWatch 日志见解分析 CloudWatch 日志*[数据](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。

## 使用 REST API 配置审计日志
<a name="audit-log-rest-api"></a>

我们建议使用 OpenSearch 仪表板来配置审计日志，但您也可以使用精细的访问控制 REST API。本节包含一个示例请求。有关 REST API 的完整文档可在[OpenSearch 文档](https://opensearch.org/docs/latest/security/access-control/api/#audit-logs)中找到。

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