如何對 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) 使用者啟用帳戶選取器。只有在其 CloudWatch 設定中啟用帳戶選取器的 IAM 使用者,才能看到帳戶 ID 選取器。如需在 CloudWatch 中啟用帳戶選取器的詳細資訊,請參閱在 CloudWatch 中啟用跨帳戶功能

從監控帳戶存取自訂儀表板時收到錯誤

嘗試從監控帳戶存取自訂儀表板時,可能會遇到錯誤。

  • 在 CloudWatch 主控台中存取「概觀」頁面時:

    「無法擷取警示;您沒有執行下列操作的許可:CloudWatch:DescribeAlarms。如果您需要協助,請聯絡管理員。如果您是管理員,則可以透過建立 IAM 政策,為使用者或群組提供許可。」

  • 從共用帳戶存取跨服務儀表板時:

    「無法在「依資源群組篩選」下拉式清單中選取任何資源群組。顯示錯誤:「無法擷取資源群組」

  • 從共用帳戶開啟自訂儀表板時顯示:

    "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 – 如果您在共用儀表板期間清除包含 CloudWatch 自動儀表板選項,則會遺失此政策。
    • AWSXrayReadOnlyAccess – 如果您在共用儀表板期間清除包含 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

這些許可能讓您啟動必要的 CloudFormation Stack API,以建立跨帳戶儀表板共用所需的 IAM 角色。

使用 Terraform/CloudFormation/AWS CLI 建立跨帳戶儀表板共用設定

當您設定共用帳戶以使用跨帳戶功能時,CloudWatch 會部署 AWS CloudFormation 範本。將此 CloudFormation 範本轉換為對應的 Terraform 範本。這可讓您啟用跨帳戶資料共用。

若要允許您的監控帳戶在 CloudWatch 中檢視跨帳戶資料,請使用主控台啟用帳戶選取器。這是依使用者的設定,不會在帳戶層級管理。如需有關進行此設定的詳細資訊,請參閱在 CloudWatch 中啟用跨帳戶功能


此文章是否有幫助?


您是否需要帳單或技術支援?