CloudWatch Dashboardにタグが付けられるようになったのでABACでチーム別閲覧制御を試してみた

CloudWatch Dashboardにタグが付けられるようになったのでABACでチーム別閲覧制御を試してみた

Amazon CloudWatch Dashboardがタグをサポートしました。タグとABACを組み合わせて「特定チームのダッシュボードだけ閲覧可能」なIAMロールを構成し、GetDashboard単位でアクセス制御が効くことを確認しました。
2026.06.24

はじめに

2026年6月24日、Amazon CloudWatch Dashboardがタグをサポートしました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/06/amazon-cloudwatch-tags-on-dashboards/

これまでダッシュボードにはタグを付けられなかったため、チーム別のアクセス制御を行うにはダッシュボード名に命名規則を設けてARNのワイルドカードで制御するなど、運用上の工夫が必要でした。

項目 タグなし(従来) タグあり(今回)
アクセス制御の粒度 ダッシュボード名(ARN ワイルドカード) タグ値(ABAC)
ダッシュボード追加時の対応 ポリシー修正 or 命名規則遵守が必要 タグを付けるだけ
大規模環境でのスケーラビリティ ポリシー肥大化 ポリシーは固定、タグで制御

タグサポートにより、ABAC(Attribute-Based Access Control)で「このチームのダッシュボードだけ見せる」制御が簡潔に実現できるようになりました。本記事では実際にタグ付きダッシュボードを作成し、ABACポリシーで閲覧制御が効くことを確認します。

検証環境

  • AWSアカウント: 開発環境
  • リージョン: ap-northeast-1(東京)
  • AWS CLI 2.35.10

タグ付きダッシュボードの作成

put-dashboard コマンドでダッシュボードを作成する際に --tags オプションでタグを付与できます。2つのチーム用ダッシュボードを作成しました。

aws cloudwatch put-dashboard \
    --dashboard-name TeamA-Dashboard \
    --dashboard-body '{"widgets":[{"type":"text","x":0,"y":0,"width":12,"height":3,"properties":{"markdown":"# Team Alpha Dashboard\nThis dashboard belongs to Team Alpha."}}]}' \
    --tags Key=Team,Value=alpha Key=Environment,Value=dev
aws cloudwatch put-dashboard \
    --dashboard-name TeamB-Dashboard \
    --dashboard-body '{"widgets":[{"type":"text","x":0,"y":0,"width":12,"height":3,"properties":{"markdown":"# Team Bravo Dashboard\nThis dashboard belongs to Team Bravo."}}]}' \
    --tags Key=Team,Value=bravo Key=Environment,Value=dev

いずれも DashboardValidationMessages が空配列で返り、正常に作成されました。

タグの操作

ダッシュボードのARN形式は arn:aws:cloudwatch::<account-id>:dashboard/<dashboard-name> です(リージョン部分は空)。

タグの確認

aws cloudwatch list-tags-for-resource \
    --resource-arn arn:aws:cloudwatch::123456789012:dashboard/TeamA-Dashboard
{
    "Tags": [
        {"Key": "Team", "Value": "alpha"},
        {"Key": "Environment", "Value": "dev"}
    ]
}

タグの追加

aws cloudwatch tag-resource \
    --resource-arn arn:aws:cloudwatch::123456789012:dashboard/TeamA-Dashboard \
    --tags Key=Temporary,Value=true

追加後の確認

{
    "Tags": [
        {"Key": "Team", "Value": "alpha"},
        {"Key": "Environment", "Value": "dev"},
        {"Key": "Temporary", "Value": "true"}
    ]
}

タグの削除

aws cloudwatch untag-resource \
    --resource-arn arn:aws:cloudwatch::123456789012:dashboard/TeamA-Dashboard \
    --tag-keys Temporary

削除後の確認

{
    "Tags": [
        {"Key": "Team", "Value": "alpha"},
        {"Key": "Environment", "Value": "dev"}
    ]
}

タグの追加・削除ともに正常に動作しました。ABAC検証に使用する Team タグには影響を与えていないことを確認しています。

ABAC によるダッシュボード閲覧制御

設計方針

以下の方針でアクセス制御を設計しました。

  • ベース権限として CloudWatchReadOnlyAccess を付与し、CloudWatch全体の読み取りを許可
  • カスタムDenyポリシーで Team=alpha 以外のダッシュボードに対する GetDashboard を拒否

IAM ロールの作成

aws iam create-role \
    --role-name CWDashboard-TeamAlpha-ReadOnly \
    --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789012:root"},"Action":"sts:AssumeRole"}]}' \
    --description "ABAC test: CloudWatch Dashboard read-only for Team Alpha only"
aws iam attach-role-policy \
    --role-name CWDashboard-TeamAlpha-ReadOnly \
    --policy-arn arn:aws:iam::aws:policy/CloudWatchReadOnlyAccess

Deny ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyDashboardWithoutTeamTag",
            "Effect": "Deny",
            "Action": "cloudwatch:GetDashboard",
            "Resource": "arn:aws:cloudwatch::123456789012:dashboard/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:ResourceTag/Team": "alpha"
                }
            }
        }
    ]
}

StringNotEquals により、Team タグが alpha ではないダッシュボード、および Team タグがないダッシュボードへのGetDashboardが拒否されます。

aws iam create-policy \
    --policy-name DenyDashboardUnlessTeamAlpha \
    --policy-document '<上記JSON>'

aws iam attach-role-policy \
    --role-name CWDashboard-TeamAlpha-ReadOnly \
    --policy-arn arn:aws:iam::123456789012:policy/DenyDashboardUnlessTeamAlpha

動作確認

AssumeRole

aws sts assume-role \
    --role-arn arn:aws:iam::123456789012:role/CWDashboard-TeamAlpha-ReadOnly \
    --role-session-name abac-test

以降は取得した一時クレデンシャルで実行します。

TeamA-Dashboard(Team=alpha)の取得 → 成功

aws cloudwatch get-dashboard --dashboard-name TeamA-Dashboard
{
    "DashboardArn": "arn:aws:cloudwatch::123456789012:dashboard/TeamA-Dashboard",
    "DashboardBody": "{...}",
    "DashboardName": "TeamA-Dashboard"
}

Team=alpha のダッシュボードは正常に取得できました。

TeamB-Dashboard(Team=bravo)の取得 → AccessDenied

aws cloudwatch get-dashboard --dashboard-name TeamB-Dashboard
An error occurred (AccessDenied) when calling the GetDashboard operation: User: arn:aws:sts::123456789012:assumed-role/CWDashboard-TeamAlpha-ReadOnly/abac-test is not authorized to perform: cloudwatch:GetDashboard on resource: arn:aws:cloudwatch::123456789012:dashboard/TeamB-Dashboard with an explicit deny in an identity-based policy: arn:aws:iam::123456789012:policy/DenyDashboardUnlessTeamAlpha

Team=bravo のダッシュボードはDenyポリシーにより拒否されました。今回の検証では、エラーメッセージにDenyポリシーのARNが含まれており、どのポリシーで拒否されたかを確認できました。

ListDashboards → 両方表示される

aws cloudwatch list-dashboards
{
    "DashboardEntries": [
        {"DashboardName": "TeamA-Dashboard", "DashboardArn": "arn:aws:cloudwatch::123456789012:dashboard/TeamA-Dashboard", "LastModified": "..."},
        {"DashboardName": "TeamB-Dashboard", "DashboardArn": "arn:aws:cloudwatch::123456789012:dashboard/TeamB-Dashboard", "LastModified": "..."}
    ]
}

本記事のDenyポリシーはGetDashboardのみを対象としており、ListDashboardsは制御していないため、一覧には両方表示されます。一覧表示は見える前提で設計しており、制御対象はGetDashboardによるダッシュボード本文の取得です。

マネジメントコンソールでの確認

同ロールでマネジメントコンソールにスイッチロールし、動作を確認しました。

ダッシュボード一覧では両方のダッシュボードが表示されます。コンソールの一覧表示はListDashboards APIを使用しており、今回のDenyポリシーの対象外です。

ダッシュボード一覧

TeamA-Dashboardは正常に表示されました。

TeamA-Dashboard 表示成功

TeamB-Dashboardを開くと、GetDashboardが拒否されるためダッシュボードの内容が表示されません。

TeamB-Dashboard 表示拒否

まとめ

CloudWatch Dashboardのタグサポートにより、ダッシュボードの作成時や既存リソースへのタグ付与が可能になり、ABACでの閲覧制御が実現できるようになりました。今回の構成では、CloudWatchReadOnlyAccess をベースにDenyポリシーを1つ追加することで、Team=alpha のダッシュボード本文は取得でき、別チームのダッシュボード本文は取得できないことを確認しました。

適切な Team タグが付与されている限り、同じ制御単位内でダッシュボードが増えてもポリシーを変更する必要はありません。ダッシュボード名やARNワイルドカードに依存した従来の制御に比べ、タグを基準に管理できるため、ダッシュボード数が増える環境では運用負荷を抑えやすくなります。

参考リンク

https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutDashboard.html

https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_TagResource.html

https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事