如何解决 CloudWatch 中的跨账户控制面板共享错误?

2 分钟阅读
0

我想使用跨账户控制面板共享与另一个 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 控制台

AWS 官方
AWS 官方已更新 10 个月前