Auroraクラスターの停止に必要なポリシー

0

ABACを試すために、次の検証をしようとしています。

  • 新規でIAMユーザーを作成し、タグをDepartment・DBAdminsに設定。
  • 作成したユーザーに対し、特定のRDSアクションのみを許可するポリシーをアタッチ。(下記の内容となります)
  • RDS MySQLインスタンスを作成し、タグをEnvironment・Productionに設定。
  • Aurora MySQL クラスターを作成し、タグをEnvironment・Productionに設定。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBInstances",
                "rds:DescribeDBClusters",
                "rds:DescribeGlobalClusters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:RebootDBInstance",
                "rds:StartDBInstance",
                "rds:StopDBInstance",
                "rds:StopDBCluster"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalTag/Department": "DBAdmins",
                    "rds:db-tag/Environment": "Production"
                }
            }
        }
    ]
}

その後2つのインスタンスで停止を試みたところ、RDSインスタンスは停止することができますが、Auroraでは停止できず、以下のエラーが表示されました。

User: arn:aws:iam::xxxxxxxxxxxx:user/[Username] is not authorized to perform: rds:StopDBCluster on resource: arn:aws:rds:us-east-1:xxxxxxxxxxxx:cluster:sampledb-prod because no identity-based policy allows the rds:StopDBCluster action

RDSは停止できたので権限が不足しているのだと思うのですが、何が不足しているでしょうか。

1回答
0
承認された回答

「rds:db-tag」はRDSインスタンスでのみ使用できる条件キーです。
https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazonrds.html#amazonrds-rds_db-tag___TagKey_

DB インスタンスにアタッチされたタグでアクセスをフィルタリングします。

クラスターのタグで制御する場合は「rds:cluster-tag」で制御する必要があります。
また、「StopDBCluster」のリクエストには「rds:db-tag」が含まれないためIAMポリシーに記載されているEffectが評価されなくなります。(下記ブログ参照)
https://dev.classmethod.jp/articles/tsnote-rds-tag-iampolicy/

なので、IAMポリシーは以下のようにする必要があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBInstances",
                "rds:DescribeDBClusters",
                "rds:DescribeGlobalClusters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:RebootDBInstance",
                "rds:StartDBInstance",
                "rds:StopDBInstance"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalTag/Department": "DBAdmins",
                    "rds:db-tag/Environment": "Production"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:StopDBCluster"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalTag/Department": "DBAdmins",
                    "rds:cluster-tag/Environment": "Production"
                }
            }
        }
    ]
}

もしくは「aws:ResourceTag」を使用して制御することも可能です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBInstances",
                "rds:DescribeDBClusters",
                "rds:DescribeGlobalClusters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:RebootDBInstance",
                "rds:StartDBInstance",
                "rds:StopDBInstance",
                "rds:StopDBCluster"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalTag/Department": "DBAdmins",
                    "aws:ResourceTag/Environment": "Production"
                }
            }
        }
    ]
}
profile picture
エキスパート
回答済み 2ヶ月前
  • ありがとうございます。インスタンスとクラスターでタグが違ったのですね。またサービス認証リファレンスもちゃんと読んだことがなかったので目を通すようにします。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン