

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

# Cross-account 跨区域日志集中化
<a name="CloudWatchLogs_Centralization"></a>

Amazon L CloudWatch ogs 数据集中化使用跨账户和跨区域集中规则，将来自多个成员账户的日志数据收集到一个数据存储库中。 AWS Organizations 您可以定义自动将日志数据从多个账户和 AWS 区域 复制到组织内集中账户的规则。此功能简化了日志整合，从而改善了整个 AWS 基础架构的集中监控、分析和合规性。

 CloudWatch 日志数据集中化提供了配置灵活性，以满足运营和安全要求，例如能够在目标账户中设置规则期间配置备份区域，以确保提高灵活性。此外，您可以完全控制从源账户复制的日志组的加密行为，以处理最初使用客户管理的 KMS 密钥加密的数据。

**注意**  
 CloudWatch 日志集中化功能仅处理创建集中规则后到达源账户的新日志数据。历史日志数据（创建规则之前存在的日志）不会进行集中。

## 数据集中化概念
<a name="centralization-concepts"></a>

在开始使用 CloudWatch 日志数据集中化之前，请熟悉以下概念：

**集中化规则**  
一种用于定义如何将源账户和区域中的日志数据复制到目标账户和区域的配置。规则指定源条件和目标设置。

**源账户**  
日志数据来源的 AWS 账户。根据您定义的集中化规则，源账户中的日志事件将复制到目标账户。

**目标账户**  
存储副本日志数据的目标 AWS 帐户。该账户用作日志分析和监控的集中位置。

**备份区域**  
目标账户中的可选辅助区域，可以在其中复制日志数据，以提高恢复能力并实现灾难恢复。

**标签传播**  
一种选择加入功能，可将资源标签从源日志组传播到相应的目标日志组。标签传播使用目标账户中客户管理的 IAM 角色来添加、更新和删除目标日志组上的标签。您可以通过在集中化规则的目标配置中添加`TagPropagationConfiguration`区块来配置标签传播。

** CloudWatch 日志中的加密 **  
日志组数据始终在 CloudWatch 日志中加密。默认情况下， CloudWatch 日志使用服务器端加密和 256 位高级加密标准 Galois/Counter 模式 (AES-GCM) 来加密静态日志数据。作为替代方案，您可以使用 AWS 密钥管理服务进行这种加密。有关更多信息，请参阅[CloudWatch 日志加密文档](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。  
+ **集中化期间加密的工作原理**： CloudWatch 日志集中化在摄取时主动将日志数据从源账户复制到目标账户。在此过程中，您的数据在传输过程中将使用 AWS 自有服务密钥进行加密。源日志组和目标日志组中的静态数据均使用您选择的加密方法（客户管理或 AWS 拥有的 KMS 密钥）进行加密。如果您在目标日志组中使用客户管理的 KMS 密钥，请将标签添加`LogsManaged = true`到 kms 密钥中，以便集中化服务访问该密钥。
+ **当需要 KMS 权限时**：
  + 如果您在源账户中使用客户管理的 KMS 密钥，则在以下示例场景[中， CloudWatch 日志需要 ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html#cmk-permissions-lg) KMS 权限：
    + **吞吐量管理**：当达到集中吞吐量限制时，日志数据将临时使用客户管理的 KMS 密钥加密存储，直到带宽可用为止。
    + **数据保护和编辑**：当源日志组启用了数据保护策略时， CloudWatch 日志需要解密权限才能访问原始日志数据以对其进行集中管理。
集中化规则由 AWS 组织管理账户或委派管理员管理。要将客户管理的 KMS-encrypted 日志组排除在集中管理范围之外，请将规则设置配置为 “不要集中使用 AWS KMS 密钥加密的日志组”。

## 设置日志集中化
<a name="centralization-setup"></a>

要设置 CloudWatch 日志集中化，您需要配置集中规则，定义日志数据如何从源账户的日志组流向目标账户中的日志组。

启用集中化规则并将日志事件复制到目标账户后，您可以针对集中式日志组创建指标、订阅和账户筛选条件，并增强筛选功能。这些筛选条件可以针对来自特定源账户和区域的日志事件，并且可以将源账户和区域信息作为指标维度发出。有关更多信息，请参阅 [使用筛选条件从日志事件创建指标](MonitoringLogData.md)。

### 先决条件
<a name="centralization-prerequisites"></a>
+ AWS Organizations 必须进行设置，并且源帐户和目标帐户必须都属于组织。
+  必须为管理账户和目标账户启用可信访问权限 CloudWatch，以便提供对日志数据的访问权限。
**注意**  
建议通过控制台启用可信访问，这会自动创建所需的服务相关角色（SLR）。如果通过其他方法启用可信访问，则需要单独创建服务相关角色。

#### 标签传播的先决条件
<a name="centralization-tag-propagation-prerequisites"></a>

要启用标签传播，必须完成以下附加设置：

##### 创建客户管理的 IAM 角色
<a name="centralization-tag-propagation-role"></a>

您必须使用以下配置在目标账户中创建客户管理的 IAM 角色：

##### 信任策略
<a name="centralization-tag-propagation-trust-policy"></a>

该角色的信任策略必须允许中心化服务相关角色代入该角色。以下示例信任策略向`AWSServiceRoleForObservabilityAdmin_LogsCentralization`服务相关角色授予代入目标角色的权限。`<destination-account-id>`替换为您的目标账户 ID `<organization-id>` 和您的 AWS Organizations ID。

```
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::<destination-account-id>:role/aws-service-role/logs-centralization.observabilityadmin.amazonaws.com/AWSServiceRoleForObservabilityAdmin_LogsCentralization"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "<organization-id>"
      }
    }
  }]
}
```

##### 权限策略
<a name="centralization-tag-propagation-permissions-policy"></a>

该角色的权限策略必须授予对目标日志组的标签操作。以下示例授予所需的最低权限。`<destination-account-id>`用你的价值取代。您可以将范围`Resource`进一步限定到特定的日志组 ARN 模式。

```
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "logs:ListTagsForResource",
      "logs:TagResource",
      "logs:UntagResource"
    ],
    "Resource": "arn:aws:logs:*:<destination-account-id>:log-group:*"
  }]
}
```

##### 授予 iam: PassRole 权限
<a name="centralization-tag-propagation-passrole"></a>

您必须拥有目标角色的`iam:PassRole`权限，通过`iam:PassedToService`条件密钥将权限范围限定为集中化服务。以下示例授予传递角色的权限。将 `<destination-account-id>` 和 `<your-tag-role-name>` 替换为您自己的值。

**注意**  
此声明适用于您的身份政策（委托人呼叫`CreateCentralizationRuleForOrganization`或`UpdateCentralizationRuleForOrganization`），而不是目标角色本身。

```
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "arn:aws:iam::<destination-account-id>:role/<your-tag-role-name>",
    "Condition": {
      "StringEquals": {
        "iam:PassedToService": "logs-centralization.observabilityadmin.amazonaws.com"
      }
    }
  }]
}
```

### 自定义目标日志组名称
<a name="centralization-destination-log-group-names"></a>

创建集中化规则时，您可以使用属性自定义目标日志组名称的结构。创建日志组时，这些属性会自动替换为实际值，从而允许您在目标账户中按层次结构组织日志。默认情况下，仅使用该`${source.logGroup}`属性，它会合并目标账户中所有同名的日志组。如果变量无法解析，它将继承层次结构中其父变量的值。

#### 可用属性
<a name="centralization-destination-attributes"></a>

可以在目标日志组名称模式中使用以下属性：


**目标日志组名称属性**  

| 属性 | 说明 | 
| --- | --- | 
| ${source.accountId} | 日志来源的 AWS 账户 ID。 | 
| ${source.region} | 日志 AWS 区域 的起源。 | 
| ${source.logGroup} | 源账户的原始日志组名称。 | 
| ${source.org.id} | 您的来源账户的 AWS Organizations ID。 | 
| ${source.org.ouId} | 来源账户的组织单位 ID | 
| ${source.org.rootId} | 组织根 ID | 
| ${source.org.path} | 从账户到 root 的完整组织路径 | 

#### 示例
<a name="centralization-destination-examples"></a>

保留原始日志组结构  
模式：`/centralized/${source.accountId}${source.logGroup}`  
结果：`/centralized/123456789012/aws/lambda/my-function`

按账户和地区整理  
模式：`/centralized/${source.accountId}/${source.region}`  
结果：`/centralized/123456789012/us-east-1`

按组织结构组织  
模式：`/logs/${source.org.id}/${source.org.ouId}/${source.accountId}`  
结果：`/logs/o-abc123/ou-xyz-12345678/123456789012`

简单的扁平结构  
模式：`/centralized-logs`  
结果：`/centralized-logs`

#### 最佳实践
<a name="centralization-destination-best-practices"></a>
+ 包括源账户 ID 以轻松识别来自哪个账户日志。
+ 如果您要从多个区域进行集中管理，请包括源区域。
+ 将目标日志组名称结构化为低于 512 个字符。 CloudWatch 日志强制规定日志组名称的最大长度为 512 个字符。
+ 如果启用标签传播，则该模式必须包含所有三个属性：`${source.logGroup}``${source.accountId}`、和`${source.region}`。这样可以确保每个源日志组映射到唯一的目标日志组。

### 创建集中化规则
<a name="create-centralization-rule"></a>

请按照以下过程创建一个将日志数据从源账户复制到目标账户的集中化规则。

**创建集中化规则**

1. 在组织的管理或委派管理员帐户中导航到 CloudWatch 控制台。

1. 选择**设置**。

1. 导航到**组织**选项卡。

1. 选择**配置规则**。

1. 通过设置下面的字段来指定源详细信息，然后选择**下一步**：

   1. **集中化规则名称**：为集中化规则输入一个唯一名称。

   1. **源账户**：定义源选择标准，以选取要从中集中遥测数据的账户。选择标准可包括：
      + 组织内的成员账户列表
      + 组织内的组织单元列表
      + 整个组织

      您可以通过两种模式提供选择标准：
      + **生成器**：基于点击的体验，可生成源选择标准
      + **编辑器**：提供源选择标准的自由格式的文本框

      源选择标准支持的语法：
      + *支持的密钥：* OrganizationId \| OrganizationUnitId \| AccountId \| \*
      + *支持的运算符：*= \| IN \| OR

   1. **源区域**：选择一个区域列表以查找要集中的遥测数据。

1. 通过设置下面的字段来指定目标详细信息，然后选择**下一步**：

   1. **目标账户**：在组织中选择一个充当遥测数据中心目标的账户。

   1. **目标区域**：选择一个存储集中式遥测数据副本的主要区域。

   1. **备份区域**：根据需要选择存储集中式遥测数据的第二个副本的区域。

1. 通过设置下面的字段来指定遥测数据，然后选择**下一步**：

   1. **日志组**：选择以下选项之一：
      + **所有日志组**：集中源账户中所有日志组的日志。
      + **筛选日志组**：根据选择标准，集中来自源账户中一部分日志组的日志。您可以通过两种模式提供选择标准：
        + **Builder**：基于选择的体验，用于生成选择标准
        + **编辑器**：提供选择条件的自由格式文本框

        您可以使用两个选择标准来筛选日志：
        + **日志组选择标准**：指定要集中哪些源日志组的选择标准。
          + *支持的密钥：* LogGroupName\| \*
          + *支持的运算符：*= \| \!= \| IN \| NOT IN \| AND \| OR \| LIKE \| NOT LIKE
        + **数据源选择标准**：指定要集中哪些数据源的选择标准。
          + *支持的密钥：* DataSourceName\| DataSourceType
          + *支持的运算符：*= \| \!= \| IN \| NOT IN \| AND \| OR \| LIKE \| NOT LIKE

        当同时指定了日志组选择标准和数据源选择标准时，日志事件必须符合这两个标准才能集中化。

   1. **KMS 加密的日志组**
**重要**  
CloudWatch 如果集中化规则中提供的 KMS 密钥不允许日志使用日志，则集中化规则将无法将日志从源账户传送到目标 CloudWatch 日志组。如果您在目标日志组中使用客户管理的 KMS 密钥，请在 kms 密钥中添加标签 LogsManaged = true。有关更多信息，请参阅 [步骤 2：设置 KMS 密钥的权限](CloudWatchLogs-Insights-Query-Encrypt.md#cmk-permissions)。

      请选择以下选项之一：
      + **使用特定目标客户管理的 KMS 密钥集中使用客户管理的 KMS 密钥加密的源日志组**：将使用客户管理的 KMS 密钥加密的源日志组中的日志事件集中到目标账户中使用客户管理的 KMS 密钥加密的目标日志组中。

         选择此设置后，您还必须设置以下内容：
        + **目标加密密钥 ARN**：目标账户和主要目标区域中客户管理的 KMS 密钥的 ARN，将与新创建的目标日志组相关联。
        + **备份目标加密密钥 ARN**（如果选择了备份区域）：目标账户和备份目标区域中客户管理的 KMS 密钥的 ARN，将与新创建的目标日志组相关联。
        + **跳过集中到未加密的目标日志组**（可选）：如果日志组已经存在，但没有客户管理的 KMS 密钥，则 CloudWatch 无法更新其加密。选择此选项可跳过将日志事件从使用客户管理的 KMS 密钥加密的源日志组集中到与客户管理的 KMS 密钥无关的目标日志组中。
      + **使用 AWS 自有 KMS 密钥将使用客户管理的 KMS 密钥加密的日志组集中到目标账户中**：将使用客户管理的 KMS 密钥加密的源日志组中的日志事件集中到使用 AWS 自有 KMS 密钥加密的新创建的目标日志组中。
      + **不要集中使用客户管理的 KMS 密钥加密的日志组**：跳过使用客户管理的 KMS 密钥加密的源日志组中的日志事件的集中化。

1. 查看集中化规则，根据需要进行任何最后的编辑，然后选择**创建集中化策略**。

   

### 修改集中化规则
<a name="modify-centralization-rule"></a>

请按照以下过程修改现有的集中化规则。

**修改集中化规则**

1. 在组织的管理或委派管理员帐户中导航到 CloudWatch 控制台。

1. 选择**设置**。

1. 导航到**组织**选项卡。

1. 选择**管理规则**。

1. 选择要更新规则，然后选择**编辑**。

1. 根据需要更新规则配置，然后选择**下一步**继续执行每个步骤。

1. 在步骤 4“查看和配置”中，选择**更新集中化策略**。

### 查看集中化规则
<a name="view-centralization-rule"></a>

请按照以下过程查看现有集中化规则的详细信息。

**查看集中化规则**

1. 在组织的管理或委派管理员帐户中导航到 CloudWatch 控制台。

1. 选择**设置**。

1. 导航到**组织**选项卡。

1. 选择**管理规则**。

1. 查看所有现有集中化规则的列表，然后选择一个特定规则名称以查看其详细信息。

### 删除集中化规则
<a name="delete-centralization-rule"></a>

请按照以下过程删除现有的集中化规则。

**删除集中化规则**

1. 在组织的管理或委派管理员帐户中导航到 CloudWatch 控制台。

1. 选择**设置**。

1. 导航到**组织**选项卡。

1. 选择**管理规则**。

1. 选择要删除的规则，然后选择**删除**。

1. 确认删除并选择**删除**。

## 监控和排查集中化规则
<a name="centralization-monitoring"></a>

您可以使用 CloudWatch 指标、 CloudWatch 日志控制台和日志来监控集中化规则的状态和 AWS CloudTrail 性能。这有助于确保日志数据成功复制，并识别集中化配置中的任何问题。

CloudWatch 日志提供：

1. *每个集中化规则的规则运行状况 *

   1. 选择**设置**。

   1. 导航到**组织**选项卡。

   1. 选择**管理规则**。

1. *使用以下方式记录 API 调用 AWS CloudTrail*

1. CloudWatch 还发布集中化指标，包括复制的日志事件、错误和限制。有关这些指标及其维度的更多信息，请参阅[集中化指标和维度](CloudWatch-Logs-Monitoring-CloudWatch-Metrics.md#CloudWatchLogs-Centralization-Metrics)。

### 集中化规则运行状况
<a name="centralization-rule-health"></a>

每个集中化规则都有运行状况指示其是否正常运行。您可以通过控制台或使用 API 以编程方式检查规则运行状况。

规则运行状况包括：
+ `HEALTHY`：规则运行正常，并按配置复制日志数据
+ `UNHEALTHY`：规则遇到问题，可能无法正确复制数据
+ `PROVISIONING`：组织的集中化正在设置过程中。

当规则被标记为 UNHEALTHY 时，`FailureReason` 字段会提供有关需要解决的具体问题的详细信息。

#### 标签传播健康状态
<a name="centralization-tag-propagation-health"></a>

标签传播有自己的运行状况 (`TagPropagationStatus`)，该状态与日志传输`RuleHealth`的整体运行状况无关。如果您错误配置了目标角色，则不会影响您的整体规则运行状况——只有标签传播显示为不正常。
+ `Healthy`：最近的标签传播尝试成功。
+ `Unhealthy`：最近的标签传播尝试失败。详情请查看该`TagPropagationFailureReason`字段。有关补救步骤，请参阅下面的故障排除部分。

### 使用监控集中化 API 调用 AWS CloudTrail
<a name="centralization-cloudtrail"></a>

AWS CloudTrail 记录对集中化服务进行的 API 调用，允许您跟踪配置更改并解决属于您的 AWS Organizations成员的帐户的问题。

集中化的关键 CloudTrail 事件包括：
+ `CreateCentralizationRuleForOrganization`：创建新的集中化规则时
+ `UpdateCentralizationRuleForOrganization`：修改现有规则时
+ `DeleteCentralizationRuleForOrganization`：删除规则时
+ `GetCentralizationRuleForOrganization`：检索规则详细信息时
+ `ListCentralizationRulesForOrganization`：列出规则时

您可以使用 CloudTrail 日志来审核集中配置更改，并将其与性能问题或复制失败关联起来。

### 监控建议
<a name="centralization-monitoring-recommendations"></a>

为确保集中化正常运行，我们建议对提供给 Metrics 的关键集中化指标设置 CloudWatch 警报。 CloudWatch 这种主动监控可帮助您及早发现问题，并在整个组织中保持可靠的日志集中化。

需要监控的关键指标包括：
+ `IncomingCopiedBytes`：监控成功复制到目标账户的日志数据量。该指标的突然下降或缺失可能表明存在集中化问题。
+ `CentralizationError`：为集中化过程中的任何错误设置警报，以快速识别和解决问题。
+ `CentralizationThrottled`：监控可能影响日志复制性能的限制事件。

有关可用集中化指标及其维度的完整列表，请参阅[集中化指标和维度](CloudWatch-Logs-Monitoring-CloudWatch-Metrics.md#CloudWatchLogs-Centralization-Metrics)。

如果日志未按预期进行集中化，请查看以下可能阻止日志集中化的常见场景。

**历史日志数据**  
 CloudWatch 日志集中化功能仅处理创建集中规则后到达源账户的新日志数据。历史日志数据（创建规则之前存在的日志）不会进行集中。

**KMS 密钥权限**  
如果集中化规则中提供的 KMS 密钥不允许日志使用日志，则集中化规则将无法将日志从源账户传送到目标 CloudWatch 日志组。确保 KMS 密钥策略为 CloudWatch 日志授予必要的权限。有关更多信息，请参阅 [步骤 2：设置 KMS 密钥的权限](CloudWatchLogs-Insights-Query-Encrypt.md#cmk-permissions)。

**客户管理的 KMS 密钥配置**  
如果您**在规则创建期间选择了**不集中使用客户管理的 KMS 密钥加密的日志组，则使用客户管理的 KMS 密钥加密的源日志组中的日志事件将被跳过且不会集中化。

**目标加密不匹配**  
如果目标日志组已经存在，其KMS加密配置与集中规则指定的配置不同，并且冲突解决方案设置为SKIP，则记录将被删除并发出`DestinationEncryptionMismatch`错误。例如，当目标采用默认加密但规则指定了客户管理的 KMS 密钥时，就会发生这种情况。

**未启用可信访问**  
必须为 CloudWatch 管理账户和目标账户启用可信访问权限，以提供对日志数据的访问权限。 AWS Organizations 

**来源选择标准**  
验证您的集中化规则的来源选择标准是否配置正确：  
+ *账户和区域*：确保规则中包含源账户和日志来源区域。来自规则中未指定的账户或区域的日志组将不会被集中化。
+ *日志组筛选器*：如果您配置了日志组筛选器，则只有符合指定条件的日志组才会被集中化。确认您的日志组选择标准包括您希望集中管理的日志组。
+ *组织成员资格*：源账户和目标账户必须属于同一个 AWS Organizations 组织。组织以外的账户不能参与集中管理。

**已达到日志组配额限制**  
如果目标账户已达到其日志组配额限制，则无法为集中化创建新的日志组。确认目标账户有足够的配额来容纳来自所有源账户的集中日志组。如果需要，您可以请求增加配额。

**已超过日志流名称长度限制**  
日志流名称有最大长度限制。当集中化将日志流复制到目标账户时，会在日志流名称中添加后缀。如果生成的日志流名称超过允许的最大长度，则记录将被删除，并且会向客户账户发出`InvalidLogStream`错误。

**规则运行状况**  
在控制台中或使用 `GetCentralizationRuleForOrganization` API 检查集中化规则的运行状况。如果该规则被标记为 “不健康”，请查看该`FailureReason`字段以了解有关该问题的具体详细信息。

**标签传播健康状态**  
如果`TagPropagationStatus`显示`Unhealthy`，请检查以下`TagPropagationFailureReason`字段：  
+ `RoleNotAssumable`：该服务无法代入目标角色。验证该角色的信任策略是否允许中心化服务相关角色代入该角色，并且该信任策略是否与您的组织 ID `sts:ExternalId` 相匹配。
+ `RoleLacksPermissions`：角色已代入，但标签 API 调用被拒绝。确保角色的权限策略在目标日志组`logs:UntagResource`上授予`logs:ListTagsForResource``logs:TagResource`、和。

要诊断集中化问题，请在控制台中查看集中化规则的运行状况，检查错误和限制 CloudWatch 指标，并检查 API 调用失败的 AWS CloudTrail 日志。有关集中化指标的更多信息，请参阅[集中化指标和维度](CloudWatch-Logs-Monitoring-CloudWatch-Metrics.md#CloudWatchLogs-Centralization-Metrics)。