AWS CLF(Cloud Practitioner)対策

IAMのきほん

このレッスンを終えると、AWS Identity and Access Management(通称 IAM)のユーザー・グループ・ロール・ポリシーの4つを区別し、問題文の要件からどれを使うべきかを選べるようになります。

自分でサーバーを1台建てるなら

Linux サーバーを自分で建てたとき、権限まわりで何をしたか思い出してください。作業する人ごとに useradd でアカウントを作り、共通の権限をまとめるために group を作り、パーミッションや sudoers で「誰が何をしてよいか」を書きました。IAM はこれとほぼ同じ発想を、AWS のアカウント全体に広げたものです。違いは2つあります。サーバー1台ではなくアカウント全体が対象であること、そして人だけでなくプログラムにも身分を与えられることです。

4つの登場人物

名前何者か使いどころ
ユーザー人やアプリに固定で紐づく身分個人が AWS を操作するとき
グループユーザーを束ねる入れ物「開発チームには読み取りだけ」のような一括付与
ロール一時的に借りる身分EC2 やアプリ、他アカウントに権限を渡すとき
ポリシー許可・拒否を書いた JSON の文書上の3つに貼り付けて権限を与える

権限はポリシーだけが持ちます。ユーザー・グループ・ロールは、ポリシーを貼る先という関係です。グループに権限があるのではなく、グループに貼ったポリシーが所属ユーザーに効く、という順序で覚えると混乱しません。

ロールがこのコースの山場

初学者がいちばんつまずくのがロールです。ユーザーとの違いは認証情報を永続的に持たないことにあります。ロールは必要なときに引き受け(AssumeRole)、一時的な認証情報を受け取り、時間が来ると失効します。

たとえば EC2 上のアプリから Amazon Simple Storage Service(通称 S3)にファイルを置きたいとします。やってはいけないのは、IAM ユーザーのアクセスキーをサーバーの設定ファイルに書き込むことです。キーは漏れますし、失効もしません。正しいのは EC2 インスタンスに IAM ロールを割り当てることです。こうするとキーを一切書かずに済み、権限の変更もロール側で完結します。「アクセスキーをコードに埋め込みたくない」という文が出たら、答えはほぼロールです。

ポリシーの読み方

ポリシーは Effect(Allow か Deny)、Action(どの操作か)、Resource(どの対象か)の3点セットです。判定の規則は2つだけ覚えれば足ります。

  • 何も書かれていなければ拒否(暗黙的な拒否)
  • 明示的な Deny は、どんな Allow よりも強い

また、権限は必要最小限だけ与えるのが原則です。これを最小権限の原則と呼び、CLF でも Well-Architected の文脈でも繰り返し出ます。

試験ではこう出る

  • 「EC2 上のアプリケーションから S3 にアクセスさせたい。認証情報をコードに保存せずに」→ IAM ロール。IAM ユーザーとアクセスキーは誤答の定番です
  • 「新入社員10人に同じ権限を与えたい。管理の手間を減らしたい」→ グループにポリシーを貼り、ユーザーを所属させる
  • 「別の AWS アカウントから自社のリソースを一時的に操作させたい」→ ロール(クロスアカウントアクセス)
  • 「IAM の利用に追加料金はかかるか」→ かからない。IAM そのものは無料です
  • 「IAM はグローバルか、リージョンごとか」→ グローバル。リージョンを選んで作るものではありません
  • Allow と Deny が両方当たる状況を作って「結果はどうなるか」と聞く問題もあります。答えは常に Deny が勝つです

まとめ

  • 権限を持つのはポリシー。ユーザー・グループ・ロールはポリシーを貼る先
  • グループは人をまとめる仕組み。ログインする身分ではない
  • ロールは一時的に借りる身分で、アクセスキーを持たせたくない場面の答え
  • 判定は「書いていなければ拒否」「明示的な Deny が最優先」
  • IAM は無料でグローバル。最小権限の原則で設計する
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

EC2 インスタンス上で動くアプリケーションから Amazon S3 のバケットにファイルをアップロードさせたいと考えています。認証情報をアプリケーションのコードや設定ファイルに保存したくありません。最も適切な方法はどれですか。