02 / Learn — IAM & Identity Security

IAMとアイデンティティのセキュリティ

クラウド侵害の多くは、脆弱性の悪用ではなく「権限の悪用」から始まります。このページでは AWS IAM・Azure Entra ID・GCP IAM を横断して、最小権限の設計原則、よくある設定ミス、攻撃者の視点、検知、是正までを一貫して扱います。

Why It Matters

なぜIAMが最優先事項なのか

オンプレミスのセキュリティがネットワーク境界を主戦場にしていたのに対し、クラウドでは「アイデンティティが新しい境界線」になります。ネットワークがどれだけ堅牢でも、過剰な権限を持つIAMロールやサービスプリンシパルが1つでも漏洩すれば、攻撃者はAPI経由でリソースの作成・データの窃取・権限昇格を直接実行できます。

IAMは「静的な設定」ではなく「継続的に縮小し続ける対象」

一度最小権限を設計しても、ロールや権限は時間とともに肥大化する傾向があります(権限のクリープ)。定期的な棚卸しと自動検出の仕組みが不可欠です。

Architecture

典型的なアイデンティティアーキテクチャ

多くの組織では、外部IdP(Identity Provider)でユーザーを一元管理し、フェデレーションを通じて各クラウドの一時的な権限にマッピングします。長期的なクラウド固有の認証情報を減らすことが設計の核心です。

ポリシー評価の段階が「Security Gate」です。ここで最小権限のポリシー・条件付きアクセス・MFA要求が正しく評価されなければ、後段のリソースは無防備になります。

Key Concepts

主要概念とAWS/Azure/GCPの対応

AWS IAM、Azure Entra ID、GCP IAMの主要概念の対応表
概念 AWS Azure Google Cloud
アイデンティティ IAM User / Role Entra ID User / Service Principal / Managed Identity Google Account / Service Account
権限付与の単位 IAM Policy (JSON) RBAC Role Assignment IAM Policy Binding
一時的な権限 STS AssumeRole Managed Identity / PIM Workload Identity Federation
未使用権限の検出 IAM Access Analyzer Entra ID Access Reviews IAM Recommender
条件付きアクセス Policy Condition キー Conditional Access Policy IAM Conditions
Least Privilege Role Assumption Service Principal Workload Identity Access Analyzer Privileged Identity Management
Common Misconfigurations

よくある設定ミス

  • ワイルドカード権限 High Risk

    "Action": "*", "Resource": "*" のような包括的な許可を持つポリシーが、検証用に作成されたまま本番に残るケース。

  • 長期アクセスキーの放置 High Risk

    ローテーションされないIAMユーザーの長期アクセスキーがCIやスクリプトにハードコードされ、漏洩経路になる。

  • 未使用ロール・権限の放置 Medium Risk

    一度付与された権限が、用途がなくなった後も棚卸しされず「権限のクリープ」として蓄積する。

  • クロスアカウント Trust Policy の過剰許可 High Risk

    Principal を特定のアカウント/条件に絞らず、意図せず他アカウントからのAssumeRoleを許可してしまう。

  • 特権アカウントのMFA未設定 High Risk

    管理者権限を持つアカウントにMFAが強制されておらず、パスワード漏洩だけで乗っ取りが成立する。

Attack Scenario

攻撃シナリオ: 漏洩した長期キーからの権限昇格

攻撃者がGitHubリポジトリに誤ってコミットされたAWSアクセスキーを発見した、という想定です。

  1. 盗んだ認証情報が有効かを確認する。
  2. そのアイデンティティにアタッチされたポリシーを列挙する。
  3. 過剰な権限(例: iam:CreateUseriam:AttachUserPolicy)を発見する。
  4. バックドア用のIAMユーザーを作成し、管理者ポリシーを付与して永続化する。
bash
# 1. 認証情報が有効か確認
$ aws sts get-caller-identity

# 2. アタッチされているポリシーを列挙
$ aws iam list-attached-user-policies --user-name svc-ci-deploy

# 3. 過剰な権限(AdministratorAccess相当)を発見
$ aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --version-id v1

# 4. バックドア用ユーザーを作成し永続化
$ aws iam create-user --user-name backup-admin
$ aws iam attach-user-policy --user-name backup-admin --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
$ aws iam create-access-key --user-name backup-admin
Detection

検知

CloudTrail/Entra監査ログ/GCP Audit Logsを継続的に監視し、以下のようなシグナルにアラートを設定します。

  • CreateUser / CreateAccessKey / AttachUserPolicy が普段使われないIAMユーザーから短時間で連続して呼び出される。
  • 普段利用しないリージョン・IPレンジからのsts:GetCallerIdentityやAPI列挙系コールの急増。
  • GuardDutyの UnauthorizedAccess:IAMUser/*PrivilegeEscalation:IAMUser/* 系ファインディング。
CloudTrail Lake query (example)
SELECT eventTime, userIdentity.arn, eventName, sourceIPAddress
FROM cloudtrail_lake
WHERE eventName IN ('CreateUser', 'AttachUserPolicy', 'CreateAccessKey')
  AND eventTime > date_sub(now(), 1h)
ORDER BY eventTime DESC;
Remediation

是正

発見したバックドアユーザーを無効化し、漏洩したキーをローテーションし、根本原因である過剰権限を縮小します。

bash
# バックドアユーザーを無効化・削除
$ aws iam detach-user-policy --user-name backup-admin --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
$ aws iam delete-user --user-name backup-admin

# 漏洩した長期キーを無効化してローテーション
$ aws iam update-access-key --access-key-id AKIA... --status Inactive --user-name svc-ci-deploy
$ aws iam create-access-key --user-name svc-ci-deploy

# Access Analyzerで未使用権限を洗い出し、最小権限ポリシーへ差し替える
$ aws accessanalyzer list-findings --analyzer-arn <analyzer-arn>
Hands-on Lab

実際に手を動かす

このページで扱った「ワイルドカード権限を持つIAMポリシー」の検出と是正を、実際のシナリオ形式で体験できます。Scenario → Architecture → CLI Commands → Misconfiguration → Detection → Remediation → Verification の流れで進めます。

Lab: Overly Permissive IAM を始める →
Checklist

実装チェックリスト