以下では 「何から見ればよいか」→「どこでハマりやすいか」→「どう検証するか」 の3段階で、
IAM ポリシー/KMS キーポリシー/S3 バケットポリシーをトラブルシューティングするときの鉄板フローを整理しました。
―ハマったときに“順番どおりに辿るチェックリスト”として使ってください。
0⃣ 共通:ポリシー評価の大原則(まず暗記)
- 明示
Deny
が最優先(他が許可でも即ブロック)
- 次に “許可ポリシー”(複数ある場合は OR 条件)
- 何も許可されなければデフォルト
Implicit Deny
└ まずは「どこかに明示 Deny が混ざっていないか?」を最古参バグチェックに。
1⃣ IAM ポリシー
ステップ | チェックポイント | よくある落とし穴 | 検証コマンド/ツール |
---|
① 該当プリンシパル特定 | ユーザ? ロール? フェデレーション経由? | AssumeRole 先でポリシーが切り替わるのを忘れる | aws sts get-caller-identity |
② ポリシーの種類を洗い出し | インライン / 管理ポリシー / セッションポリシー / SCP | セッションポリシー(一時認証)の存在を見逃す | AWS Console「Permissions」タブ or aws iam list-attached-user-policies |
③ 明示 Deny 検索 | "Effect":"Deny" を全文検索 | Organizations SCP で Deny されている | IAM Policy Simulator/Access Analyzer |
④ 条件ブロック | aws:PrincipalArn / aws:RequestedRegion など | aws:MultiFactorAuthPresent が false | Policy Simulator “Override STS” でテスト |
⑤ セッションの制約 | ExternalId, SourceIP, MFA | aws:SourceIp 書式ミス (VPC CIDR でなく /32 など) | CloudTrail → Event JSON |
2⃣ KMS キーポリシー + Grants
ステップ | チェックポイント | よくある落とし穴 | 検証コマンド/ツール |
---|
① キーポリシー vs IAM ポリシー | どちらも必須(AND 条件) | キーポリシーに root しか許可がない | aws kms get-key-policy |
② 暗号化/復号 API | 誰が Encrypt と Decrypt を呼ぶ? | Lambda 等の実行ロールをキーポリシーに追加忘れ | CloudTrail – Decrypt 失敗イベント |
③ Grant の有無 | 一時委譲 (Grant) は即時適用 | Grant ID を Revoke/Retire し忘れ | aws kms list-grants |
④ Encryption Context | kms:EncryptionContext:* 条件一致 | S3 が自動付与する aws:s3:arn と不一致 | 失敗時 CloudTrail → EncryptionContextMismatch |
⑤ リージョン | CMK はリージョン単位 | クロスリージョン複合化は不可 | CMK ARN に含まれるリージョン確認 |
3⃣ S3 バケットポリシー
ステップ | チェックポイント | よくある落とし穴 | 検証コマンド/ツール |
---|
① Block Public Access (BPA) | アカウントorバケット単位の4フラグ | BPAで上書き Deny → ポリシー調整しても公開されない | S3 コンソール → “パブリックアクセス設定” |
② ポリシー主体 | "Principal":"*" or ARN 指定? | CloudFront OAI/OAC の ARN ミス | aws s3api get-bucket-policy |
③ 条件ブロック | aws:SourceVpce , aws:SourceIp | VPCE ID と VPCE エンドポイント名の混同 | Access Analyzer for S3 |
④ 暗号化条件 | s3:x-amz-server-side-encryption | KMS Mandatory 条件で PUT 失敗 | CloudTrail Data Event for S3 |
⑤ MFA Delete / Versioning | 状態を確認 | MFA Delete = ルートのみ変更可 | aws s3api get-bucket-versioning |
4⃣ 共通デバッグテクニック
ツール | 使い所 | コマンド例 / UI |
---|
IAM Policy Simulator | 単一プリンシパル×アクションを即検証 | コンソール or aws iam simulate-custom-policy |
Access Analyzer | クロスアカウント公開を検知 | S3 / KMS / IAM / SNS など対応 |
CloudTrail Insights | 失敗呼び出しの急増を検知 | “ErrorRateIncrease” Insight |
AWS CLI --debug | 署名バージョン/リージョンミス発見 | aws s3 ls s3://bucket --debug |
STS Decode-Authorization-Message | アクセス拒否の内部理由取得 | aws sts decode-authorization-message --encoded-message … |
5⃣ 最終チェックリスト(印刷推奨)
- 明示 Deny が混ざっていないか(SCP/BPA 含む)
- プリンシパルが正しいか(AssumeRole 後の ARN か?)
- 条件キーのタイプミス/桁数ミス(IP/CIDR, VPCE, MFA)
- キーポリシーと IAM ポリシー両方で許可しているか(KMS)
- S3 BPA が “オン” でないか
- 暗号化コンテキストが一致しているか(KMS+S3)
- テストは Policy Simulator → CLI 実呼 → CloudTrail 確認 の順で
この順序で辿れば、ポリシー系の “アクセス拒否迷路” から脱出しやすくなります。試験でも実務でも同じなので、ぜひ手元に置いてご活用ください。