Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何解决 CloudWatch 中的跨账户控制面板共享错误?
我想使用跨账户控制面板共享与另一个 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 中激活跨账户功能。
相关信息
- 语言
- 中文 (简体)
