本文へスキップ
BecomeCoder

AWS SAA(ソリューションアーキテクト)コース · 第2章 IAMと認証・認可の設計 · レッスン7

IAMポリシーの読み書き

導入

SAAでは短いIAMポリシーのJSONを読ませて、「このユーザーは何ができるか/できないか」を答えさせる問題が頻出します。構造さえつかめば怖くありません。

説明

IAMポリシーはJSON形式で、次の要素で構成されます。

フィールド意味
Versionポリシー言語のバージョン(通常 "2012-10-17"
Statement許可/拒否のルールの配列
EffectAllow(許可)または Deny(拒否)
Action対象となるAPI操作(例 s3:GetObject
Resource対象となるAWSリソースのARN
Condition追加の条件(IPアドレス、MFAの有無など)

例:特定のS3バケットからの読み取りだけを許可するポリシー

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

このポリシーは「203.0.113.0/24 からのアクセスに限り、my-bucketオブジェクトの取得だけを許可」します。Conditionは「いつ・どこから・どのように」を絞り込む強力な仕組みで、SAAでは「特定のIP範囲からだけ」「MFA使用時だけ」許可する設計でよく登場します。

最重要なのが 評価順序 です。

flowchart TD
    A["リクエスト発生"] --> B{"明示的なDenyがあるか"}
    B -- ある --> C["拒否(最優先)"]
    B -- ない --> D{"明示的なAllowがあるか"}
    D -- ある --> E["許可"]
    D -- ない --> F["暗黙のDeny(デフォルト拒否)"]

IAMのデフォルトはすべて拒否です。その上で、いずれかのポリシーに 明示的なAllow があれば許可されますが、明示的なDenyは他のどんなAllowよりも優先されます。複数のポリシーが絡む問題では、「Denyが1つでもあれば拒否」がSAAの鉄則です。

読んでみよう

SAAのポリシー問題は「複数のポリシーをアタッチされたユーザーは最終的に何ができるか」を聞いてきます。まず「明示的なDenyがないか」を探し、次に「Allowがあるか」を確認する順番で読むと、確実に正解にたどり着けます。