AWS のアクセス制御と監査の判断基準(IAM / SCP / KMS / CloudTrail)
認可は「明示的 Deny > 明示的 Allow > 暗黙の Deny」。組織全体の禁止は SCP、委譲先の上限は Permissions Boundary、経路や IP は Condition。KMS は封筒暗号化と鍵ポリシー、CloudTrail は管理 / データイベントの区別とログ整合性検証が要点。
目次 9 sections
- 01 認可評価のルール
- 02 制御手段の使い分け
- 監査に使うツール
- 03 KMS(保管時の暗号化)
- 封筒暗号化と GenerateDataKey
- 暗号化 AMI で Auto Scaling の起動が失敗する
- 04 ACM(転送中の暗号化)
- 05 Secrets Manager と Parameter Store の SecureString
- 06 CloudTrail(API 操作の監査)
- 管理イベントとデータイベント
- ログファイルの整合性検証
- AWS Config との分担
- 07 RAM(Resource Access Manager)によるリソース共有
- VPC サブネット共有の権限境界
- 08 関連
- 09 更新履歴
調査時点: 2026-07。料金は当時の値。
IAM は AWS の利用者やロールの権限を管理する仕組み、KMS は暗号鍵の管理サービス、CloudTrail は AWS 上の操作履歴を記録するサービス。SCP は AWS Organizations でアカウント群に上限を課すポリシー。
認可評価のルール
許可される操作 = (IAM 等による明示的な許可) − (SCP 等による明示的な拒否)。これから 2 つの原則が出る。
- 明示的 Deny が最優先。メンバーアカウントに
AdministratorAccessが付いていても、SCP でrds:DeleteDBInstanceが Deny なら、そのアカウントの全ユーザー(ルートユーザー含む)が実行できない - 許可が書かれていない操作は暗黙の Deny。SCP のデフォルトは
FullAWSAccessで、これを外してホワイトリスト型にすると明示的に許可した操作以外がすべて止まる
SCP は管理アカウント(マスターアカウント)のユーザー・ロールには適用されない。適用対象はメンバーアカウントのみ。
制御手段の使い分け
| 実現したいこと | 使う機能 | 性質 |
|---|---|---|
| ルートユーザーや管理者を含む組織全体の禁止事項 | SCP(サービスコントロールポリシー) | API 実行そのものを拒否する予防的統制 |
| 開発者に IAM 操作を委譲しつつ、作成する子ロールの最大権限を制限(特権昇格防止) | Permissions Boundary(アクセス権限の境界) | 委譲先が作るロールの上限 |
| 特定 IP・時間帯・経路からのアクセスのみ許可 | 各ポリシーの Condition(aws:SourceIp など) | 文脈による絞り込み |
| 作られた後のリソース構成の違反を検知・是正 | AWS Config + SSM Automation | 発見的・事後。EventBridge と自動修復 |
| 1 バケットを複数部門で共有し、ポリシーを分割したい | S3 Access Points | グループごとに専用のアクセスポイントとポリシー。バケットポリシーのサイズ上限(20KB)と複雑化を回避 |
S3 の暗号化を強制する条件キーは対象で変わる。オブジェクト単位のアップロード時ヘッダー検証は s3:PutObject への制限、バケットのデフォルト暗号化設定の変更は s3:PutBucketEncryption への制限。
監査に使うツール
- IAM Access Analyzer: 意図しない外部共有の特定
- Policy Simulator: 権限のテスト
- Trusted Advisor: ベストプラクティス準拠のチェック
- 「WAF / Shield / Network Firewall が適用されているか」を定期的・自動的に確認する構成も監査の一部
KMS(保管時の暗号化)
- キーポリシー: IAM ポリシーではなく鍵ごとのポリシーで、鍵の管理者と利用者(暗号化・復号)を分離する(職務分掌)
- 自動キーローテーション: カスタマーマネージドキーは年次で自動ローテーションできる。BYOK で外部からインポートしたキーマテリアルは自動ローテーション非対応
- クロスリージョンのスナップショットコピーでは、コピー先リージョンの KMS キーで再暗号化される
封筒暗号化と GenerateDataKey
EBS に書き込むたびに KMS を呼ぶと I/O が遅くなるので、AWS はデータキーを使う。
- EC2 / Auto Scaling が KMS に「使い捨てのデータキー」を要求する(
kms:GenerateDataKey) - KMS は平文のデータキーと、CMK で暗号化したデータキーを返す
- ハイパーバイザーが平文キーをメモリに載せてローカルで高速に暗号化・復号する
- 暗号化済みデータキーは EBS のメタデータに保存され、再起動時に
kms:Decryptで平文に戻す
既存の暗号化 EBS を読むだけなら kms:Decrypt で足りるが、スケールアウトで新しいボリュームを作るときは新しいデータキーの発行が要る。GenerateDataKey* とワイルドカードにするのは GenerateDataKeyWithoutPlaintext も許可するため。
暗号化 AMI で Auto Scaling の起動が失敗する
| 失敗のフェーズ | 直す場所 | 必要なアクション |
|---|---|---|
| EC2 が起動する前(スケールアウト時)に落ちる | KMS キーポリシー(対象は AWSServiceRoleForAutoScaling) | kms:Decrypt、kms:GenerateDataKey*、kms:CreateGrant |
| 起動後に OS 内のアプリが動かない | IAM インスタンスプロファイル | アプリが使う各リソースへの権限 |
ACM(転送中の暗号化)
- ACM のパブリック証明書は秘密鍵をエクスポートできない。EC2 の OS に直接インストールすることはできず、ALB / CloudFront などの統合サービスに関連付ける
- リージョンサービス(ALB)に使う証明書はそのリージョンの ACM で作る。CloudFront に使う証明書は必ず us-east-1 の ACM で作る(エッジへの配布システムがそこにある)
- ALB で TLS を終端し、ALB と EC2 間を HTTP にすると、EC2 の CPU 負荷を下げつつ証明書の自動更新を一元化できる
Secrets Manager と Parameter Store の SecureString
| 比較 | Parameter Store(ssm-secure) | Secrets Manager(secretsmanager) |
|---|---|---|
| 本質 | 暗号化された文字列の静的な置き場 | ライフサイクル管理付きの機密情報 |
| 自動ローテーション | 不可 | 可(Lambda 連携で定期更新) |
| ランダム生成 | 不可 | 可(CloudFormation から生成可能) |
| 料金 | 標準パラメータは無料 | 当時シークレット 1 つ月 0.40 USD + リクエスト従量 |
| 用途 | 頻繁に変わらない API キー | DB マスターパスワード、外部サービス認証情報 |
ローテーション Lambda を閉域 VPC に置く場合の通信要件は 2 つ: Lambda → RDS はセキュリティグループで DB ポート(5432 など)を相互許可、Lambda → Secrets Manager は VPC インターフェイスエンドポイント(PrivateLink)。
CloudTrail(API 操作の監査)
管理イベントとデータイベント
| 比較 | 管理イベント | データイベント |
|---|---|---|
| 対象 | コントロールプレーン操作(バケット作成、EC2 起動、IAM ユーザー作成、SG 変更) | データプレーン操作(S3 の GetObject / PutObject、Lambda Invoke) |
| デフォルト | 有効。1 つ目の証跡への配信は無料 | 無効。明示的な有効化と追加コストが要る |
| 用途 | 誰がインフラ設定を変えたか | 誰が特定のオブジェクトにアクセスしたか |
- デフォルトの CloudTrail(管理イベントのみ)では、S3 オブジェクト操作をトリガーにした EventBridge 連携は動かない。データイベントの有効化が要る
- データイベントは量が多いので、高度なイベントセレクター(Advanced Event Selectors)で対象バケットやプレフィックスを絞る
- Organizations 配下の全アカウント・全リージョンを 1 つの S3 バケットに集約するのが「組織の証跡」。アカウント × リージョンごとに手動で証跡を作らない
ログファイルの整合性検証
証跡で「ログファイルの検証」を有効にすると、1 時間ごとに署名付きダイジェストファイルが生成される。aws cloudtrail verify-logs を実行すれば、特権管理者を含め後から改ざん・削除されていないことを暗号学的に証明できる。サーバーや自作スクリプトは不要。
| 要件 | 機能 |
|---|---|
| ログが改ざんされていないことの証明 | CloudTrail ログファイルの検証 |
| ログファイルの物理的な削除を禁止 | S3 オブジェクトロック(コンプライアンスモード) |
VPC フローログはネットワーク層のパケット記録であり、API 操作の整合性検証には使えない。
AWS Config との分担
CloudTrail は「誰がいつ何を呼んだか」の記録、Config は「リソースが今どういう構成か」の評価と変更履歴のタイムライン。SG の変更履歴を追うなら Config、API 呼び出し元を特定するなら CloudTrail。
RAM(Resource Access Manager)によるリソース共有
- 共有してもリソースの所有権は移動しない。共有先(Participant)は利用のみで、作成・削除・設定変更の権限はオーナーに残る
- 頻出の共有対象: VPC サブネット、Transit Gateway、License Manager のライセンス、Route 53 Resolver ルール
- Organizations 内への共有は受信側の承認(Accept)が不要で即時反映。組織外への共有は招待を承認するまで使えない
VPC サブネット共有の権限境界
| 主体 | できること |
|---|---|
| Owner | VPC 全体(ルートテーブル、NAT、IGW)、CIDR、NACL |
| Participant | 共有サブネット内で自分のリソース(EC2 / RDS / NLB)を起動・管理し、自アカウントのセキュリティグループを作ってアタッチ |
| Participant にできないこと | 他アカウントが同じサブネットに置いたリソースの参照・変更、ルートテーブルや NACL の編集、他アカウントの SG の適用 |
Participant から「ネットワーク設定を変えたい」と言われたら、まず自分の SG で解決できるか確認し、ルートテーブル / NACL / CIDR が要るなら Owner 側に依頼する。
関連
- EventBridge と自動修復の設計パターン
- VPC ネットワークとコンテンツ配信の設計判断
- バックアップ・DR・可用性設計(Vault Lock、オブジェクトロック)
- CloudFormation と CDK によるデプロイ設計(動的参照)
- SOA-C03 の試験構成と学習の進め方
更新履歴
- 2026-07-18: 初版(ローカル調査ノート)
- 2026-10-17: Wiki へ移植、概念ページとして再構成。冒頭に定義を追加
同じトピック — AWS
- バックアップ・DR・可用性設計の判断基準(RTO/RPO・AWS Backup・RDS/Aurora・Auto Scaling)
- CloudFormation と CDK によるデプロイ設計(変更セット・DeletionPolicy・StackSets・Construct)
- CloudWatch の監視設計(メトリクス階層・アラーム・ログ分析の使い分け)
- コンテナ監視の設計(AMP / Managed Grafana / CloudWatch Observability / Fargate の制約)
- AWS コスト最適化の判断基準(購入オプション・Savings Plans・Cost Explorer・インスタンス選定)
- EventBridge と自動修復の設計パターン
- SOA-C03(AWS Certified CloudOps Engineer - Associate)の試験構成と学習の進め方
- Systems Manager の運用自動化(マネージドノード・Run Command・Automation・Patch Manager)
- VPC ネットワークとコンテンツ配信の設計判断(SG / NACL / NAT / TGW / CloudFront / Route 53)