📋 IAM 認証情報レポート完全ガイド

GenerateCredentialReport API で全ユーザーのセキュリティ状態を一括チェック!

📌 結論:認証情報レポートとは?

AWSアカウント内の全IAMユーザーのセキュリティ状態
CSV形式で一括出力する「セキュリティ監査レポート」です

👥
全ユーザー一覧
アカウント内の全IAMユーザーと
rootアカウントの情報を
まとめて取得できる
🔐
認証状態の確認
パスワード・アクセスキー・
MFAの有効/無効状態を
一目で把握できる
📅
最終利用日の追跡
パスワードやアクセスキーが
いつ使われたかを記録
不要な認証情報を発見

🏢 会社の「入退室カード管理台帳」で例えると超わかりやすい!

🏢

AWS社(あなたのAWSアカウント)

👔
社長
(root)
👩‍💻
田中さん
(developer)
👨‍💼
佐藤さん
(admin)
🤖
CI/CD
(service)

📋 認証情報レポート = 社員証管理台帳

  • 🪪
    パスワード = オフィスの入口ドアの暗証番号
    誰がいつ最後に使ったか?ちゃんと定期変更してる?
  • 🔑
    アクセスキー = サーバールームの物理キー
    2本まで発行可能。使ってないキーは回収すべき!
  • 📱
    MFA = 入館時の指紋認証
    設定してないと「カードだけで入れる」危険な状態
  • 📊
    レポート全体 = 月次セキュリティ監査表
    「退職した人のカードまだ有効じゃない?」を発見!

🔄 レポート生成の流れ(2ステップAPI)

📝
STEP 1
GenerateCredentialReport
レポート生成をリクエスト
(非同期処理が開始)
➡️
処理中...
AWSがバックグラウンドで
全ユーザー情報を収集
(数秒〜数分)
➡️
📥
STEP 2
GetCredentialReport
完成したCSVレポートを
Base64形式で取得
➡️
完了!
CSV形式のレポート
全ユーザーの認証情報が
一覧で確認可能!

💡 ポイント:レポートは4時間ごとに更新可能。
4時間以内に再実行すると、キャッシュされた前回のレポートが返されます。

📊 レポートに含まれる情報(全21カラム)

👤
ユーザー基本情報

ユーザーの識別情報と作成日時

user ユーザー名
arn Amazon リソースネーム
user_creation_time 作成日時
🔑
パスワード情報

コンソールログイン用パスワードの状態

password_enabled パスワード有効
password_last_used 最終使用日時
password_last_changed 最終変更日時
password_next_rotation 次回ローテーション日
📱
MFA情報

多要素認証の設定状態

mfa_active MFA有効/無効

⚠️ falseのユーザーは
セキュリティリスクが高い!

🗝️
アクセスキー情報

API/CLI用キーの状態(各ユーザー最大2つ)

access_key_1_active キー1の有効状態
access_key_1_last_rotated キー1の最終ローテーション
access_key_1_last_used_date キー1の最終使用日
access_key_1_last_used_region キー1の使用リージョン
access_key_1_last_used_service キー1の使用サービス

※ access_key_2_* も同様の項目あり

📜
証明書情報

X.509署名証明書の状態(各ユーザー最大2つ)

cert_1_active 証明書1の有効状態
cert_1_last_rotated 証明書1の最終ローテーション
cert_2_active 証明書2の有効状態
cert_2_last_rotated 証明書2の最終ローテーション

🔍 このレポートで発見できるセキュリティ問題

🚨

rootアカウントのアクセスキー

rootにアクセスキーが存在する場合は即座に削除すべき。rootはコンソールログインのみに制限!

🔴 最重要
📱

MFA未設定ユーザー

mfa_active = false のユーザーはパスワード漏洩時に即座に侵害される危険性あり

🔴 最重要
🕐

長期間未使用のアクセスキー

access_key_last_used_date が90日以上前のキーは無効化を検討。不要なキーは削除!

🟡 重要
🔄

ローテーションされていないキー

access_key_last_rotated が90日以上前のキーは定期ローテーションのルール違反の可能性

🟡 重要
👻

未使用のIAMユーザー

password_last_used が長期間N/Aまたは古い日付 → 退職者や不要アカウントの可能性

🟢 推奨
🔐

パスワード変更されていないユーザー

password_last_changed が古い → パスワードポリシーが適用されていない可能性

🟢 推奨

📄 レポートのサンプル(CSV形式)

user arn password_enabled password_last_used mfa_active access_key_1_active access_key_1_last_used_date access_key_2_active
<root_account> arn:aws:iam::123456789012:root true 2024-01-15T08:30:00Z true false N/A false
admin-tanaka arn:aws:iam::123456789012:user/admin-tanaka true 2024-01-20T14:22:00Z true true 2024-01-19T09:15:00Z false
dev-sato arn:aws:iam::123456789012:user/dev-sato true 2024-01-18T10:45:00Z false true 2024-01-20T16:30:00Z false
ci-cd-service arn:aws:iam::123456789012:user/ci-cd-service false N/A false true 2024-01-20T23:59:00Z true
old-user arn:aws:iam::123456789012:user/old-user true 2023-06-15T11:00:00Z false true 2023-07-01T08:00:00Z false
true(有効)
false(無効)
N/A(該当なし)
日時データ

⚠️ 上記サンプルの問題点:
dev-sato → MFA未設定! | old-user → 6ヶ月以上未使用&MFA未設定!

🛠️ 実際の使い方(AWS CLI)

1

レポート生成をリクエスト

GenerateCredentialReport APIを呼び出して生成を開始

# レポート生成をリクエスト aws iam generate-credential-report # レスポンス例 { "State": "STARTED", "Description": "No report exists. Starting a new report generation task" }
2

レポートの完成を待つ

State が "COMPLETE" になるまで待機(通常数秒〜数分)

# 再度実行して状態を確認 aws iam generate-credential-report # 完了時のレスポンス { "State": "COMPLETE", "Description": "Report is ready" }
3

レポートを取得してデコード

Base64エンコードされたCSVを取得してデコード

# レポートを取得してデコード aws iam get-credential-report \ --query 'Content' \ --output text | base64 --decode > credential_report.csv # CSVファイルを確認 cat credential_report.csv
4

セキュリティ分析を実行

問題のあるユーザーを抽出

# MFA未設定ユーザーを抽出 cat credential_report.csv | grep ",false," | cut -d',' -f1 # 90日以上ローテーションされていないキーを持つユーザーを確認 # (Excelやスプレッドシートでの分析が便利)

⚠️ 知っておくべき注意点

⏰ 4時間のクールダウン

レポートは4時間に1回しか更新されません。頻繁な呼び出しでも前回のキャッシュが返されます。

📊 全ユーザーが対象

特定ユーザーだけを抽出することはできません。常に全IAMユーザー+rootの情報が出力されます。

🔒 必要なIAM権限

iam:GenerateCredentialReportiam:GetCredentialReport の両方の権限が必要です。

🌐 グローバルサービス

IAMはグローバルサービスのため、どのリージョンから実行しても同じレポートが取得できます。

📝 Base64エンコード

GetCredentialReportの結果はBase64エンコードされています。デコード処理が必要です。

🤖 自動化との連携

Lambda + EventBridgeで定期実行し、問題があればSNS通知するのがベストプラクティス!

❓ よくある質問

🤔 IAMロールの情報は含まれる?
いいえ、IAMユーザーとrootアカウントのみが対象です。
IAMロールには永続的な認証情報がないため、このレポートには含まれません。
ロールの使用状況は、IAM Access Analyzer や CloudTrail で確認してください。
🤔 「N/A」と「not_supported」の違いは?
N/A = その機能が設定されていない、または使用されたことがない
not_supported = rootアカウントなど、その項目がサポートされていないユーザータイプ

例:rootアカウントの password_last_changed は「not_supported」(rootはパスワードポリシー対象外)
🤔 Security Hubとの連携は?
AWS Security Hub は内部的にこのレポートを活用しています!
Security Hub の「AWS Foundational Security Best Practices」で、MFA未設定やアクセスキーのローテーション状況が自動チェックされます。
手動でレポートを確認するより、Security Hub の利用がおすすめです。
🤔 Organizations環境での使い方は?
各アカウントで個別に実行する必要があります。
Organizations全体の一括レポートは生成できません。
全アカウントを監査するには、StackSetsでLambda関数をデプロイし、各アカウントで自動実行→結果を集約するアーキテクチャが有効です。

🎓 まとめ

📝
Generate
Credential
Report
➡️
AWS が
情報収集
➡️
📥
Get
Credential
Report
➡️
📊
CSV で
セキュリティ
分析
🏢 会社の入退室カード管理台帳 = IAM認証情報レポート

📋 全社員の認証情報を一括チェック(全IAMユーザー+root)
🔑 パスワード・アクセスキー・MFAの状態を確認
📅 最終使用日で不要な認証情報を発見
🔄 ローテーション状況でコンプライアンス確認

定期的なレポート確認で、
セキュリティリスクを早期発見しよう! 🛡️

Created by SSuzuki1063

AWS SAP Learning Resources