如何對 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 中啟用跨帳戶功能。