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)が行われるため、その権限が必要になります。
(実際の画面では、インスタンス作成にタグ追加エラー表示が出るが、インスタンスは作成されます)
インスタンス作成後に自由にタグ追加されたくないのであれば設定すべきではないでしょう。上記のJSONから"rds:AddTagsToResource"を取り除きます。Resourceは"rds:CreateDBInstance"にもかかっているので取り除きません。
また、インスタンス作成後にユーザーがインスタンスの詳細を表示した際、タグの一覧表示の部分でエラーになるため、"rds:ListTagsForResource"を設定しています。
参考
"rds:DatabaseEngine": "postgres"
"rds:DatabaseClass": "db.t2.micro"
のあたりで指定できる値の一覧が載っています。
RDS+IAMの全体的なドキュメントはこちら。