コンテンツにスキップ
予防コントロール

予防コントロール

本ページの情報は 2026 年 3 月時点のものです。ランディングゾーンバージョンは 3.3 で検証しています。

Control Tower のコントロールとは

AWS Control Tower は、マルチアカウント環境にガバナンスルール(コントロール)を適用するサービスである。コントロールには以下の 3 種類がある。

種類動作概要
予防(Preventive)違反操作をブロックポリシーにより、違反する API 操作を事前に拒否する
検出(Detective)違反リソースを検出AWS Config ルールにより、違反状態のリソースを検出・通知する
プロアクティブ(Proactive)デプロイ時にチェックCloudFormation Hook により、リソース作成・更新時に違反をブロックする

本ページでは予防コントロールを扱う。

予防コントロールの概要

予防コントロールは全 69 個(Control Catalog API で確認)あり、実装方式は以下の 3 種類に分かれる。

実装方式個数概要
SCP(サービスコントロールポリシー)56特定の API 操作を禁止する。違反する操作は実行前にブロックされる
RCP(リソースコントロールポリシー)9個々のリソース設定(バケットポリシー等)に関係なく、リソースへのアクセス条件を一括で強制する(組織外アクセスのブロック、TLS の強制等)
Declarative policies(宣言型ポリシー)4EC2 関連のアカウントレベル設定を強制する(EBS スナップショットのパブリック共有禁止、AMI のパブリック共有禁止等)

SCP と RCP の主な違い

SCPRCP
制御の視点適用した OU 配下のアカウントの IAM プリンシパルに対して、特定の操作を禁止する適用した OU 配下のアカウントのリソースへのアクセスに対して、条件に合わないアクセスを拒否する
効果の範囲適用した OU 配下のアカウントのプリンシパルのみ。組織外からのアクセスには効かない組織内外を問わず、対象リソースにアクセスする全てのプリンシパル
組織外アクセスの遮断できないできる

具体例で理解する

S3 バケットのバケットポリシーで、組織外アカウントに GetObject を許可している状態を考える。

SCP の場合:

{
  "Effect": "Deny",
  "Action": "s3:PutBucketPolicy",
  "Resource": "*"
}

この SCP は「組織内ユーザーがバケットポリシーを変更する操作」を禁止する。しかし、既に設定済みのバケットポリシーによる組織外からのアクセスは止められない。SCP は組織外プリンシパルのリクエストに対して評価されないためである。

RCP の場合:

{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "StringNotEquals": {
      "aws:PrincipalOrgID": "o-xxxxxxxxxx"
    },
    "Bool": {
      "aws:PrincipalIsAWSService": "false"
    }
  }
}

この RCP は「組織外プリンシパルからの S3 アクセス」をリソース側で拒否する。バケットポリシーで許可されていても、RCP が上位レイヤーとして拒否する。なお、RCP はバケットポリシー自体を書き換えるわけではない(CT.S3.PV.4 の検証で確認済み)。

一部の SCP・RCP コントロールでは、ExemptedPrincipalArns 等のパラメータにより例外設定が可能。詳細は Controls with parameters を参照。

必須コントロール

ランディングゾーンのセットアップ時に自動適用され、無効化できないコントロール。全 OU 共通のものと Security OU 固有のものがある。

全 OU 共通(15 個・すべて予防/SCP)

コントロール ID概要
AWS-GR_CLOUDTRAIL_CHANGE_PROHIBITEDCloudTrail の設定変更禁止
AWS-GR_CLOUDTRAIL_CLOUDWATCH_LOGS_ENABLEDCloudTrail と CloudWatch Logs の統合維持
AWS-GR_CLOUDTRAIL_ENABLED全リージョンで CloudTrail 有効化維持
AWS-GR_CLOUDTRAIL_VALIDATION_ENABLEDCloudTrail ログファイルの整合性検証維持
AWS-GR_CLOUDWATCH_EVENTS_CHANGE_PROHIBITEDControl Tower 管理の CloudWatch Events 変更禁止
AWS-GR_CONFIG_AGGREGATION_AUTHORIZATION_POLICYConfig Aggregation Authorization の削除禁止
AWS-GR_CONFIG_AGGREGATION_CHANGE_PROHIBITEDConfig リソースのタグ変更禁止
AWS-GR_CONFIG_CHANGE_PROHIBITEDConfig の設定変更禁止
AWS-GR_CONFIG_ENABLED全リージョンで Config 有効化維持
AWS-GR_CONFIG_RULE_CHANGE_PROHIBITEDControl Tower 管理の Config Rules 変更禁止
AWS-GR_IAM_ROLE_CHANGE_PROHIBITEDControl Tower / CloudFormation 管理の IAM ロール変更禁止
AWS-GR_LAMBDA_CHANGE_PROHIBITEDControl Tower 管理の Lambda 関数変更禁止
AWS-GR_LOG_GROUP_POLICYCloudWatch Logs ロググループの変更禁止
AWS-GR_SNS_CHANGE_PROHIBITEDControl Tower 管理の SNS トピック変更禁止
AWS-GR_SNS_SUBSCRIPTION_CHANGE_PROHIBITEDControl Tower 管理の SNS サブスクリプション変更禁止
上記 15 個のうち、CloudTrail 関連の 4 個(CHANGE_PROHIBITED / CLOUDWATCH_LOGS_ENABLED / ENABLED / VALIDATION_ENABLED)は同一の SCP で実装されている。Config 関連の 2 個(CHANGE_PROHIBITED / ENABLED)も同様。コントロール名は「目的」を表しており、実装はすべて Deny SCP で「その状態を壊す API を禁止する」形になっている。

Security OU 固有(8 個・予防 5 + 検出 3)

Security OU(デフォルトでは Audit アカウント・LogArchive アカウントが所属)にのみ適用される。LogArchive アカウントの S3 バケット保護が中心。

コントロール ID種類概要
AWS-GR_CT_AUDIT_BUCKET_ENCRYPTION_CHANGES_PROHIBITED予防LogArchive の S3 バケット暗号化設定変更禁止
AWS-GR_CT_AUDIT_BUCKET_LOGGING_CONFIGURATION_CHANGES_PROHIBITED予防LogArchive の S3 バケットログ設定変更禁止
AWS-GR_CT_AUDIT_BUCKET_POLICY_CHANGES_PROHIBITED予防LogArchive の S3 バケットポリシー変更禁止
AWS-GR_CT_AUDIT_BUCKET_LIFECYCLE_CONFIGURATION_CHANGES_PROHIBITED予防LogArchive の S3 バケットライフサイクル設定変更禁止
AWS-GR_AUDIT_BUCKET_DELETION_PROHIBITED予防LogArchive の S3 バケット削除禁止
AWS-GR_AUDIT_BUCKET_PUBLIC_READ_PROHIBITED検出LogArchive の S3 バケットパブリック読み取りアクセス検出
AWS-GR_AUDIT_BUCKET_PUBLIC_WRITE_PROHIBITED検出LogArchive の S3 バケットパブリック書き込みアクセス検出
AWS-GR_DETECT_CLOUDTRAIL_ENABLED_ON_SHARED_ACCOUNTS検出Security OU 配下の共有アカウントで CloudTrail が無効になっていないか検出

ランディングゾーン 4.0 での変更: 4.0 にアップデートすると、Security OU 固有の予防コントロール 5 個と検出コントロール 2 個(パブリックアクセス検出)は廃止され、以下の 3 つの新しい必須コントロールに置き換えられる。

  • CT.S3.PV.8 - Control Tower 管理 S3 バケット(aws-controltower-access-logs-*aws-controltower-cloudtrail-*aws-controltower-logs-*)のバケットレベル操作を一括で禁止。従来の 5 個の個別コントロールを統合
  • CT.S3.PV.7 - Config 記録用 S3 バケット(aws-controltower-config-*)のバケットレベル操作を禁止。4.0 で Config のログ保存先が専用バケットに分離されることに伴う新設
  • CT.SNS.PV.1 - 集中ログ用 SNS トピック(aws-controltower-CentralizedLoggingNotifications*)の変更禁止。4.0 でサービスごとに個別の SNS トピックが作成されることに伴う新設

検証環境

検証環境の構成図

選定の考え方

予防コントロール 69 個の内訳は以下の通り。

  • 必須 23 個:ランディングゾーンのセットアップ時に自動適用(うち 3 個はランディングゾーン 4.0 で追加)
  • 強く推奨 2 個:ルートユーザーのアクション禁止(AWS-GR_RESTRICT_ROOT_USER)、アクセスキー作成禁止(AWS-GR_RESTRICT_ROOT_USER_ACCESS_KEYS)。ルートアクセス一元管理との関係整理が必要なため、一元管理の検証と合わせて必要に応じて検討する
  • 選択的 44 個:以下の通り目的別に分類し、有効化の判断を行った

パブリックアクセスは設定ミスの瞬間にリスクが顕在化するため、リソースポリシー系の予防コントロールは即座に有効化しやすい。VPC BPA(CT.EC2.PV.8)も同じくパブリックアクセスの防止が目的であるが、パブリック IP の付与や IGW 経由のインターネットアクセスは意図した設計である可能性もあり、実環境への投入時には影響評価が必要である(CT.EC2.PV.8 の検証で挙動を確認済み)。データ境界や暗号化も基本的なセキュリティ要件として有効化した。

未検証としたものは、既存ワークロードへの影響評価が必要なもの(ネットワーク構成の制限、S3 の TLS 1.3 強制等)と、ワークロードのセキュリティとは目的が異なるもの(Control Tower 管理基盤の保護、KMS 鍵管理の詳細制御等)である。

目的判断個数理由
パブリックアクセスの防止有効化5設定ミスの瞬間にリスクが顕在化する。検知を待つ猶予がない
有効化1CT.APPSYNC.PV.1 を検証済み
有効化1CT.EC2.PV.8 を検証済み
データ境界の構築(組織外アクセス遮断)有効化5パブリック・クロスアカウントの組織外アクセスを、リソース側から RCP で遮断
転送中データの暗号化有効化1S3 への HTTPS 以外のアクセスを遮断
保存データの暗号化有効化2基本的なセキュリティ要件
リージョン制限有効化1OU 単位で制御可能な CT.MULTISERVICE.PV.1 を検証
未検証1ランディングゾーン全体に適用される AWS-GR_REGION_DENY
ネットワーク制限未検証3IGW 作成禁止、VPN 禁止、クロスリージョン禁止。既存ワークロードへの影響評価が必要
KMS 鍵管理の詳細制御未検証6鍵の生成元やグラント制限など、高度な要件向け
S3 データ保護(TLS 1.3/SSE-KMS 強制)未検証3Presigned URL 不可、TLS 1.3 強制等の影響評価が必要
EC2 特殊 API 制限未検証4EBS Direct API、VM Import/Export、非推奨 Spot API 等の使用禁止。利用状況の確認が必要
CT/Backup 管理リソース保護未検証6Control Tower 自体の管理基盤の保護であり、ワークロードのセキュリティとはテーマが異なる
LogArchive S3 バケット保護未検証5Security OU 固有の設定であり、同上

検証したコントロール一覧

上記の選定に基づき、以下の 14 個のコントロールを実際の AWS アカウントで検証した。すべての記事で統一的な検証観点(有効化前後の挙動・既存環境への影響・エラーメッセージ・CloudTrail 検出の有無)で検証している。

SCP(サービスコントロールポリシー)

コントロール対象サービス有効化後の影響既存リソースへの影響Security Hub 対応
CT.EC2.PV.1EC2未暗号化ボリュームからのスナップショット作成をブロック既存スナップショットは維持直接対応なし
CT.EC2.PV.2EC2未暗号化 EBS ボリュームのアタッチをブロック既存アタッチは維持EC2.3 を補完
CT.EC2.PV.3EC2EBS スナップショットのパブリック共有をブロック既存のパブリック共有は維持EC2.1 を補完
CT.LAMBDA.PV.1LambdaLambda 関数 URL の AuthType を IAM_AUTH 以外に設定する操作をブロック既存の関数 URL は維持直接対応なし
CT.LAMBDA.PV.2LambdaLambda 関数・関数 URL のパブリックアクセス設定をブロック既存設定は維持Lambda.1 を補完
CT.MULTISERVICE.PV.1複数許可リージョン以外での API 操作をブロック既存リソースは維持(操作不可)直接対応なし

RCP(リソースコントロールポリシー)

コントロール対象サービス有効化後の影響既存リソースへの影響Security Hub 対応
CT.S3.PV.4S3組織外プリンシパルからの S3 アクセスをブロックバケットポリシーは維持 ※直接対応なし
CT.S3.PV.5S3S3 への HTTP(非 TLS)アクセスをブロックバケットポリシーは維持 ※S3.5 の予防版(ただし FAILED は解消されない)
CT.KMS.PV.7KMS組織外プリンシパルからの KMS アクセスをブロックキーポリシーは維持 ※直接対応なし
CT.SECRETSMANAGER.PV.1Secrets Manager組織外プリンシパルからの Secrets Manager アクセスをブロックリソースポリシーは維持 ※直接対応なし
CT.SQS.PV.1SQS組織外プリンシパルからの SQS アクセスをブロックキューポリシーは維持 ※直接対応なし
CT.STS.PV.1STS組織外プリンシパルからの AssumeRole をブロック(AssumeRoleWithSAML / AssumeRoleWithWebIdentity はスコープ外)信頼ポリシーは維持 ※直接対応なし
※ RCP は既存のリソースポリシー(バケットポリシー、キーポリシー、信頼ポリシー等)を書き換えない。ただし、有効化した時点から RCP の条件に違反するアクセスは即座にブロックされる。組織外アカウントとのリソース共有がある場合は、有効化前に影響を確認すること。

Declarative policies(宣言型ポリシー)

コントロール対象サービス有効化後の影響既存リソースへの影響Security Hub 対応
CT.EC2.PV.7EC2EBS スナップショットのパブリック共有を Block Public Access で禁止既存のパブリック共有スナップショットも他アカウントからアクセス不可になるEC2.1 が PASSED に変化
CT.EC2.PV.11EC2AMI のパブリック共有を禁止既存のパブリック共有 AMI も他アカウントからアクセス不可になる直接対応なし
CT.EC2.PV.8EC2VPC BPA を block-bidirectional に強制し、除外(Exclusions)の作成も禁止IGW / Egress-only IGW 経由の全インターネットアクセスがブロックされる直接対応なし(個別リソースの設定をチェックする CSPM コントロールは変化しない見込み)