🔐

IAM Access Analyzer
ポリシー生成機能

実際の行動履歴から「必要最小限の権限」を自動生成する魔法のツール

📝 これは何?

CloudTrailのログを分析し、実際に使用されたアクションだけを含むIAMポリシーを自動生成する機能

🎯 何が嬉しい?

「とりあえず広い権限」から「必要最小限の権限(Least Privilege)」へ簡単に移行できる

⚡ ポイント

最大90日間のアクティビティを分析。開発→本番移行時の権限最適化に最適

🏢 会社のセキュリティカードに例えると…

「入室記録を見て、本当に必要な部屋だけアクセスできるカードに作り直す」イメージです

🔑

最初に渡された鍵束

「とりあえず全部の部屋に入れる」
マスターキー状態

➡️
📊

入室記録を分析

「3ヶ月間で実際に入った部屋は
5部屋だけだった!」

➡️
🎫

最適化されたカード

「必要な5部屋だけ」に
アクセスできる新しいカード

🏢 会社のセキュリティ

  • 入退室管理システム = CloudTrail
  • セキュリティカード = IAMポリシー
  • 入室記録の分析 = Access Analyzer
  • 新しいカード発行 = ポリシー生成
  • 必要な部屋だけ = Least Privilege

☁️ AWSでの対応

  • CloudTrail = 全API呼び出しを記録
  • IAMポリシー = 権限を定義するJSON
  • Access Analyzer = ログを分析するサービス
  • ポリシー生成 = 使用アクションからポリシー作成
  • 最小権限 = セキュリティのベストプラクティス

⚙️ 仕組み:どうやって動くの?

📋

CloudTrail

全てのAPI呼び出しを
S3に記録

🔍

Access Analyzer

ログを分析して
使用アクションを抽出

📄

ポリシー生成

最小権限の
ポリシーを出力

Before: 広すぎる権限
  • 🔓 s3:*(S3の全操作)
  • 🔓 ec2:*(EC2の全操作)
  • 🔓 dynamodb:*(DynamoDBの全操作)
  • 🔓 lambda:*(Lambdaの全操作)
  • ⚠️ リスク:不要な操作も可能
After: 最適化された権限
  • 🔒 s3:GetObject, s3:PutObject
  • 🔒 ec2:DescribeInstances
  • 🔒 dynamodb:GetItem, Query
  • 🔒 lambda:InvokeFunction
  • ✨ 実際に使用した操作のみ

🚀 ポリシー生成の4ステップ

1

🛠️ セットアップ

分析対象の設定を行います

設定項目:
• 分析期間:最大 90日間 を指定
• CloudTrail証跡:対象のトレイルを選択
• サービスロール:分析用のIAMロールを作成または選択
2

🔍 ポリシー生成

CloudTrailログを分析してポリシーを生成

Access AnalyzerがS3に保存されたCloudTrailログをスキャン。
指定期間内にIAMエンティティが実行した全アクションを特定します。
処理時間: ログ量により数分〜数十分
3

📝 レビュー・カスタマイズ

生成されたポリシーを確認・調整

生成されたポリシーには2種類の情報が含まれます:
アクションレベル情報: 具体的なAPI操作(EC2, S3など)
サービスレベル情報: 使用したサービス一覧
必要に応じてアクションの追加・削除が可能
4

✅ ポリシー作成・アタッチ

完成したポリシーを適用

カスタマイズ完了後:
• 管理ポリシーとして保存
• 対象のユーザー/ロールにアタッチ
• 既存の広い権限ポリシーをデタッチ

💡 こんな時に使える!ユースケース

🚀

開発から本番への移行

開発環境で広い権限を使い、テスト完了後に本番用の最小権限ポリシーを生成。セキュアな本番環境を実現。

🔧

既存権限の最適化

長年使われてきた「広すぎるポリシー」を分析。実際に必要な権限だけに絞り込みセキュリティを向上。

📊

権限の棚卸し

定期的にポリシー生成を実行し、現在の使用状況と付与権限のギャップを可視化。

🤖

CI/CDパイプラインの権限設計

パイプライン実行ロールの権限を実際のデプロイ操作から自動生成。過剰な権限を防止。

👥

新チームメンバーの権限設計

既存メンバーの行動パターンを分析し、新メンバー用の適切な権限テンプレートを作成。

🏢

マルチアカウント環境

Organizations環境でCloudTrailログを集約。各アカウントのロールに対して一元的にポリシー生成。

💻 実装方法

AWS CLI
# 1. ポリシー生成をリクエスト
aws accessanalyzer start-policy-generation \
    --policy-generation-details '{
        "principalArn": "arn:aws:iam::123456789012:role/MyAppRole"
    }' \
    --cloud-trail-details '{
        "trails": [
            {
                "cloudTrailArn": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/my-trail",
                "allRegions": true
            }
        ],
        "startTime": "2024-09-01T00:00:00Z",
        "endTime": "2024-11-30T23:59:59Z"
    }'

# 2. 生成状況を確認(JobIdは上記コマンドの戻り値)
aws accessanalyzer get-generated-policy \
    --job-id "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

# 3. 生成されたポリシーを取得
aws accessanalyzer get-generated-policy \
    --job-id "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111" \
    --include-resource-placeholders \
    --include-service-level-template

⚠️ 注意点・制限事項

⚠️ 分析期間の上限

最大90日間のCloudTrailログを分析可能。それ以上の期間は複数回に分けて実行が必要。

⚠️ CloudTrailが必須

事前にCloudTrailを有効化し、S3にログを保存している必要があります。

ℹ️ S3料金が発生

CloudTrailログへのアクセスには標準のS3リクエスト・データ転送料金が適用されます。

ℹ️ Control Tower非対応

AWS Control Towerが作成したトレイルは、SCPの制限により使用できません。

✅ アクションレベル対応サービス

EC2, S3, Lambda, DynamoDBなど主要サービスはアクションレベルで生成。一部はサービスレベルのみ。

✅ Organizations対応

組織トレイルを使用すれば、管理アカウントからメンバーアカウントのポリシー生成が可能。

項目 制限値 備考
分析期間 最大 90日 開始日〜終了日を指定
同時実行ジョブ数 1ジョブ / リージョン 完了後に次を開始
CloudTrailログサイズ 25GB まで推奨 大きいと処理時間増加

よくある質問

Q. 生成されたポリシーはそのまま使えますか?
基本的にはそのまま使用可能ですが、 レビューを推奨 します。特にリソースARNがプレースホルダーになっている場合は、実際のARNに置き換える必要があります。また、まれに実行されないアクション(エラーハンドリングなど)が含まれていない場合があります。
Q. 生成にどれくらい時間がかかりますか?
CloudTrailログのサイズと分析期間によりますが、 通常は数分〜30分程度 です。ログが大きい場合は1時間以上かかることもあります。非同期処理なので、ジョブIDで進捗を確認できます。
Q. 全てのAWSサービスでアクションレベルの情報が得られますか?
いいえ。 EC2, S3, Lambda, DynamoDBなど主要サービスはアクションレベルで詳細に生成されますが、一部のサービスはサービスレベル(使用した/していないのみ)の情報となります。サービスレベルの場合は、手動でアクションを追加する必要があります。
Q. 追加料金はかかりますか?
IAM Access Analyzer自体は無料 ですが、CloudTrailログが保存されているS3へのアクセスには標準のS3料金(リクエスト、データ転送)が適用されます。
Q. コンソールからも使えますか?
はい! IAMコンソールで対象のユーザーまたはロールを選択し、「アクセス権限」タブから「ポリシーを生成」をクリックするだけで簡単に開始できます。

Created by SSuzuki1063

AWS SAP Learning Resources