FOR LEARNERS学習中向け

Fアイデンティティと権限段1入口層とは

IAM とは何か|ユーザー・ロール・ポリシーを「誰が・何に・何をしてよいか」で読み解く

IAM とは何か|ユーザー・ロール・ポリシーを「誰が・何に・何をしてよいか」で読み解く

AWS を安全に使えるかどうかは、IAM を理解しているかでほぼ決まります。にもかかわらず、IAM は「最初はよく分からないから AdministratorAccess を付けておく」で通り過ぎられがちです。そのまま実務に入ると、ポリシーの JSON が読めず、「なぜこの操作が拒否されるのか」「なぜこの鍵で何でもできてしまうのか」が説明できません。この記事は、IAM を「誰が・何に・何をしてよいか」の3つの問いに分け、ポリシーの JSON を読めるところまでを扱います。

この記事の結論

  • IAM(Identity and Access Management)は、AWS で誰が(アイデンティティ)・どのリソースに・何をしてよいか(権限)を決める仕組みです。
  • 「誰が」には、人が使うユーザー(とそれをまとめるグループ)と、サービスやほかのアカウントが一時的に引き受けるロールがあります。
  • 「何をしてよいか」は、JSON で書くポリシーで決めます。読むのは Effect・Action・Resource の3つです。
  • 評価の順番は決まっています。明示的な拒否が最優先、許可が無ければ拒否。この2行を覚えれば「なぜ拒否されるか」の大半が説明できます。
  • 基本は最小権限(要る操作だけを許可する)と、人には Identity Center、サービスにはロール。ルートユーザーとアクセスキーの常用は避けます。

IAM は「誰が・何に・何をしてよいか」を決める

IAM(AWS Identity and Access Management)は、AWS アカウントの中で、誰がどのリソースにどんな操作をしてよいかを決めるサービスです。リージョンに関係なく1つの「グローバルサービス」で、料金はかかりません。

3つの問いに分けると、部品の位置が分かります。

問い IAM の部品 例
誰が ユーザー、グループ、ロール(アイデンティティ) 開発者の A さん、EC2 で動くアプリ
何に リソース(ARN で指定) S3 の特定のバケット、特定の EC2 インスタンス
何をしてよいか ポリシー(Action と Effect) s3:GetObject を許可、ec2:TerminateInstances を拒否

「誰が」に「何をしてよいか」を付ける(アタッチする)と、その「誰か」はその操作ができるようになります。IAM の設定は、最終的にはこの「誰に、どのポリシーを付けたか」の一覧です。

「誰が」: ユーザー・グループ・ロールの違い

USERS VS ROLES「誰が」の2種類

人にはユーザー、人でないものにはロール

ユーザーとグループ

人(または人が使う道具)のため

  • 長期の認証情報を持つパスワード・アクセスキー。漏れると事故
  • グループでまとめて権限を付ける1人ずつポリシーを付けない
  • 日常の作業には Identity Center を推奨一時的な認証情報で動く

ロール

サービスや別アカウントが一時的に引き受ける

  • 長期の鍵を持たない引き受けた間だけ短命の認証情報
  • EC2・Lambda が AWS の API を呼ぶときに使う鍵をコードに書かずに済む
  • 別アカウントからの操作もロールクロスアカウントアクセス
出典: IAM ユーザーガイド「IAM でのセキュリティのベストプラクティス」
  • ユーザーは、人(または人が使う道具)のためのアイデンティティです。パスワードでコンソールにログインし、アクセスキーで CLI や SDK から API を呼びます。長期の認証情報を持つのが特徴で、それが漏れると事故になります。
  • グループは、ユーザーの束です。「開発者グループ」にポリシーを付けておけば、新しい開発者はグループに入れるだけで同じ権限になります。ポリシーをユーザー1人ずつに付けない。
  • ロールは、「一時的に引き受ける権限の束」です。ユーザーと違って長期の認証情報を持たず、引き受けた(AssumeRole した)間だけ、短い有効期限の一時的な認証情報が発行されます。EC2 で動くアプリが S3 にファイルを置くとき、Lambda が DynamoDB を読むとき、別のアカウントの人がこのアカウントを操作するとき。「人ではないもの」と「一時的な引き受け」はロールと覚えると位置づけが掴めます。

AWS は、人が日常の作業で使う認証には IAM ユーザーではなく IAM Identity Center(旧 AWS SSO)を勧めています。理由は、Identity Center のユーザーも一時的な認証情報で動くので、長期のアクセスキーを人に配らずに済むからです。学習用の1人のアカウントなら IAM ユーザーでも構いませんが、「アクセスキーを作って手元に置く」ことの危険は最初から知っておいてください。

CHECK 1ここまでの確認

EC2 で動くアプリが S3 にファイルを置くとき、使うべきなのはどれ?

答えと解説

答え: 3. EC2 に付けた IAM ロール

「人ではないもの」と「一時的な引き受け」はロールです。ロールは長期の鍵を持たないので、鍵をコードに書く事故がなくなります。

「何をしてよいか」: ポリシーの JSON を読む

ポリシーは、権限を JSON で書いたものです。読む練習に、1つ見ます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": ["arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*"]
    }
  ]
}

読む順番は3つです。

  1. Effect — Allow(許可)か Deny(拒否)か。
  2. Action — どの操作か。サービス名:操作名 の形で、s3:GetObject は「S3 からオブジェクトを取る」。* はワイルドカードで、s3:* なら S3 の全操作。
  3. Resource — どのリソースに対してか。ARN(Amazon Resource Name)で指定します。arn:aws:s3:::my-bucket/* は「my-bucket の中の全オブジェクト」。

上のポリシーは、「my-bucket の一覧を見て、中のオブジェクトを取ってよい。それ以外は書いていないので、できない」という意味です。

この3つの組を Statement と呼び、ポリシーは Statement の並びです。Condition(条件。「この IP アドレスからだけ」「MFA を通していれば」など)は4つ目の要素ですが、3つが読めるようになってからで足ります。

READ A POLICYポリシーを読む3つ

Effect → Action → Resource の順に読めば、ポリシーは読める

  1. Effect

    許可か、拒否か

    Allow / Deny

  2. Action

    どの操作か

    s3:GetObject。* はワイルドカード

  3. Resource

    どのリソースに対してか

    ARN で指定。arn:aws:s3:::my-bucket/*

Condition(条件)は4つ目。3つが読めるようになってからで足りる

ポリシーには、AWS があらかじめ用意した管理ポリシー(AdministratorAccess、ReadOnlyAccess など)と、自分で書くカスタマーマネージドポリシーがあります。学習の最初は管理ポリシーを使い、「何が許可されているか」を JSON で読む習慣を付けると、自分で書くときに困りません。

評価の順番: 明示的な拒否が最優先、許可が無ければ拒否

「なぜこの操作が拒否されるのか」を説明できるかどうかは、評価の順番を知っているかで決まります。IAM は、リクエストが来るたびに、関係する全ポリシーを見て次の順で判断します。

ポリシーの評価の順番(単一アカウントの基本形)

  • 既定は拒否。 何も書かれていなければ、できない(暗黙の拒否)
  • 明示的な Deny があれば、必ず拒否。 どこかに Effect: Deny が当たれば、ほかに Allow があっても拒否
  • 明示的な Allow があれば、許可。 Deny が無く、どこかの Allow が当たれば許可
  • 組織のポリシー(SCP)、権限境界、セッションポリシーがある場合はさらに絞られる(段4の話)

この順番から、2つの実務上の性質が出てきます。

EVALUATION ORDER評価の順番

明示的な拒否が最優先、許可が無ければ拒否

  1. 既定は拒否

    何も書かれていなければ、できない(暗黙の拒否)

  2. 明示的な Deny があれば拒否

    ほかに Allow があっても拒否

  3. 明示的な Allow があれば許可

    Deny が無く、Allow が当たれば許可

出典: IAM ユーザーガイド「ポリシーの評価論理」。SCP・権限境界があればさらに絞られる
  • 「できない」の原因は、たいてい「Allow が無い」か「どこかに Deny がある」のどちらかです。前者はポリシーを足し、後者は Deny を探します。
  • 「決してさせたくない操作」は、Allow を消すのではなく Deny を書きます。Allow はあとから誰かが足せますが、Deny は明示的に消さない限り効き続けるからです。

DENY WINS門で見る評価の順番

Deny は必ず止め、Allow が無ければ黙って止める

IAM の評価

  • Deny明示的な拒否が当たる 止まるほかに Allow があっても
  • Allow明示的な許可が当たる 通るDeny が無ければ
  • なし何も書かれていない 止まる暗黙の拒否

CHECK 2ここまでの確認

ポリシーの JSON で、最初に読む3つはどれ?

答えと解説

答え: 2. Effect・Action・Resource

Effect(許可か拒否か)・Action(どの操作か)・Resource(どのリソースに)の3つが1つの Statement です。Condition は3つが読めるようになってからで足ります。

最小権限と、やってはいけない3つ

IAM の設計の基本は最小権限です。要る操作だけを、要るリソースに対して、要る期間だけ許可する。「とりあえず全部許可」は、鍵が漏れたときの被害を全部に広げます。

IAM でやってはいけない3つ

  • ルートユーザーを日常の作業に使う。 ルートユーザーは IAM の外にいて、ポリシーで縛れない。MFA を付けて金庫にしまう(AWS とは何か)
  • アクセスキーをコードやリポジトリに書く。 GitHub に上がった鍵は数分で拾われる。EC2 や Lambda にはロールを付けて、鍵そのものを持たない
  • * の Action と * の Resource を、理由なく組み合わせる。 AdministratorAccess を付けるなら、それが「何でもできる鍵」だと分かったうえで、期間と持ち主を限定する

最小権限は「最初から完璧に絞る」ことではありません。まず狭く付けて、拒否されたら理由(Allow が無い)を確かめて足す。この往復が、ポリシーを読む練習そのものになります。

CHECK 3ここまでの確認

ある操作に Allow と Deny の両方が当たった。結果はどれ?

答えと解説

答え: 2. 拒否される(明示的な Deny が最優先)

評価の順番は「既定は拒否、明示的な Deny があれば必ず拒否、Deny が無く Allow があれば許可」です。「絶対にさせたくない操作」は Deny で書きます。

まとめ

IAM は、誰が・何に・何をしてよいかを決める仕組みです。「誰が」はユーザー・グループ・ロールで、人には Identity Center、サービスにはロール。「何をしてよいか」は JSON のポリシーで、Effect・Action・Resource の3つを読みます。評価は「明示的な拒否が最優先、許可が無ければ拒否」。基本は最小権限で、ルートユーザーの常用・鍵のコード埋め込み・理由の無い * を避けます。次はVPC とは何かで、権限の次に「ネットワークの境界」を扱います。

参照ソース

SCOREこの記事の確認テスト

0/3問 正解

各章の「ここまでの確認」に答えると、ここに集まります。結果はこの端末のブラウザにだけ残り、サーバには送りません。

FAQよくある質問

IAM ユーザーと IAM ロールはどちらを使えばいいですか?

人が日常の作業で使う認証は IAM Identity Center(SSO)のユーザーが推奨で、EC2 や Lambda などのサービスが AWS の API を呼ぶときはロールを使います。IAM ユーザーにアクセスキーを発行して人が使う形は、鍵の漏えいの事故が多く、AWS も避けるよう勧めています。

AdministratorAccess を付ければ何でもできるので、それでいいですか?

学習用の自分だけのアカウントで、短期間なら現実的な選択です。ただし「何でもできる」鍵が漏れれば全部が乗っ取られます。学習でも、日常の作業は必要な権限だけに絞ったユーザーで行い、強い権限は要るときだけ使う習慣を最初から付けるほうが、あとで直す手間がありません。

ポリシーの JSON はどこから読めばいいですか?

Effect(許可か拒否か)、Action(どの操作か)、Resource(どのリソースに対してか)の3つを先に見ます。この3つが1つの Statement で、ポリシーは Statement の並びです。Condition(条件)は、3つを読めるようになってからで十分です。

SAME TRACK同じ領域の記事

Cloud Practitioner(CLF-C02)の位置づけ|何ができる証明か、暗記にしない勉強の順番
Cloud Practitioner(CLF-C02)の位置づけ|何ができる証明か、暗記にしない勉強の順番 段1 入口とは
S3 とは何か|バケットとオブジェクト・ストレージクラス・公開設定を「ディスクではない置き場」で理解する
S3 とは何か|バケットとオブジェクト・ストレージクラス・公開設定を「ディスクではない置き場」で理解する 段1 入口とは
VPC とは何か|サブネット・ルートテーブル・ゲートウェイ・セキュリティグループと NACL の関係を1枚で
VPC とは何か|サブネット・ルートテーブル・ゲートウェイ・セキュリティグループと NACL の関係を1枚で 段1 入口とは