如何排查 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 中启用跨账户功能


这篇文章对您有帮助吗?


您是否需要账单或技术支持?