自動修復
Security Hub CSPM のコントロールのうち、SCP / 宣言型ポリシー / Control Tower 予防コントロールによる予防が不可能なものに対して、検知後の自動修復による対応策を検証する。
自動修復の構成
本サイトでは、Security Hub finding をトリガーに EventBridge 経由で SSM Automation を起動する構成を採用する。
Config ルール評価
→ NON_COMPLIANT 検出
→ Security Hub finding → FAILED
→ EventBridge ルールで finding をフィルタ
→ SSM Automation を起動
→ リソースをコンプライアンス状態に修復
→ Config 再評価 → COMPLIANT
→ Security Hub finding → PASSEDConfig 修復アクションを使わない理由
AWS Config には Remediation Action という機能があり、Config ルールに直接 SSM Automation を紐付けて自動修復を実行できる。ただし、AWS 公式ドキュメント PutRemediationConfigurations に明記の通り、Security Hub によってデプロイされた Config ルール(securityhub- プレフィックスのルール)には修復アクションを追加できない。
This API does not support adding remediation configurations for service-linked AWS Config Rules such as Organization AWS Config rules, the rules deployed by conformance packs, and rules deployed by AWS Security Hub.
本サイトの対象コントロールはすべて Security Hub 管理の Config ルールに依存するため、Config 修復アクションは使用できない。代わりに EventBridge → SSM Automation の構成を採用する。
対象コントロール(検証対象 6 件 + 自動修復不可 2 件)
| コントロール | 重大度 | カテゴリ | Config ルール | マネージド修復ドキュメント | 記事 |
|---|---|---|---|---|---|
| RDS.1 | CRITICAL | スナップショット公開 | rds-snapshots-public-prohibited | AWSSupport-ModifyRDSSnapshotPermission(DB インスタンススナップショットのみ。クラスタースナップショットには非対応) | RDS.1 自動修復(検証中) |
| DocumentDB.3 | CRITICAL | スナップショット公開 | docdb-cluster-snapshot-public-prohibited | なし(カスタムランブック必要) | 検証中 |
| Neptune.3 | CRITICAL | スナップショット公開 | neptune-cluster-snapshot-public-prohibited | なし(カスタムランブック必要) | 検証中 |
| DMS.1 | CRITICAL | インターネット到達性 | dms-replication-not-public | なし(カスタムランブック必要) | 検証中 |
| Redshift.1 | CRITICAL | インターネット到達性 | redshift-cluster-public-access-check | AWSConfigRemediation-DisablePublicAccessToRedshiftCluster | 検証中 |
| ES.2 | CRITICAL | インターネット到達性 | elasticsearch-in-vpc-only | 自動修復不可(再作成が必須、後述) | 対象外(自動修復不可) |
| Opensearch.2 | CRITICAL | インターネット到達性 | opensearch-in-vpc-only | 自動修復不可(再作成が必須、後述) | 対象外(自動修復不可) |
| SNS.4 | CRITICAL | リソースポリシー | sns-topic-no-public-access | なし(カスタムランブック必要) | 検証中 |
AWSConfigRemediation- プレフィックスは AWS Config が公式に修復アクション用として提供するランブック。AWSSupport- プレフィックスは AWS サポート用の汎用ランブックだが、SSM Automation として実行可能なため EventBridge 経由でも利用できる。本サイトでは Config 修復アクションを使わないため、両者の差は実装上は問題にならない。SCP で予防できない理由
| コントロール | 該当 API | SCP 予防不可の理由 |
|---|---|---|
| RDS.1 | rds:ModifyDBSnapshotAttribute | パブリック共有を判定する条件キーが提供されていない |
| DocumentDB.3 | rds:ModifyDBClusterSnapshotAttribute | 同上 |
| Neptune.3 | rds:ModifyDBClusterSnapshotAttribute | 同上 |
| DMS.1 | dms:CreateReplicationInstance | パブリックアクセスを制御する条件キーが提供されていない |
| Redshift.1 | redshift:CreateCluster / redshift:ModifyCluster | 同上 |
| ES.2 | es:CreateElasticsearchDomain(deprecated)/ es:CreateDomain | VPC アクセスを制御する条件キーが提供されていない |
| Opensearch.2 | es:CreateDomain | 同上(OpenSearch Service の IAM サービスプレフィックスは es:) |
| SNS.4 | sns:SetTopicAttributes | アクセスポリシー内容を評価する条件キーが提供されていない |
デフォルト挙動の補足
各サービスのリソース作成時のデフォルトのパブリック設定値は以下の通り(2026 年 5 月時点の AWS 公式ドキュメント・API リファレンスで確認)。デフォルトがパブリックのサービスは、明示的に対策を指定しない限り公開状態で作成される。
| サービス | デフォルト | パブリック化の操作 | 備考 |
|---|---|---|---|
| RDS スナップショット | プライベート | modify-db-snapshot-attribute --attribute-name restore --values-to-add all | デフォルトで保護されている |
| DocumentDB / Neptune クラスタースナップショット | プライベート | modify-db-cluster-snapshot-attribute --attribute-name restore --values-to-add all | デフォルトで保護されている |
| DMS レプリケーションインスタンス | パブリック | create-replication-instance で --no-publicly-accessible を省略 | API パラメータ PubliclyAccessible のデフォルト値が true。Config 検知の重要性が特に高い |
| Redshift クラスター | プライベート(2025 年 1 月以降) | create-cluster --publicly-accessible を明示指定 | 2025 年 1 月から新規・復元したプロビジョン済みクラスターはデフォルトで非公開になった。デフォルト変更前の既存クラスターも検知対象 |
| ES / OpenSearch ドメイン | パブリック | create-elasticsearch-domain / create-domain で --vpc-options を省略 | パブリックエンドポイントで作成された場合、後から VPC 内へ移行できない(再作成必須) |
| SNS トピック | プライベート | set-topic-attributes でアクセスポリシーに Principal: *(Condition なし)を明示設定 | デフォルトトピックポリシーは自アカウントのみ許可 |