我想使用跨账户控制面板共享与另一个 AWS 账户共享我的 Amazon CloudWatch 控制面板。
简短描述
您可以创建跨账户或跨区域控制面板,与多个 AWS 账户和多个 AWS 区域共享您的 CloudWatch 数据。当您使用账户或组织 ID 从一个 AWS 账户与另一个账户共享控制面板时,您可能会遇到许多问题:
- 监控账户用户无法查看或选择共享账户中的账户 ID 来查看控制面板。
- 访问控制面板时,由于共享账户中的权限问题,监控用户会收到错误。这些错误包括以下示例:
无法检索警报错误
无法检索资源组错误
未经授权的用户错误
解决方法
在这些示例中,一个账户使用账户 ID 或组织 ID 与另一个账户共享控制面板。共享账户的 ID 为 111111111111。监控账户的账户 ID 为 999999999999。
查看账户 ID 以从监控中查看控制面板时出现问题
要查看和选择共享控制面板,请为监控账户中的每个 AWS Identity and Access Management(IAM)用户打开账户选择器。仅在 CloudWatch 设置中启用了账户选择器的 IAM 用户才能看到账户 ID 选择器。有关详细信息,请参阅在 CloudWatch 中激活跨账户功能。
从监控账户访问自定义控制面板时收到错误
当您尝试从监控账户访问自定义控制面板时,您可能会遇到以下错误:
-
在 CloudWatch 控制台中访问“概述”页面时:
“无法检索警报;您无权执行以下操作: CloudWatch:DescribeAlarms。如果您需要帮助,请联系您的管理员。如果您是管理员,则可以通过创建 IAM 策略为您的用户或组提供权限。”
-
从共享账户访问跨服务控制面板时:
“无法在‘按资源组筛选’下拉列表中选择任何资源组。出现错误: “无法检索资源组”
-
从共享账户打开自定义控制面板时:
“用户:"arn:aws:sts::999999999999:assumed-role/AWSServiceRoleForCloudWatchCrossAccount/CloudWatchConsole 无权在资源上执行:sts:AssumeRole:arn:aws:iam::111111111111:role/CloudWatch-CrossAccountSharingRole”
-或-
“用户:arn:aws:sts::999999999999:assumed-role/CloudWatch-CrossAccountSharingRole/CloudWatchConsole 无权在资源上执行:cloudwatch:ListDashboards:arn:aws:cloudwatch::111111111111:dashboard/*,因为没有基于身份的策略允许执行 cloudwatch:ListDashboards 操作”
之所以出现这些错误,是因为共享账户的角色存在权限问题。确保共享账户满足以下条件:
- CloudWatch-CrossAccountSharingRole 存在。
- 共享账户的信任策略正确。
- CloudWatch-CrossAccountSharing 角色附加有以下策略: CloudWatchReadOnlyAccess CloudWatchAutomaticDashboardsAccess:如果您在控制面板共享期间清除了包括 CloudWatch 自动控制面板选项,则将缺少此策略。AWSXrayReadOnlyAccess:如果您在控制面板共享期间清除了包括 ServiceLens 的 X-Ray 只读访问权限,则将缺少此策略。
将 CloudWatch-CrossAccountSharingRole 限制为只能与所有监控账户共享特定控制面板
要列出跨账户控制面板中的所有控制面板,请使用 ListDashboards API 调用。ListDashboards 不支持特定资源权限,但是 GetDashboard API 调用支持。因此,要限制可以跨账户描述或打开的控制面板,请在源共享账户中编辑 IAM 角色 CloudWatch-CrossAccountSharingRole:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudwatch:GetDashboard",
"Resource": "arn:aws:cloudwatch::111111111111:dashboard/dashboard-name"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"autoscaling:Describe*",
"cloudwatch:Describe*",
"cloudwatch:GetMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:GetInsightRuleReport",
"cloudwatch:GetMetricWidgetImage",
"cloudwatch:ListMetrics",
"cloudwatch:ListTagsForResource",
"cloudwatch:ListDashboards",
"logs:Get*",
"logs:List*",
"logs:StartQuery",
"logs:StopQuery",
"logs:Describe*",
"logs:TestMetricFilter",
"logs:FilterLogEvents",
"sns:Get*",
"sns:List*"
],
"Resource": "*"
}
]
}
运行此命令后,您可以列出所有控制面板。但是,如果您尝试打开本策略中未提及的控制面板,则会看到错误:
User: arn:aws:sts::111111111111:assumed-role/CloudWatch-CrossAccountSharingRole/CloudWatchConsole is not authorized to perform: cloudwatch:GetDashboard on resource: arn:aws:cloudwatch::111111111111:dashboard/test
启动 CloudFormationStack 以在共享账户中创建所需的 CloudWatch-CrossAccountSharingRole 时出现问题
使用跨账户控制面板共享时,确保您的以下策略与共享账户中的 IAM 角色相关联:
- AWSCloudFormationFullAccess
- IAMFullAccess
这些权限允许您启动所需的 CloudFormationStack API,以创建跨账户控制面板共享所需的 IAM 角色。
使用 Terraform/CloudFormation/AWS CLI 创建跨账户控制面板共享设置
当您设置共享账户以使用跨账户功能时,CloudWatch 会部署 AWS CloudFormation 模板。将此 CloudFormation 模板转换为相应的 Terraform 模板。这允许您激活跨账户数据共享。
要允许您的监控账户在 CloudWatch 中查看跨账户数据,请使用控制台激活账户选择器。这是针对每个用户的设置,不在账户级别进行管理。有关配置此设置的详细信息,请参阅在 CloudWatch 中激活跨账户功能。
相关信息
跨账户跨区域 CloudWatch 控制台