SJ blog
security
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

IAM Access Analyzer — 外部公開リソースの検出と未使用権限の分析

IAM Access Analyzerの2つの機能(外部アクセス分析・未使用アクセス分析)、Zone of Trust設定、CloudTrailベースの権限絞り込み、SCS試験頻出ポイントを解説。

一言結論

IAM Access Analyzerは「意図しない外部公開」と「余剰権限」という2大リスクを継続的に可視化するツールであり、CloudTrailベースのポリシー生成機能を使えば実際の使用実績から最小権限ポリシーを自動生成できるため権限整理の工数を大幅に削減できる。

IAM Access Analyzerの2つの機能

IAM Access Analyzerは2つの独立した分析機能を提供する。

機能目的
外部アクセス分析Zone of Trust外からアクセス可能なリソースを検出
未使用アクセス分析実際に使われていない権限・ロール・ユーザーを検出

外部アクセス分析(External Access Analysis)

Zone of Trustの概念

Zone of Trustとは「信頼できるアクセス範囲」だ。アナライザーは指定したZone of Trust外からアクセス可能なリソースをすべて「Finding(検出結果)」として報告する。

Zone of Trust の設定単位:
- 単一AWSアカウント
- AWS Organizations全体(全メンバーアカウント)
# アカウントレベルのアナライザー作成
aws accessanalyzer create-analyzer \
  --analyzer-name account-analyzer \
  --type ACCOUNT

# Organizationsレベルのアナライザー作成(管理アカウントのみ)
aws accessanalyzer create-analyzer \
  --analyzer-name org-analyzer \
  --type ORGANIZATION

検出対象リソース

S3バケット(バケットポリシー・ACL)
IAMロール(信頼ポリシー)
KMSキー(キーポリシー)
Lambda関数(リソースポリシー)
SQSキュー(キューポリシー)
Secrets Manager シークレット
SNSトピック

Findingの種類

Active      : 現在もアクセス可能な状態
Archived    : 意図的に許可済みとして確認済み
Resolved    : リソースの設定変更によりアクセス不可になった
# 現在のFindingを一覧表示
aws accessanalyzer list-findings \
  --analyzer-arn arn:aws:accessanalyzer:ap-northeast-1:123456789012:analyzer/account-analyzer \
  --filter '{"status": {"eq": ["ACTIVE"]}}'

未使用アクセス分析(Unused Access Analysis)

90日間CloudTrailのログをもとに「実際に使われていない」権限・ロール・ユーザーを検出する。

検出できる未使用アクセス:
- 未使用のIAMロール(90日間AssumeRoleされていない)
- 未使用のIAMユーザーアクセスキー
- 未使用のパスワード
- IAMポリシー内の未使用のアクション
- 未使用のIAMユーザー

この機能を使うことで、最小権限原則に基づいた権限の削減(リダクション)が自動化できる。

ポリシー生成機能

CloudTrailのアクティビティをもとに最小権限のIAMポリシーを自動生成できる。

# ポリシー生成の開始(CloudTrailが必要)
aws accessanalyzer start-policy-generation \
  --policy-generation-details '{
    "principalArn": "arn:aws:iam::123456789012:role/MyRole"
  }' \
  --cloud-trail-details '{
    "trails": [{
      "cloudTrailArn": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/my-trail",
      "allRegions": true
    }],
    "accessRole": "arn:aws:iam::123456789012:role/AccessAnalyzerRole",
    "startTime": "2026-01-01T00:00:00Z",
    "endTime": "2026-04-01T00:00:00Z"
  }'

ポリシー検証機能

ポリシーのJSONを入力すると、文法エラーや一般的なセキュリティ問題を検出できる。

# ポリシーの文法・セキュリティ検証
aws accessanalyzer validate-policy \
  --policy-document file://policy.json \
  --policy-type IDENTITY_POLICY

検出できる問題の例:

  • * を使った過度に広い権限
  • NotAction / NotResource の誤用
  • MFA条件の不足
  • 推奨されないアクションの組み合わせ

EventBridgeとの連携でリアルタイム検出

// EventBridgeルール: AccessAnalyzerのFindingをSNSに通知
{
  "source": ["aws.access-analyzer"],
  "detail-type": ["Access Analyzer Finding"],
  "detail": {
    "status": ["ACTIVE"]
  }
}
# Lambda関数でFindingを受け取り処理する例
def handler(event, context):
    finding = event['detail']
    resource_type = finding['resourceType']
    resource = finding['resource']
    principal = finding['principal']
    
    # S3バケットが外部公開された場合は自動でブロック
    if resource_type == 'AWS::S3::Bucket':
        s3 = boto3.client('s3')
        s3.put_public_access_block(
            Bucket=resource.split(':::')[1],
            PublicAccessBlockConfiguration={
                'BlockPublicAcls': True,
                'IgnorePublicAcls': True,
                'BlockPublicPolicy': True,
                'RestrictPublicBuckets': True
            }
        )

SCS試験のポイント

  • Access Analyzerはリアルタイム検知ではなく継続的な評価(数分のラグあり)
  • Zone of Trustの設定によって「外部アクセス」の定義が変わる
  • Organizationsアナライザーは管理アカウントまたは委任管理者アカウントから作成
  • 未使用アクセス分析はIAM Access Analyzer コンソールの無料機能(別途料金が発生する機能もある)
  • CloudTrailが有効でないと未使用アクセス分析とポリシー生成が動作しない

まとめ

IAM Access Analyzerは「意図しない外部公開」と「余剰権限」という2大リスクを継続的に可視化するツールだ。特にSCS試験では最小権限原則の実践ツールとして位置付けられており、EventBridgeと組み合わせた自動対応アーキテクチャの理解が求められる。