Posted at

特定リージョンのec2の操作を禁止した上で他リージョンでRDSを使うIAMポリシー

More than 3 years have passed since last update.

ec2を東京リージョンを使っているのでそこの操作や閲覧を禁止した上で、

東京以外のリージョンでRDSを検証をしたいというよくある(?)状況で使えるIAMのポリシーです。

ドキュメントを見ると、


//docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.html

Amazon RDS コンソールの使用に必要なアクセス許可

Amazon RDS コンソールを使用するユーザーには、特定のアクションを実行するためのアクセス許可だけでなく、コンソール自体に必要になるアクションを実行するためのアクセス許可も付与する必要があります。たとえば、単にリソースを一覧表示するには、コンソールでは DescribeSecurityGroups や DescribeSubnets などの API アクションを実行します。コンソールを使用するユーザーには、これらのアクションを実行するためのアクセス許可が必要です。それらのアクセス許可がない場合、ユーザーは作業する必要のあるコンソールの一部で、タスクに対するアクセス許可がないというメッセージが表示されます。

とあり、どうやらマネジメントコンソールでアクセスするためにはRDSの他にec2やcloudwatch、snsの許可設定も必要とのことです。しかし、

"Resource":"arn:aws:rds:us-east-1:111111111:*"

"StringEquals": {

"*:Region": "us-east-1"
}

などと、特定リージョンのみ指定したポリシーを作成しましたが、マネジメントコンソールでRDSへ移動すると以下のエラーが出てしまいます。

マネジメントコンソールのエラー.png

いろいろパラメーラーを変えているうちにアクセスしようとしているリージョンに加えて、他のリージョンの情報も取得できなければうまく表示できないっぽいことがわかってきました。

ということで結局、すべてのリージョンのRDS/ec2/cloudwatch/snsなどの必要なパラメータを許可した上で東京リージョンのec2は禁止するというポリシーにしたところうまくいきました。

{

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds:*",
"ec2:Describe*",
"cloudwatch:GetMetricStatistics",
"cloudwatch:DescribeAlarms",
"sns:*"
],
"Resource": "*"
},
{
"Effect": "Deny",
"Action": [
"ec2:*"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:Region": "ap-northeast-1"
}
}
}
]
}