スナップショット公開
スナップショット(EBS、RDS、DocumentDB、Neptune)が他の AWS アカウントからパブリックに復元可能な状態になっていないかをチェックするコントロール群。
対象コントロール(5 件)
関連する宣言型ポリシー属性: EBS Snapshot Block Public Access(EBS のみ。RDS / DocumentDB / Neptune には対応する宣言型ポリシーがない)
デフォルト保護は API のデフォルト値(CLI でオプションを省略した場合の値)に基づく。マネジメントコンソールではより安全な値がプリセットされている場合がある。5 件のうち 4 件(EC2.1 / RDS.1 / DocumentDB.3 / Neptune.3)はスナップショット自体がデフォルトでプライベートになるため保護されており、唯一 EC2.182(EBS Snapshot BPA)のみがアカウントレベルの設定であり、デフォルトで未保護である。
| コントロール | 重大度 | タイトル | デフォルト保護 | IAM Access Analyzer | 記事 |
|---|---|---|---|---|---|
| EC2.1 | CRITICAL | EBS スナップショットがパブリック共有されていないこと | 保護済み: スナップショットの createVolumePermission 属性が空(プライベート)。ec2:ModifySnapshotAttribute で明示的に group=all を追加しない限りパブリックにならない | 対象 | 検証済み |
| EC2.182 | HIGH | EBS スナップショットの BPA 設定が有効であること | 未保護: アカウントレベルの BPA 設定のデフォルト値は unblocked(無効)。PASSED となる block-all-sharing への明示的な変更が必要 | 対象 | 検証済み |
| RDS.1 | CRITICAL | RDS スナップショットがプライベートであること | 保護済み: スナップショットの restore 属性が空(プライベート)。modify-db-snapshot-attribute で明示的に all を追加しない限りパブリックにならない | 対象 | 検証済み |
| DocumentDB.3 | CRITICAL | DocumentDB 手動クラスタースナップショットがパブリックでないこと | 保護済み: クラスタースナップショットの restore 属性が空(プライベート)。modify-db-cluster-snapshot-attribute で明示的に all を追加しない限りパブリックにならない | 対象外 | 検証済み |
| Neptune.3 | CRITICAL | Neptune DB クラスタースナップショットがパブリックでないこと | 保護済み: クラスタースナップショットの restore 属性が空(プライベート)。modify-db-cluster-snapshot-attribute で明示的に all を追加しない限りパブリックにならない | 対象外 | 検証済み |
EC2.1 と EC2.182 の違い
2 件のコントロールはどちらも EBS スナップショットのパブリック共有に関するが、チェックしている対象が異なる。
| EC2.1 | EC2.182 | |
|---|---|---|
| チェック対象 | パブリック共有スナップショットが存在するか(結果) | アカウントレベルの BPA 設定が有効か(設定) |
| FAILED になる条件 | パブリック共有スナップショットが 1 件でも存在する | BPA が unblocked または block-new-sharing |
| PASSED になる条件 | パブリック共有スナップショットが 0 件、または BPA が block-all-sharing | BPA が block-all-sharing |
| デフォルト保護 | 保護済み(スナップショットがデフォルトでプライベート) | 未保護(BPA がデフォルトで unblocked) |
| 対応する BPA | EC2.182 と共通(block-all-sharing で PASSED) | 自身が BPA のチェック |
EC2.1 はスナップショット単位の評価だが、BPA が有効であれば実際にパブリック復元が不可能なため、パブリック共有スナップショットが存在しても PASSED になる。つまり BPA を block-all-sharing に設定すれば EC2.1 と EC2.182 の両方が PASSED となる。
RDS.1 / DocumentDB.3 / Neptune.3 の共通点と差異
3 件はいずれも「スナップショットの restore 属性に all が含まれるか」(= 任意の AWS アカウントからスナップショットを復元可能か)をチェックする。
| RDS.1 | DocumentDB.3 | Neptune.3 | |
|---|---|---|---|
| 対象リソース | DB スナップショット | クラスタースナップショット | クラスタースナップショット |
| FAILED になる条件 | restore 属性に all が含まれる | restore 属性に all が含まれる | restore 属性に all が含まれる |
| デフォルト保護 | 保護済み(プライベート) | 保護済み(プライベート) | 保護済み(プライベート) |
| 対応する BPA | なし | なし | なし |
予防手段との対応
EBS スナップショット(EC2.1 / EC2.182)には 2 つの予防手段がある。RDS.1 / DocumentDB.3 / Neptune.3 には対応する予防手段(宣言型ポリシーや SCP)がない。
| コントロール | CT.EC2.PV.3(SCP) | CT.EC2.PV.7(宣言型ポリシー) |
|---|---|---|
| EC2.1 | パブリック共有を予防 / finding 変化なし | パブリック共有を予防 / PASSED に変化 |
| EC2.182 | ― | パブリック共有を予防 / PASSED に変化 |
| RDS.1 | ― | ― |
| DocumentDB.3 | ― | ― |
| Neptune.3 | ― | ― |
「―」は対応する予防手段がないことを示す。RDS.1 / DocumentDB.3 / Neptune.3 については、対応する API(rds:ModifyDBSnapshotAttribute / rds:ModifyDBClusterSnapshotAttribute)に属性値を制御する条件キーが提供されていないため、SCP による予防は不可。Config + 自動修復による検知・是正が現実解。
- CT.EC2.PV.3(SCP): パブリック共有の操作(
ModifySnapshotAttributeでgroup=allを追加)を API レベルで拒否する。メンバーアカウントのユーザーは新規にパブリック共有を設定できない。ただし SCP は有効化前にパブリック共有されていたスナップショットには影響しないため、既存のパブリック共有はそのまま残り、EC2.1 は FAILED のまま。BPA 設定にも影響しないため EC2.182 にも効果がない。スナップショットはデフォルトでプライベートなので、SCP を有効にすればデフォルト状態からのパブリック化を防げる(検証済み) - CT.EC2.PV.7(宣言型ポリシー): アカウントレベルの BPA を
block-all-sharingに強制する。メンバーアカウントのユーザーは BPA を無効化できない(DeclarativePolicyViolation)。BPA が有効であれば既存のパブリック共有スナップショットも実質的にアクセス不可となるため、EC2.1 / EC2.182 の両方が PASSED に変化する(検証済み)
いずれもメンバーアカウント側で予防を突破することはできない。ただし「パブリック共有の予防」と「Security Hub finding の COMPLIANT 化」は別物である点に注意。CT.EC2.PV.3 はパブリック共有を防ぐが finding は変化しない。
Config ルールの評価トリガーについて
EC2.1 と EC2.182 は異なる種類の Config ルール評価トリガーを使用しており、宣言型ポリシー適用後の確認方法に影響する。
| トリガー | 動作 |
|---|---|
| Configuration changes(設定変更トリガー) | Config が監視しているリソースの設定が変更されたときに評価が実行される。変更がなければ評価されない |
| Periodic(定期実行) | 設定変更の有無に関係なく、一定間隔(1時間〜24時間)で評価が実行される |
| コントロール | Config ルール | トリガー | 宣言型ポリシー適用後の挙動 |
|---|---|---|---|
| EC2.1 | ebs-snapshot-public-restorable-check | Periodic | 手動トリガーで即座に最新の状態を取得して評価できる |
| EC2.182 | ebs-snapshot-block-public-access | Configuration changes | 宣言型ポリシーによる BPA 変更を Config が設定変更として認識しないため、評価がトリガーされない。Security Hub の定期スキャンによる反映を待つ必要がある |