特定のタグが付与された EC2 のみ操作を許可する IAM ポリシーを教えてください
困っていた内容
特定のリソースタグ(例 Owner:HOGE )が付与された EC2 インスタンスのみ起動/停止/再起動を許可する IAM ポリシーの設定方法を教えてください。
どう対応すればいいの?
以下の IAM ポリシーで設定できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "Statement2", "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": [ "arn:aws:ec2:*:*:instance/*" ], "Condition": { "Null": { "ec2:ResourceTag/Owner": false }, "StringEqualsIfExists": { "ec2:ResourceTag/Owner": "HOGE" } } } ] }
設定にあたっての注意点
- なぜ
ec2:Describe*
だけステートメントを分けているか疑問に思うかもしれませんが、これは Describe や List 等の表示系コマンドがリソース制限に対応していないためです(参考資料*1)
ステートメント2の方に記述すると、インスタンス一覧が一切表示されなくなります。 -
特定のリージョンやAWSアカウントに制限したい場合は
Resource
の指定をarn:aws:ec2:ap-northeast-1:111111222222:instance/*
のように変更してもOKです。 -
Condition
句のNull
条件は「タグが何も付与されていないインスタンス」の操作を禁止するためのものです。AWS のドキュメント(参考資料 *2 *3)ではこの条件が記載されていませんが、実運用では必要になることが多いと思います。
動作確認の結果
上記の IAM ポリシーを設定した IAM ユーザーを使用して EC2 のマネジメントコンソールから動作確認をしたところ、以下の結果となりました。
※ NG になっている操作は画面上で実行はできますが、エラーが出て失敗します。
「Owner:HOGE」タグが 設定されたインスタンス |
「Owner:FUGA」タグが 設定されたインスタンス |
タグが何も設定されていない インスタンス |
|
---|---|---|---|
一覧表示 | OK | OK | OK |
起動・停止 | OK | NG | NG |
新規作成 | NG | NG | NG |
下記のドキュメントも参考にして、利用する環境に合わせてカスタマイズしましょう。
参考資料
*1 ユーザーのアクセスを特定の EC2 リソースに制限する
*2 タグを使って EC2 リソースへのアクセスを管理する IAM ポリシーを作成する
*3 タグを使用した AWS リソースへのアクセスの制御