コンテンツにスキップ

カスタム SCP

AWS Organizations のサービスコントロールポリシー(SCP)のうち、Control Tower の予防コントロールでカバーされていないチェック項目を補完するために独自に作成するポリシーをカスタム SCP と呼ぶ。本セクションでは、Security Hub CSPM のコントロールに対応する予防手段として、各サービスごとのカスタム SCP の実装と検証結果をまとめる。

カスタム SCP で予防できるコントロール

Security Hub CSPM のページで本サイトのスコープとして整理しているコントロール(FSBP の CRITICAL / HIGH のうちパブリックアクセス防止に関わるもの)について、サービス独自の条件キーや特定 API の Deny でカスタム SCP による予防ができるかを検証した。検証対象は基本的に Control Tower 予防コントロールも宣言型ポリシーも該当しないコントロール(SSM.7 / EMR.2 / MSK.4 / EKS.1 / SSM.4 / RDS.1 / DocumentDB.3 / Neptune.3 / SNS.4 / SageMaker.1)。これに加えて、VPC BPA で実害ブロックできるコントロールのうちデータストア系の CRITICAL を中心に、VPC BPA の影響範囲が広すぎる、または finding を PASSED にしたい組織のために個別の予防手段を検討する対象として、RDS.2 / DMS.1 / Redshift.1 / RedshiftServerless.3 / ES.2 / Opensearch.2 を追加した。

予防できたものを以下に整理する。

コントロール該当 APIDeny の方式検証記事
SSM.7ssm:UpdateServiceSettingAPI + リソース ARN 単位の Deny(/ssm/documents/console/public-sharing-permission 設定の変更を拒否)SSM Block Public Sharing
EMR.2elasticmapreduce:PutBlockPublicAccessConfigurationAPI 単位の Deny(BPA 設定変更操作そのものを拒否)EMR Block Public Access
MSK.4kafka:UpdateConnectivityAPI + 条件キー kafka:publicAccessEnabled で DenyMSK Public Access
RDS.2rds:CreateDBInstance / rds:ModifyDBInstanceAPI + 条件キー rds:PubliclyAccessible で DenyRDS Publicly Accessible
EKS.1eks:CreateCluster / eks:UpdateClusterConfigAPI + 条件キー eks:endpointPublicAccess で DenyEKS Public Endpoint

カスタム SCP で予防できないコントロール

上記と同じ検証対象のうち、対応するサービスの API に必要な条件キーが提供されていないため、カスタム SCP では予防できないものを以下に整理する。これらは VPC BPA による実害ブロック、または Config 検知 + 自動修復などで対応する。

本表の「条件キーが提供されていない」という判定は、各サービスの Service Authorization Reference を確認したドキュメントベースの調査に基づく。カスタム SCP で予防できる 5 件(前表)は実際に SCP を適用して Deny を実機検証しているが、本表の各件は「ドキュメント上に該当条件キーが見当たらない」ことの確認であり、SCP を書いて効かないことを実機で確認したものではない。
コントロール該当 APIカスタム SCP で予防できない理由
RDS.1rds:ModifyDBSnapshotAttributeパブリック共有を判定する条件キーが提供されていない
DocumentDB.3rds:ModifyDBClusterSnapshotAttribute
(DocumentDB の IAM アクションは rds: プレフィックスを使用)
パブリック共有を判定する条件キーが提供されていない
Neptune.3rds:ModifyDBClusterSnapshotAttribute
(Neptune の IAM アクションは rds: プレフィックスを使用)
パブリック共有を判定する条件キーが提供されていない
SNS.4sns:SetTopicAttributesアクセスポリシー内容を評価する条件キーが提供されていない
Redshift.1redshift:CreateCluster / redshift:ModifyClusterパブリックアクセスを制御する条件キーが提供されていない
RedshiftServerless.3redshift-serverless:UpdateWorkgroupパブリックアクセスを制御する条件キーが提供されていない
ES.2es:CreateElasticsearchDomainVPC アクセスを制御する条件キーが提供されていない
Opensearch.2opensearch:CreateDomainVPC アクセスを制御する条件キーが提供されていない
DMS.1dms:CreateReplicationInstanceパブリックアクセスを制御する条件キーが提供されていない
SageMaker.1sagemaker:CreateNotebookInstanceDirectInternetAccess を制御する条件キーが提供されていない

これらのコントロールの対応方針は以下の通り:

  • VPC BPA で実害ブロックできるもの(Redshift.1 / RedshiftServerless.3 / DMS.1): VPC BPA(宣言型ポリシー) を主軸とする。ただしリソース側の設定値は変わらないため finding は FAILED のまま残る。このうち Redshift.1 は Config 検知 + 自動修復で finding も復旧できる(DMS.1 は作成後にパブリックアクセス設定を変更できず、再作成が必須のため自動修復は成立しない)
  • VPC BPA でも実害ブロックできないもの(ES.2 / Opensearch.2 / SageMaker.1): ES / OpenSearch のパブリックエンドポイント方式のドメインは AWS 管理側のネットワークに配置され、SageMaker ノートブックの Direct Internet Access は SageMaker 管理 VPC 経由で提供されるため、いずれもユーザー VPC の IGW を経由しない。そのため VPC BPA を有効化しても実害を遮断できない。作成時に正しいアクセス方式(ES / OpenSearch は VPC アクセス方式、SageMaker は DirectInternetAccess=Disabled)を選択する運用に依存する(作成後の変更は不可)
  • スナップショット / リソースポリシー系(RDS.1 / DocumentDB.3 / Neptune.3 / SNS.4): Config マネージドルールによる検知と SSM Automation による自動修復で対応する