ポリシージェネレータをいじったり手でいじったりして、特定のタグを持つインスタンスの起動、停止ができるカスタムポリシーを作った。
// ※ 実際はJSONなのでコメントは記入できません { "Version": "2012-10-17", "Statement": [ // EC2のインスタンスに対する状態の取得を許可する // これも↓のAllowStopStartのように対象をタグで絞り込もうとしたら動いてくれなかったので、全サーバに対して許可した { "Sid": "AllowDescribe", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": [ "*" ] }, // key=Foo,value=Barタグを持つインスタンスに対して起動と停止を許可する { "Sid": "AllowStopStart", "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Foo": "Bar" } }, "Resource": [ "arn:aws:ec2:*" ] } ] }
実際にはAllowStartStop
部分だけでいいんだろうけど、decribe系のAPIも使いたかったのでAllowDescribe
として混ぜた。注釈でも触れているとおり、describe系の対象もタグで絞り込もうとしたら動かなかったので、全インスタンスを対象にした。ちなみにSid
は自由に設定できる。
ポリシーは生成してからもあとから編集できるんだけど、反映されるまでに少し時間がかかった。それと、ポリシー名をあとから変えたらポリシー自体が設定していたユーザの画面から消えた…。
カスタムポリシーを使えばFull Accessのような過大な権限を与えた結果関係ない部分に対して誤操作をしてしまうこともないし、適切なポリシー名をつければそのユーザがグループの用途やできることがわかりやすくなる。