如何排查 CloudWatch 中的跨账户控制面板共享错误?
上次更新日期:2022 年 5 月 5 日
我想使用跨账户控制面板共享功能与另一个 AWS 账户共享我的 Amazon CloudWatch 控制面板。如何排查并解决在使用跨账户控制面板共享时收到的错误?
简短描述
您可以创建跨账户或跨区域控制面板,以便与多个 AWS 账户和多个 AWS 区域共享 CloudWatch 数据。在使用账户或企业 ID 与另一个账户共享在一个账户中创建的控制面板时,您可能会遇到很多问题。您可能会遇到以下问题之一:
- 监控账户用户无法查看或选择共享账户中的账户 ID 来查看控制面板。
- 由于共享账户中的权限问题,监控用户在访问控制面板时会收到类似于以下内容的错误:
- 无法检索告警错误
- 无法检索资源组错误
- 未经授权的用户错误
解决方法
在这些示例中,一个账户正在使用账户 ID 或企业 ID 与另一个账户共享控制面板。共享账户的 ID 是 111111111111。监控账户的账户 ID 为 999999999999。
在监控中查看账户 ID 以查看控制面板时出现问题
要查看和选择正在共享的控制面板,您必须为监控账户中的每个 AWS Identity and Access Management(IAM)用户启用账户选择器。账户 ID 选择器仅对在 CloudWatch 设置中启用账户选择器的 IAM 用户可见。有关在 CloudWatch 中启用账户选择器的更多信息,请参阅在 CloudWatch 中启用跨账户功能。
从监控账户访问自定义控制面板时收到的错误
当您尝试从监控账户访问自定义控制面板时,可能会遇到错误。
-
在 CloudWatch 控制台中访问 Overview(概览)页面时:
“检索告警失败;您没有执行以下操作的权限:CloudWatch:DescribeAlarms。如果需要帮助,请联系您的管理员。如果您是管理员,则可以通过创建 IAM 策略为用户或组提供权限。”
-
从共享账户访问跨服务控制面板时:
“无法在“Filter by resource group”(按资源组筛选)下拉列表中选择任何资源组。出现错误:“无法检索资源组”
-
从共享账户打开自定义控制面板时:
"User: "arn:aws:sts::999999999999:assumed-role/AWSServiceRoleForCloudWatchCrossAccount/CloudWatchConsole is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/CloudWatch-CrossAccountSharingRole"
或
"User: arn:aws:sts::999999999999:assumed-role/CloudWatch-CrossAccountSharingRole/CloudWatchConsole is not authorized to perform: cloudwatch:ListDashboards on resource: arn:aws:cloudwatch::111111111111:dashboard/* because no identity-based policy allows the cloudwatch:ListDashboards action"
之所以出现这些错误,是因为在共享账户中创建的角色存在权限问题。请确保共享账户遵循以下标准:
- CloudWatch-CrossAccountSharingRole 已存在。
- 共享账户具有正确的信任策略,详见在 CloudWatch 中启用跨账户功能。
- CloudWatch-CrossAccountSharing 角色附加了以下策略:
- CloudWatchReadOnlyAccess
- CloudWatchAutomaticDashboardsAccess - 如果您在控制面板共享期间清除了 Include CloudWatch automatic dashboards(包括 CloudWatch 自动控制面板)选项,则此策略缺失。
- AWSXrayReadOnlyAccess - 如果您在控制面板共享期间清除了 Include X-Ray read-only access for ServiceLens(包括 ServiceLens 的 X-Ray 只读访问)选项,则此策略缺失。
限制来自监控账户的用户访问特定控制面板
要列出跨账户控制面板中的所有控制面板,请使用 ListDashboards API 调用。但是,ListDashboards API 不支持特定于资源的权限。但是 GetDashboard API 调用确实支持特定于资源的权限,因此您可以限制可以跨账户描述或打开的控制面板。
{
"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 中启用跨账户功能。