AWS で既存の EC2 インスタンスの一覧取得や、それらの開始、停止、終了、再起動を行うポリシーを作成してみるテスト。
RunInstances を含めていないので、新規にインスタンスを作ることはできない。また、TerminateInstances も含まないので、既存のインスタンスに対する誤操作によってインスタンスを失うこともない。
このポリシーを IAM ユーザーにアタッチすれば、そのユーザーは AWS コンソールまたは AWS CLI 経由で EC2 インスタンスを操作できる。ただし、ステータスチェックやアラームの状態、EIP に関する許可を行っていないため、これらを参照することはできない。
あらかじめインスタンスID がわかっていて、なおかつ AWS CLI だけで操作する場合は DescribeInstances の許可をする必要はない。ただしEC2 コンソールは一覧表示してから操作する形式であるから、DescribeInstances を許可しない場合は EC2 コンソールから操作できない。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": "arn:aws:ec2:*:<AWS Acccount ID>:instance/*" } ] }
EC2 コンソールで、ステータスチェックやアラームの状態、EIP の割り当ての有無くらいは確認させたい場合は、ec2:DescribeInstanceStatus, ec2:DescribeAddresses, cloudwatch:DescribeAlarms も許可する。cloudwatch:GetMetricData を追加すれば、EC2 コンソールの「モニタリング」よりメトリクスを閲覧できる。単にインスタンスの操作だけを行いたい IAM ユーザーに割り当てる Policy は、だいたいこんな感じだろう。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceStatus", "ec2:DescribeAddresses" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": "arn:aws:ec2:*:<AWS Acccount ID>:instance/*" }, { "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricData" ], "Resource": "*" } ] }
ec2:DescribeSecurityGroups や ec2:DescribeVolumes も許可すれば、EC2 コンソールでセキュリティグループの設定内容を確認したり、EBS ボリュームのボリュームサイズを確認できるけれど、単なる Operator にはそこまでの許可をしなくても良さげ。Describe... は Resource "*" のような広い参照範囲になるようだから、Operator に必要な参照権限を割り当てる必要はないだろう。