IAM Access Analyzer

S3 バケットや IAM ロールなどのリソースポリシーを自動分析し、外部アクセスや未使用の権限を検出してセキュリティ体制の強化を支援するサービス

概要

IAM Access Analyzer は、AWS リソースに設定されたポリシーを数学的な推論エンジン (自動推論) で分析し、意図しない外部アクセスや過剰な権限を検出するセキュリティサービスです。S3 バケット、IAM ロール、KMS キー、Lambda 関数、SQS キューなどのリソースポリシーを継続的にモニタリングし、外部の AWS アカウントやパブリックからアクセス可能な状態をファインディングとして報告します。さらに、CloudTrail のアクセスログを分析して実際に使用されていない権限を特定し、最小権限ポリシーの自動生成を支援する未使用アクセス分析機能も備えています。カスタムポリシーチェック機能では、ポリシーの変更が意図した範囲に収まっているかを CI/CD パイプラインに組み込んで自動検証できます。

外部アクセス分析とファインディング

Access Analyzer の外部アクセス分析は、リソースポリシーの条件式を自動推論エンジンで網羅的に評価し、信頼の境界 (Zone of Trust) の外部からアクセス可能なリソースを検出します。信頼の境界は通常 AWS アカウント単位で設定しますが、Organizations を利用している場合は組織全体を境界に設定できます。検出されたファインディングには、どのリソースが、どのプリンシパルに、どのアクションを許可しているかが詳細に記載されます。ファインディングのステータスは Active、Archived、Resolved の 3 状態で管理し、意図的な外部共有は Archive に分類して誤検知のノイズを抑えます。アーカイブルールを事前に定義しておけば、特定の条件に合致するファインディングを自動的にアーカイブできます。たとえば「特定のパートナーアカウントへの S3 バケット共有は許可済み」というルールを設定すれば、そのパターンのファインディングは生成時に自動アーカイブされます。EventBridge と連携して新規ファインディングの発生を Security Hub や Slack に通知する運用が推奨されます。

未使用アクセス分析とポリシー最適化

未使用アクセス分析は、CloudTrail のアクセスログを基に、IAM ユーザーやロールに付与されているが実際には使用されていない権限を特定する機能です。分析対象期間 (最大 180 日) を指定すると、その期間中に一度も使用されなかったアクション、未使用のアクセスキー、未使用のパスワード、未使用のロールがファインディングとして報告されます。この情報を基に、過剰な権限を削除して最小権限の原則に近づけることができます。ポリシー生成機能を使えば、CloudTrail ログから実際に使用されたアクションだけを含む IAM ポリシーを自動生成できます。広範な権限 (AdministratorAccess など) で運用を開始し、一定期間のログを蓄積した後にポリシー生成で最小権限に絞り込む段階的アプローチが実務では効果的です。未使用アクセス分析はアカウント単位で有効化し、Organizations の委任管理者アカウントから全メンバーアカウントの分析結果を一元管理できます。料金は分析対象の IAM ロールおよびユーザー 1 つあたり月額 0.20 USD で、大規模環境でもコスト予測が容易です。

カスタムポリシーチェックと CI/CD 統合

カスタムポリシーチェックは、IAM ポリシーの変更が組織のセキュリティ基準に適合しているかを自動推論で検証する機能です。たとえば「s3:* を許可するポリシーは禁止」「特定の KMS キーへのアクセスは限定されたロールのみ許可」といったルールを定義し、ポリシーの変更がそのルールに違反していないかをプログラム的に判定できます。CheckNoNewAccess API は、既存ポリシーと新しいポリシーを比較して、新たに追加されるアクセス権限がないかを検証します。CheckAccessNotGranted API は、指定したアクションやリソースへのアクセスがポリシーに含まれていないことを確認します。これらの API を CodePipeline や GitHub Actions の承認ステップに組み込めば、セキュリティ基準を満たさないポリシー変更がデプロイされる前に自動的にブロックできます。Terraform や CloudFormation のテンプレートに含まれる IAM ポリシーを CI パイプラインで事前検証するパターンが、大規模組織でのガバナンス強化に有効です。検証結果は PASS または FAIL で返されるため、パイプラインの条件分岐に直接利用できます。

共有するXB!