カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

参照用IAMユーザに特定のEC2のみ起動停止できる権限をつける

最近はQiitaしか投稿していなくてこちらはサボり気味ですが、ネタがあったので書きます。
内容はタイトルにある通り、参照用IAMユーザに対して、特定のEC2の起動停止が可能な権限を追加していきます。

実施作業

準備

参照用IAMユーザに権限をアタッチするためのIAMグループを作成します。
ポリシーには参照権限のみが付与されている管理ポリシーのReadOnlyAccessをアタッチします。
f:id:live-your-life-dd18:20201222173833p:plain

IAMユーザを作成し、作成したIAMグループに追加します。
IAMグループから権限が付与されています。
f:id:live-your-life-dd18:20201222173958p:plain

参照権限の動作確認

作成した参照用IAMユーザでAWSコンソールにログインし、適当なEC2を起動できるか実施してみます。
f:id:live-your-life-dd18:20201222174139p:plain

当然この時点では起動停止する権限はないのでエラーがでます。
f:id:live-your-life-dd18:20201222180534p:plain

起動停止権限の許可

変更操作可能な別のIAMユーザでログインし、起動停止したいEC2にタグを設定します。
f:id:live-your-life-dd18:20201222174506p:plain

起動停止権限の許可するカスタムポリシーを作成して、IAMグループにアタッチします。
f:id:live-your-life-dd18:20201222175510p:plain

ポリシー内容は以下です。
特定のAWSタグを条件として操作を許可しています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "ec2:*Instances",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/TARGET": "USER"
        }
      }
    }
  ]
}


EC2実行

もう一度参照用IAMユーザでコンソールにログインしなおして、タグを設定したEC2の起動を実施してみます。
f:id:live-your-life-dd18:20201222175725p:plain

先ほどとは違ってEC2の起動ができました。
f:id:live-your-life-dd18:20201222180202p:plain

タグをつけていない別のEC2を起動してみます。
f:id:live-your-life-dd18:20201222180410p:plain

タグが付いていない場合は起動に失敗しました。
想定通り、指定のタグを持つリソースに対してのみ操作ができていました。
f:id:live-your-life-dd18:20201222180448p:plain

感想及び所感

参照はさせたいけど変更操作は最低限に絞っておきたいときに、このようにReadOnlyAccessポリシーとタグ制御用のカスタムポリシーを組み合わせることで細かな権限管理が可能となります。

今回はEC2の起動停止に絞って権限を作成しましたが、タグが設定されていればEC2以外のサービスでも使えるので、是非使ってみてください。