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と組み合わせた自動対応アーキテクチャの理解が求められる。