メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

IAMでRDSのインスタンス作成を制御する

IAMでRDSを制御する

たとえば、t2.microのPostgres 9.5インスタンスの作成をユーザーに許可するポリシーJSONは以下の通り。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RDSList",
            "Effect": "Allow",
            "Action": "rds:Describe*",
            "Resource": "*"
        },
        {
            "Sid": "RDSCreatePostgres",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance",
                "rds:AddTagsToResource",
                "rds:ListTagsForResource"
            ],
            "Resource": [
                "arn:aws:rds:ap-northeast-1:000000000000:db:mydb-*",
                "arn:aws:rds:ap-northeast-1:000000000000:og:default:postgres-9-5",
                "arn:aws:rds:ap-northeast-1:000000000000:pg:default.postgres9.5",
                "arn:aws:rds:ap-northeast-1:000000000000:subgrp:default"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": "postgres",
                    "rds:DatabaseClass": "db.t2.micro"
                }
            }
        }
    ]
}

対象リージョンを変更したい場合は、ap-northeast-1の部分を変更します。

000000000000の部分はアカウントNoです。

mydb-*の部分はDBインスタンス識別子です。 

rds:CreateDBInstance だけじゃ少し足りないかも

Actionの
    "rds:AddTagsToResource"
    "rds:ListTagsForResource"
はResourceの
    "arn:aws:rds:ap-northeast-1:000000000000:db:mydb-*"
にかかっています。

インスタンス作成時に同時にタグ追加(AddTagsToResource)が行われるため、その権限が必要になります。
(実際の画面では、インスタンス作成にタグ追加エラー表示が出るが、インスタンスは作成されます)

f:id:ryoichi0102:20170524165546p:plain

インスタンス作成後に自由にタグ追加されたくないのであれば設定すべきではないでしょう。上記のJSONから"rds:AddTagsToResource"を取り除きます。Resourceは"rds:CreateDBInstance"にもかかっているので取り除きません。

また、インスタンス作成後にユーザーがインスタンスの詳細を表示した際、タグの一覧表示の部分でエラーになるため、"rds:ListTagsForResource"を設定しています。

f:id:ryoichi0102:20170524170412p:plain

参考

"rds:DatabaseEngine": "postgres"
"rds:DatabaseClass": "db.t2.micro"
のあたりで指定できる値の一覧が載っています。

docs.aws.amazon.com

RDS+IAMの全体的なドキュメントはこちら。

docs.aws.amazon.com