カスタム 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 を追加した。
予防できたものを以下に整理する。
| コントロール | 該当 API | Deny の方式 | 検証記事 |
|---|---|---|---|
| SSM.7 | ssm:UpdateServiceSetting | API + リソース ARN 単位の Deny(/ssm/documents/console/public-sharing-permission 設定の変更を拒否) | SSM Block Public Sharing |
| EMR.2 | elasticmapreduce:PutBlockPublicAccessConfiguration | API 単位の Deny(BPA 設定変更操作そのものを拒否) | EMR Block Public Access |
| MSK.4 | kafka:UpdateConnectivity | API + 条件キー kafka:publicAccessEnabled で Deny | MSK Public Access |
| RDS.2 | rds:CreateDBInstance / rds:ModifyDBInstance | API + 条件キー rds:PubliclyAccessible で Deny | RDS Publicly Accessible |
| EKS.1 | eks:CreateCluster / eks:UpdateClusterConfig | API + 条件キー eks:endpointPublicAccess で Deny | EKS Public Endpoint |
カスタム SCP で予防できないコントロール
上記と同じ検証対象のうち、対応するサービスの API に必要な条件キーが提供されていないため、カスタム SCP では予防できないものを以下に整理する。これらは VPC BPA による実害ブロック、または Config 検知 + 自動修復などで対応する。
| コントロール | 該当 API | カスタム SCP で予防できない理由 |
|---|---|---|
| RDS.1 | rds:ModifyDBSnapshotAttribute | パブリック共有を判定する条件キーが提供されていない |
| DocumentDB.3 | rds:ModifyDBClusterSnapshotAttribute(DocumentDB の IAM アクションは rds: プレフィックスを使用) | パブリック共有を判定する条件キーが提供されていない |
| Neptune.3 | rds:ModifyDBClusterSnapshotAttribute(Neptune の IAM アクションは rds: プレフィックスを使用) | パブリック共有を判定する条件キーが提供されていない |
| SNS.4 | sns:SetTopicAttributes | アクセスポリシー内容を評価する条件キーが提供されていない |
| Redshift.1 | redshift:CreateCluster / redshift:ModifyCluster | パブリックアクセスを制御する条件キーが提供されていない |
| RedshiftServerless.3 | redshift-serverless:UpdateWorkgroup | パブリックアクセスを制御する条件キーが提供されていない |
| ES.2 | es:CreateElasticsearchDomain | VPC アクセスを制御する条件キーが提供されていない |
| Opensearch.2 | opensearch:CreateDomain | VPC アクセスを制御する条件キーが提供されていない |
| DMS.1 | dms:CreateReplicationInstance | パブリックアクセスを制御する条件キーが提供されていない |
| SageMaker.1 | sagemaker:CreateNotebookInstance | DirectInternetAccess を制御する条件キーが提供されていない |
これらのコントロールの対応方針は以下の通り:
- 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 による自動修復で対応する