IAMポリシーで自分の所有リソース以外の操作を制限する
設定方法
- 操作制限を書いたIAMポリシーを作成
- 自分の使用しているIAMユーザーに対して作成したIAMポリシーを付与
- 自分が管理しているEC2インスタンスにタグ付け
Ownerというタグネームに対して自分のIAMユーザー名を設定
作成したIAMポリシーは以下です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ec2:RebootInstances",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Condition": {
"StringNotEquals": {
"ec2:ResourceTag/Owner": "${aws:username}"
}
},
"Resource": [
"*"
]
}
]
}
「操作するEC2インスタンスのOwnerタグと、現在使用しているIAMユーザー名が異なる場合はActionの操作を拒否」という内容です。
また、どのユーザーでも同じポリシーが使用できるようにユーザー名の部分は変数を指定しています。
試してみる
Ownerタグに自分のIAMユーザー名が設定されているインスタンスは操作できます。
そうでないリソースは操作時にエラーが出るようになりました。
CLIで試しても同様にエラーとなります。
$ aws ec2 stop-instances --instance-id=i-02xxxxxxxxxxxxxxx
An error occurred (UnauthorizedOperation) when calling the StopInstances operation:
You are not authorized to perform this operation. Encoded authorization failure message:.....
まとめ
権限を少し工夫するだけで安心して作業できるようになりました。
現在お使いのIAMユーザーにIAM操作権限が付与されていれば今からでも手軽に設定できると思いますので実施してみてください。