広すぎるIAM権限を管理画面で修正したのに、次のデプロイで元に戻った。原因は、実環境だけを直し、インフラ定義のコードを更新していないことかもしれません。
AWSは2026年9月15日、Access Analyzerの検出結果をCI/CDの修正工程につなぐ実装例を公開しました。これは新しい脆弱性の速報ではなく、検出で止まりがちな最小権限の運用を、レビュー可能な変更へ進める技術解説です。AWS公式記事
<style> .lp-summary,.lp-flow,.lp-note{margin:1.5rem 0;padding:1.2rem;border:1px solid #cbd9ea;border-radius:16px;background:#eff5ff;color:#152941}.lp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin:1rem 0}.lp-card{padding:1.1rem;background:#fff;border:1px solid #cbd9ea;border-radius:14px;color:#152941}.lp-card strong{display:block;font-size:1.2rem;color:#164b94;margin-bottom:.5rem}.lp-table{overflow-x:auto;margin:1.5rem 0}.lp-table table{min-width:640px;width:100%;border-collapse:collapse}.lp-table th,.lp-table td{padding:.8rem;border:1px solid #cbd9ea;text-align:left}.lp-table th{background:#e7effd;color:#152941}.lp-flow ol{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:12px;padding-left:1.3rem}.lp-flow li{background:#fff;border-radius:10px;padding:.8rem}.lp-note{background:#fff7e8;border-left:5px solid #b16600}.lp-summary p:last-child,.lp-note p:last-child{margin-bottom:0} </style>① 権限修正は実環境だけでなく、定義元のコードに反映する。
② ロールの管理方法を分類し、PR・Issue・廃止検討に分ける。
③ 未使用の検出は削除許可ではない。所有者確認と業務テストを挟む。
IAMロールは、アプリや担当者にAWS操作の権限を渡す仕組みです。最小権限とは、必要な対象と操作に権限を絞ること。初期構築や障害対応で広げた権限が、そのまま残りやすい点が問題になります。
Access Analyzerは外部・内部・未使用アクセスの分析やポリシー検証を支援します。未使用権限には、アクセス履歴に合わせた修正案を提示します。ただし、検出された項目が本当に業務上不要かは別途判断しなければなりません。Access Analyzer公式概要
IaC(Infrastructure as Code)は、ロールなどのインフラ設定をコードとして管理する方法です。実環境だけを変更すると、コードとの差が「ドリフト」として残ります。本稿の主眼は、自動削除ではなく、修正の定義元を見つけて変更管理に乗せることです。
公式例は、Access Analyzerで検出し、CloudTrailで作成経緯を調べ、BedrockでCDKコードや説明文を生成する構成です。推奨ポリシーはAccess Analyzerが提供し、AIは主に実装への変換と説明を担当します。公式設計
公式例には30日間監視するsoft-disable案もありますが、これは全業務に十分な安全期間という意味ではありません。また、サンプルの生成コード検証に ValidatePolicy は含まれていないと明記されています。実装の範囲と限界
| 段階 | 主に確認すること | これだけでは分からないこと |
|---|---|---|
| コード・構文 | PythonやCDKが処理できるか | 許可する対象・操作が適切か |
| ポリシー検証 | IAM文法、エラー、セキュリティ警告 | 月末・災害復旧などの業務が動くか |
| 業務テスト | 代表処理、例外処理、復旧経路 | テストしなかった将来の処理の安全性 |
Access Analyzerのポリシー検証は、エラー、セキュリティ警告、一般警告、提案を返します。公式文書も、本番適用前に変更後のポリシーを十分テストするよう求めています。コードがコンパイルできたことと、権限が安全なことは違います。ポリシー検証の仕様
例えば、生成されたidentity policyのJSONを検証する読み取り系のコマンドは次の形です。例示であり、本稿ではAWSアカウントに対して実行していません。
aws accessanalyzer validate-policy \
--policy-document file://candidate-policy.json \
--policy-type IDENTITY_POLICY \
--locale JA \
--output json
AWS CLIと必要な認証・権限が前提です。ロールの信頼ポリシーなど、resource policyを確認する場合は種別が異なります。CIではコマンドの終了コードだけでなく、返された findings を読み、エラー・警告の扱いを明示してください。CLI仕様
CloudTrailの通常のEvent historyは、過去90日間の管理イベントを参照する仕組みです。長期の記録はtrailやevent data storeを別途設計します。通常の履歴検索にはアカウント・リージョンの範囲制約もあります。CloudTrail公式仕様
したがって、数年前に作ったロールの作成イベントが見つからなくても、それだけで「手動作成」と断定できません。本稿の設計提案は、スタック情報、管理タグ、リポジトリ台帳、所有者の確認を補助証拠として使い、確証がなければ不明扱いでレビューに回すことです。
ここでの90日はCloudTrailの通常履歴の期間であり、権限を削除してよい未使用期間ではありません。30日監視案と90日履歴制約は別の意味の数字です。
以下は本稿の編集上の導入提案で、AWSの顧客実績や必須設定ではありません。
AIは説明やコード化の補助に使い、採用判断をモデルの自信度に委ねない方が、変更の根拠を追いやすくなります。生成時に渡すログやポリシーにも、機密情報の扱いを定めましょう。
未使用ロールにdeny-allを付ける案も、業務を停止させる可能性があります。気軽な自動処理にせず、変更窓、依存関係、復旧担当者を確認します。「止めて問題が出なかった」と判断する期間は、業務周期に合わせて決める必要があります。
また、ロールを一つだけ見て共有ポリシーを縮小すると、別のアプリが必要とする操作まで消す恐れがあります。生成された説明文が正しくても、適用対象が違えば事故になります。
これは設計上の期待効果です。公式記事の例示環境の数値を実在企業の成果と扱ったり、本稿から工数削減率を推定したりはしていません。
推奨ポリシーの検証をパイプラインにどこまで組み込めるか、所有者不明のロールをどう減らすか、季節業務の回帰テストをどう残すかが実務上の焦点です。導入前には、Access Analyzerの分析範囲、料金、モデルの提供状況、クロスアカウント権限、API制限を確認します。
最小権限の自動化は、権限を速く消す競争ではありません。必要な権限を残しながら、修正を次のデプロイにも残す仕組みを作ることです。
最終確認日:2026年9月17日(日本時間)。公式実装解説の公開日:2026年9月15日。導入順序・判断条件は本稿の編集上の提案です。