AWSアカウントで、作成したユーザがお互いのリソースを削除するがないような、IAMポリシーを作りました。利用例としては、1つのAWSアカウントで複数ベンダーに仕事をお願いする際などに、誤って他のベンダーのリソースを削除できなくなります。
ただAWSのIAMはちょっと癖があって、全てのポリシーの操作権限をリソースレベルでの制御することができません。
リソースレベルでの制御とは、Tagやサブネットなどで条件指定し、許可・拒否をすることを指します。
具体的にどのポリシーがリソースごとに制御できるのかについては、以下の公式ページにかかれています。
(公式)Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可
前提
- EC2のみの操作権限
ポリシーの説明
- リソースレベルでの制御はOwnerタグの条件式で制御
- StringNotEqualsでOwnerタグが許可されたキーでないものは拒否(Deny)
例)Owner User1- OwnerタグのキーがUser1でないキーの場合は拒否(Deny)
- StringNotEqualsでOwnerタグが許可されたキーでないものは拒否(Deny)
- リージョンはap-northeast-1のみに制限
サンプル
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*", "Condition": { "StringEquals": { "ec2:Region": "ap-northeast-1" } } }, { "Effect": "Deny", "Action": [ "ec2:RebootInstances", "ec2:StartInstances", "ec2:StopInstances", "ec2:TerminateInstances", "ec2:DeleteSecurityGroup", "ec2:DetachVolume", "ec2:DeleteVolume", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress" ], "Condition": { "StringNotEquals": { "ec2:ResourceTag/Owner": "ユーザ名" } }, "Resource": [ "*" ] } ] }
さいごに
リソースレベルでの制御ができるポリシーが増えるといいと思います。