

# 跨账户跨区域的 CloudWatch 控制台
<a name="Cross-Account-Cross-Region"></a>

**注意**  
建议您使用 CloudWatch 跨账户可观测性，以获取区域内指标、日志和跟踪记录最丰富的跨账户可观测性和发现体验。有关更多信息，请参阅 [CloudWatch 跨账户可观测性](CloudWatch-Unified-Cross-Account.md)。

跨账户、跨区域 CloudWatch 控制台允许您使用控制台中的选择器在不同的账户和区域之间轻松切换，以查看其他账户和区域中的控制面板、警报和指标。此功能还可以创建跨账户、跨区域的控制面板，将来自多个 AWS 账户和多个区域的 CloudWatch 指标汇总到一个控制面板中，从而无需切换账户或区域即可访问这些指标。

许多组织都将其 AWS 资源部署到多个账户中来提供账单和安全边界。在这种情况下，建议您将一个或多个账户指定为*监控账户*，并在这些账户中构建跨账户跨区域控制面板。跨账户跨区域控制台功能与 AWS Organizations 集成，可帮助您高效地构建跨账户跨区域控制面板。

跨账户、跨区域 CloudWatch 控制台体验不提供跨账户跨区域的日志可见性。此外，它不支持从监控账户内创建其他账户或区域中指标的警报。

**Topics**
+ [在 CloudWatch 中启用跨账户跨区域功能](#enable-cross-account-cross-Region)
+ [（可选）与 AWS Organizations 集成](#cross-account-and-AWS-organizations)
+ [对 CloudWatch 跨账户设置问题进行故障排除](#troubleshooting-cross-account-cross-Region)
+ [监控账户权限，以进行跨账户访问](#cross-account-cross-region-limitations)
+ [使用跨账户后禁用和清理](#cleanup-cross-account-cross-Region)

## 在 CloudWatch 中启用跨账户跨区域功能
<a name="enable-cross-account-cross-Region"></a>

要在 CloudWatch 控制台中设置跨账户跨区域功能，请使用 CloudWatch 控制台设置您的共享账户和监控账户。

**设置共享账户**

您必须在每个账户中启用共享，以使数据对监控账户可用。

这将向所有在您共享的账户中查看跨账户控制面板的用户授予您在步骤 5 中选择的只读权限（如果该用户在您共享的账户中具有相应权限）。

**使您的账户能够与其他账户共享 CloudWatch 数据**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择**设置**。

1. 对于 **Share your CloudWatch data**（共享 CloudWatch 数据），选择 **Configure**（配置）。

1. 对于 **Sharing (共享)**，选择 **Specific accounts (特定账户)**，然后输入要与之共享数据的账户的 ID。

   您在此处指定的任何账户都可以查看您的账户的 CloudWatch 数据。仅指定您知道并信任的账户的 ID。

1. 对于 **Permissions (权限)**，使用下列选项之一来指定共享数据的方式：
   + **Provide read-only access to your CloudWatch metrics, dashboards, and alarms（提供对 CloudWatch 指标、控制面板和告警的只读访问权限）**。此选项使监控账户能够创建跨账户控制面板，这些控制面板具有包含您账户中的 CloudWatch 数据的小组件。
   + **包括 CloudWatch 自动控制面板**。如果选择此选项，则监控账户中的用户还可以查看此账户的自动控制面板中的信息。有关更多信息，请参阅 [开始使用 CloudWatch 自动控制面板](GettingStarted.md)。
   + **包含对 X-Ray 跟踪地图的 X-Ray 只读访问** 如果选择此选项，监控账户中的用户还可以查看 X-Ray 跟踪地图，以及此账户中的 X-Ray 跟踪信息。有关更多信息，请参阅 [Using the X-Ray Trace Map](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html)。
   + **包含数据库洞察的只读访问权限**。若勾选此选项，监控账户中的用户亦可查看本账户内数据库洞察的遥测数据。有关更多信息，请参阅[为 CloudWatch 数据库洞察设置跨账户跨区域监控](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Database-Insights-Cross-Account-Cross-Region.html)。
   + **Full read-only access to everything in your account (对账户中所有内容的完全只读访问权)**。此选项使您用于共享的账户能够创建跨账户控制面板，这些控制面板具有包含您账户中的 CloudWatch 数据的小组件。它还使这些账户能够更深入地查看您的账户，并在其他 AWS 服务的控制台中查看您账户的数据。

1. 选择 **Launch CloudFormation template (启动 CloudFormation 模板)**。

   在确认屏幕中，键入 **Confirm**，并选择 **Launch template (启动模板)**。

1. 选中 **I acknowledge...(我确认...)** 复选框，然后选择 **Create stack (创建堆栈)**。

**与整个企业共享**

通过完成上述过程，创建一个 IAM 角色来使您的账户能够与某个账户共享数据。您可以创建或编辑一个 IAM 角色，该角色将与企业中所有的账户共享您的数据。仅在您知道并信任组织中所有的账户的情况下执行此操作。

如果用户在与您共享的帐户中具有相应权限，这将向在您的共享账户中查看跨账户控制面板的所有用户授予在上一过程第 5 步所示策略中列出的只读权限。

**与企业中所有的账户共享您的 CloudWatch 账户数据**

1. 如果尚未执行此操作，请完成上述过程来与某个 AWS 账户共享您的数据。

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**角色**。

1. 在角色列表中，选择 **CloudWatch-CrossAccountSharingRole**。

1. 选择**信任关系**，然后选择**编辑信任关系**。

   您将看到与以下内容类似的策略：

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::123456789012:root"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 将策略更改为以下内容，并将 *org-id* 替换为您组织的 ID。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "*"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "StringEquals": {
             "aws:PrincipalOrgID": "org-id"
           }
         }
   
       }
     ]
   }
   ```

------

1. 选择**更新信任策略**。

**设置监控帐户**

如果要查看跨账户 CloudWatch 数据，请启用每个监控账户。

完成以下过程后，CloudWatch 将创建一个服务相关角色，CloudWatch 在监控账户中使用该角色来访问从其他账户共享的数据。此服务相关角色称为 **AWSServiceRoleForCloudWatchCrossAccount**。有关更多信息，请参阅 [为 CloudWatch 使用服务相关角色](using-service-linked-roles.md)。

**使您的账户能够查看跨账户 CloudWatch 数据**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Settings**（设置），然后在 **Cross-account cross-region**（跨账户跨区域）部分中，选择 **Configure**（配置）。

1. 在 **View cross-account cross-region**（查看跨账户跨区域）部分，选择 **Enable**（启用），然后选择 **Show selector in the console**（在控制台中显示选择器）复选框以在您绘制指标图表或创建告警时，让账户选择器显示在 CloudWatch 控制台中。

1. 在 **View cross-account cross-region (跨账户跨区域查看)** 中，选择下列选项之一：
   + **Account Id Input (账户 ID 输入)**。在查看跨账户的数据时，每当您要切换账户时，此选项都会提示您手动输入账户 ID。
   + **AWS Organization account selector（Amazon Organizations 账户选择器）**。此选项可显示您在完成与 Organizations 的跨账户集成时指定的账户。在您下次使用控制台时，CloudWatch 会为您显示这些账户的下拉列表，供您在查看跨账户数据时进行选择。

     为此，您必须已先使用企业管理账户允许 CloudWatch 查看组织中的账户列表。有关更多信息，请参阅 [（可选）与 AWS Organizations 集成](#cross-account-and-AWS-organizations)。
   + **Custom account selector (自定义账户选择器)**。此选项提示您输入账户 ID 的列表。在您下次使用控制台时，CloudWatch 会为您显示这些账户的下拉列表，供您在查看跨账户数据时进行选择。

     此外，您可为其中每个账户输入一个标签，以便在选择要查看的账户时帮助您识别它们。

     用户在此处进行的账户选择器设置仅为该用户保留，而不为监视账户中的所有其他用户保留。

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

完成此设置后，您可以创建跨账户控制面板。有关更多信息，请参阅 [创建 CloudWatch 自定义控制面板](create_dashboard.md)。

**跨区域功能** 

跨区域功能自动内置到此功能中。您无需执行任何额外步骤即可在同一图表或同一控制面板上的单个账户中显示来自不同区域的指标。由于告警不支持跨区域功能，您无法在某个区域中创建用以监视其他区域内指标的告警。

## （可选）与 AWS Organizations 集成
<a name="cross-account-and-AWS-organizations"></a>

如果要将跨账户功能与 AWS Organizations 集成，您必须使组织中的所有账户对监控账户可用。

**启用跨账户 CloudWatch 功能以访问企业中的所有账户**

1. 登录到企业的管理账户。

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，选择 **Settings (设置)**，然后选择 **Configure (配置)**。

1. 对于 **Grant permission to view the list of accounts in the organization (授予查看组织中账户列表的权限)**，选择要提示输入账户 ID 列表的 **Specific accounts (特定账户)**。您组织中的账户列表仅与您在此处指定的账户共享。

1. 选择 **Share organization account list (共享组织账户列表)**。

1. 选择 **Launch CloudFormation template (启动 CloudFormation 模板)**。

   在确认屏幕中，键入 **Confirm**，并选择 **Launch template (启动模板)**。

## 对 CloudWatch 跨账户设置问题进行故障排除
<a name="troubleshooting-cross-account-cross-Region"></a>

这部分包含有关 CloudWatch 中跨账户控制台部署的故障排除提示。

**我在显示跨账户的数据时收到访问被拒绝错误**  
请检查以下事项：  
+ 您的监控账户应具有一个名为 **AWSServiceRoleForCloudWatchCrossAccount** 的角色。如果没有此角色，则需要创建它。有关更多信息，请参阅 [Set Up a Monitoring Account](#setup_monitoring_account)。
+ 每个共享账户应具有一个名为 **CloudWatch-CrossAccountSharingRole** 的角色。如果没有此角色，则需要创建它。有关更多信息，请参阅 [Set Up A Sharing Account](#setup_sharing_account)。
+ 此共享角色必须信任监控账户。

**确认是否已为 CloudWatch 跨账户控制台正确设置您的角色**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**角色**。

1. 在角色列表中，确保需要的角色已存在。在共享账户中，查找 **CloudWatch-CrossAccountSharingRole**。在监控账户中，查找 **AWSServiceRoleForCloudWatchCrossAccount**。

1. 如果您正在使用共享账户，并且 **CloudWatch-CrossAccountSharingRole** 已存在，请选择 **CloudWatch-CrossAccountSharingRole**。

1. 选择**信任关系**，然后选择**编辑信任关系**。

1. 确认策略已列出监控账户的账户 ID 或监控账户所属组织的组织 ID。

**控制台中未显示账户下拉菜单**  
首先，检查您是否已创建正确的 IAM 角色，如前面的故障排除部分中所述。如果已正确设置这些角色，请确保您已启用此账户来查看跨账户的数据，如[Enable Your Account to View Cross-Account Data](#view_cross_account)中所述。

## 监控账户权限，以进行跨账户访问
<a name="cross-account-cross-region-limitations"></a>

要成功访问源账户中的某个操作，监控账户中的用户必须在该监控账户中拥有针对该操作对所有资源（\$1）的同等权限。这是监控账户中的本地权限要求，与源账户中的跨账户共享角色的权限无关。

### 示例
<a name="policy-configuration-examples"></a>

要在源账户中启动日志查询，您必须对监控账户中的 StartQuery 拥有通配符（\$1）访问权限。源账户的跨账户角色仍可限制对特定日志组的访问权限。

**支持 - 通配符资源：**

```
{
  "Effect": "Allow",
  "Action": "logs:StartQuery",
  "Resource": "*"
}
```

**不支持 - 特定的 ARN：**

```
{
  "Effect": "Allow",
  "Action": "logs:StartQuery",
  "Resource": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/my-function:*"
}
```

## 使用跨账户后禁用和清理
<a name="cleanup-cross-account-cross-Region"></a>

要禁用 CloudWatch 的跨账户功能，请执行下列步骤。

**步骤 1：删除跨账户堆栈或角色**

最佳方法是删除用于启用跨账户功能的 CloudFormation 堆栈。
+ 在每个共享账户中，删除 **CloudWatch-CrossAccountSharingRole** 堆栈。
+ 如果您使用 AWS Organizations 为企业中的所有账户启用跨账户功能，请删除企业管理账户中的 **CloudWatch-CrossAccountListAccountsRole** 堆栈。

如果您没有使用 CloudFormation 堆栈以启用跨账户功能，请执行以下操作：
+ 在每个共享账户中，删除 **CloudWatch-CrossAccountSharingRole** IAM 角色。
+ 如果您使用 AWS Organizations 为企业中的所有账户启用跨账户功能，请删除企业管理账户中的 **CloudWatch-CrossAccountSharing-ListAccountsRole** IAM 角色。

**步骤 2：删除服务相关角色**

在监控账户中，删除 **AWSServiceRoleForCloudWatchCrossAccount** 服务相关的 IAM 角色。