「大丈夫だ、問題ない!」
なんとも不穏な会話が聞こえましたね...。
さて、MEGAZONE 株式会社 のテック陣「MEGAZONEのゆかいな仲間たち」がおくる、Megazone Japan Advent Calendar 2023 の5日目のエントリーです。
はじめに
IAMユーザーを作成するとき「とりあえずビール」的な感じで「AdministratorAccess」を付けていませんでしょうか?
あまり権限をガチガチに固めちゃうと何かあるたびに管理者へ申請など面倒になってしまいますが、リソース監視目的や外部に運用を委託する場合などは不要な権限は削ったほうが安全です。
今回は事前にIAMユーザー「test-user」を作成しましたので、権限を変更したらどんな感じに見えるのか、といった挙動確認をしてみます。
権限の確認
まずはIAMユーザーのIAMポリシー(権限)を確認してみます。
IAMのページに移動し、ナビゲーションペイン(左メニュー)のUsersをクリックします。
IAMユーザーが一覧表示されるので該当のIAMユーザーをクリックします。(今回はtest-user)
該当IAMユーザーの詳細情報が表示されるので、Permissionsタブをクリックします。Permissions policiesの項目を見ると付与されている権限が確認できます。
管理者権限にあたるAdministratorAccessが付与されていますね。ポリシー名の左にある「+」「-」をクリックするとJSON形式で詳細を確認することができます。
さらにポリシー名「AdministratorAccess」をクリックすることでも許可の詳細を確認できます。
うぉぉ...402種類もAWSサービスあるのか (※2023/12/05時点)
権限の変更
上司「test-user君にはそんなに権限いらん。EC2だけで十分だ。」
そんな悲しいことを言われたら心苦しいですが、上司の命令は絶対なのです。test-user君の権限を変更しましょう。
先ほどと同じように、IAMのページでtest-userのPermissions policiesを表示します。
削除するポリシー(AdministratorAccess)を選択して、右上にあるRemoveをクリックします。
確認画面が表示されるのでRemove policyをクリック。
すっからかんになりましたね。もう彼は何もできまい。
代わりにEC2のIAMポリシーをアタッチしてあげましょう。
右側のプルダウンからAdd permissionsをクリックします。
まず右上のAttach policies directlyを選択して「EC2」で検索すると、候補のIAMポリシーがずらっとでてきます。
今回はAmazonEC2FullAccessを選択して、右下にあるNextをクリックします。
確認画面が出るのでAdd permissionsをクリックすればIAMポリシーのアタッチ完了です。
さて、本当にEC2だけ利用に制限できているかどうか
権限の変更後の動作確認
それでは権限を剥奪..もといEC2に絞られたtest-user君でログインしてみます。
EC2のページへ移動してみると、EC2インスタンスの表示や作成が問題なく行えます。
しかしRDSのページへ移動してみると、謎の警告文とともにRDSインスタンスは表示されません。RDSの表示権限がないためです。
もしRDSの表示権限があれば、以下のようにRDSインスタンスもしっかり表示できます。
(補足1)AmazonEC2FullAccessについて
今回test-user君にアタッチしたポリシー(AmazonEC2FullAccess)はAWSが用意しているマネージドポリシーです。実はEC2と関連深いAWSサービスも許可されています。
もし厳密に許可の制御をしたいといった場合はIAMのページでIAMポリシーを自作することもできます。
(補足2)RDSのページで謎の警告文について
RDSのページで謎の警告文を最初のほうだけ機械翻訳してみました。
ユーザー: arn:aws:iam::[Account ID]:user/test-user には、アイデンティティベースがないため、リソース: arn:aws:rds:ap-northeast-3:[Account ID]:db:* で rds:DescribeDBInstances を実行する権限がありません。
ポリシーにより、rds:DescribeDBInstances アクションが許可されます。
警告文の中に「rds:DescribeDBInstances」といったエラー解消に必要なAction項目が案内されています。上記のような場合は、必要となるActionを含むIAMポリシーをアタッチしてあげればエラーが解消されます。
AWSのマネージドポリシーでも良いし、下記のようにAction「rds:DescribeDBInstances」を含むポリシーを作成しIAMユーザーにアタッチすれば、RDSの一覧表示が可能になります。
AWSサービス間でうまく動作しないといった場合はIAM周りも念のため確認したほうが良いかもしれません。
おわりに
IAMはアカウント管理者やユーザー管理者以外の方だとあまり触れる機会はないかもしれませんが、AWSを使っていくと必ず壁になるサービスだと思います。
もし社内では制限されていてIAMのページ表示できないよ~って方は、個人でAWSアカウント作成して試すって手もありますので、ぜひ触ってみてください。