CloudWatch のクロスアカウントダッシュボード共有のエラーをトラブルシューティングするにはどうすればよいですか。

所要時間2分
0

クロスアカウントダッシュボード共有を使用して Amazon CloudWatch ダッシュボードを別の AWS アカウントと共有したいと考えています。

簡単な説明

クロスアカウントダッシュボードかクロスリージョンダッシュボードを作成すると、CloudWatch データを複数の AWS アカウントや複数の AWS リージョンと共有できます。ある AWS アカウントのダッシュボードを別のアカウントと共有するのにアカウント ID や組織 ID を使用すると、さまざまな問題が発生する可能性があります。

  • モニタリングアカウントのユーザーは、ダッシュボードを表示するために共有アカウントのアカウント ID を表示したり選択したりすることはできません。
  • モニタリングユーザーがダッシュボードにアクセスすると、共有アカウントのアクセス権の問題により、エラーが表示されます。ここでのエラーの例を次に示します。
    「アラームを取得できませんでした」エラー
    「リソースグループを取得できませんでした」エラー
    「ユーザーに権限がありません」エラー

解決策

ここに示した例では、あるアカウントでアカウント ID か組織 ID を使用して別のアカウントとダッシュボードを共有しています。共有アカウントの ID は 111111111111 です。モニタリングアカウントのアカウント ID は 999999999999 です。

モニタリングからダッシュボードを表示するためにアカウント ID を表示することに関する問題

共有ダッシュボードを表示して選択するには、モニタリングアカウントの AWS Identity and Access Management (IAM) ユーザーごとに、アカウントセレクターをオンにします。アカウント ID セレクターは、CloudWatch 設定でアカウントセレクターをオンにした IAM ユーザーにのみ表示されます。詳細については、「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-CrossAccountSharing ロールに次のポリシーがアタッチされている。 CloudWatchReadOnlyAccess **CloudWatchAutomaticDashboardsAccess:**ダッシュボード共有時に [CloudWatch 自動ダッシュボードを含める] オプションをオフにした場合は、このポリシーが欠落しています。**AWSXrayReadOnlyAccess:**ダッシュボード共有時に [ServiceLens の X 線読み取り専用アクセス権を含める] オプションをオフにした場合は、このポリシーが欠落しています。

すべてのモニタリングアカウントで特定のダッシュボードのみ共有できるよう CloudWatch-CrossAccountSharingRole を制限する

すべてのダッシュボードをクロスアカウントダッシュボードで一覧表示するには、ListDashboards API 呼び出しを使用します。リソース固有のアクセス権は、ListDashboards ではサポートしていませんが、GetDashboard 呼び出しではサポートしています。そのため、複数のアカウントから開いて記述できるようになっているダッシュボードに制限をかけるには、次のソース共有アカウントの 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

共有アカウントで必要とされる CloudWatch-CrossAccountSharingRole を作成するため CloudFormationStack を起動することに関する問題

クロスアカウントダッシュボード共有を使用する場合は、次のポリシーが共有アカウントの IAM ロールに関連付けられているようにしてください。

  • AWSCloudFormationFullAccess
  • IAMFullAccess

これらのアクセス権があれば、必要とされる CloudFormationStack API を起動して、クロスアカウントダッシュボード共有で必要な IAM ロールを作成することができます。

Terraform/CloudFormation/AWS CLIを使用してクロスアカウントダッシュボード共有設定を作成する

共有アカウントでクロスアカウント機能を使用するよう設定すると、CloudWatch から AWS CloudFormation テンプレートをデプロイします。この CloudFormation テンプレートを、対応するTerraformテンプレートに変換します。これでクロスアカウントデータ共有をアクティブ化できます。

モニタリングアカウントで CloudWatch のクロスアカウントデータを表示できるようにするには、コンソールを使用してアカウントセレクターをアクティブ化します。これはユーザーごとの設定であり、アカウントレベルで管理するものではありません。この設定の詳細については、「CloudWatch のクロスアカウント機能のアクティブ化」を参照してください。

関連情報

クロスアカウントクロスリージョン CloudWatch コンソール

AWS公式
AWS公式更新しました 1年前