コンテンツにスキップ

スナップショット公開

スナップショット(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.1CRITICALEBS スナップショットがパブリック共有されていないこと保護済み: スナップショットの createVolumePermission 属性が空(プライベート)。ec2:ModifySnapshotAttribute で明示的に group=all を追加しない限りパブリックにならない対象検証済み
EC2.182HIGHEBS スナップショットの BPA 設定が有効であること未保護: アカウントレベルの BPA 設定のデフォルト値は unblocked(無効)。PASSED となる block-all-sharing への明示的な変更が必要対象検証済み
RDS.1CRITICALRDS スナップショットがプライベートであること保護済み: スナップショットの restore 属性が空(プライベート)。modify-db-snapshot-attribute で明示的に all を追加しない限りパブリックにならない対象検証済み
DocumentDB.3CRITICALDocumentDB 手動クラスタースナップショットがパブリックでないこと保護済み: クラスタースナップショットの restore 属性が空(プライベート)。modify-db-cluster-snapshot-attribute で明示的に all を追加しない限りパブリックにならない対象外検証済み
Neptune.3CRITICALNeptune DB クラスタースナップショットがパブリックでないこと保護済み: クラスタースナップショットの restore 属性が空(プライベート)。modify-db-cluster-snapshot-attribute で明示的に all を追加しない限りパブリックにならない対象外検証済み

EC2.1 と EC2.182 の違い

2 件のコントロールはどちらも EBS スナップショットのパブリック共有に関するが、チェックしている対象が異なる。

EC2.1EC2.182
チェック対象パブリック共有スナップショットが存在するか(結果)アカウントレベルの BPA 設定が有効か(設定)
FAILED になる条件パブリック共有スナップショットが 1 件でも存在するBPA が unblocked または block-new-sharing
PASSED になる条件パブリック共有スナップショットが 0 件、または BPA が block-all-sharingBPA が block-all-sharing
デフォルト保護保護済み(スナップショットがデフォルトでプライベート)未保護(BPA がデフォルトで unblocked
対応する BPAEC2.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.1DocumentDB.3Neptune.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): パブリック共有の操作(ModifySnapshotAttributegroup=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.1ebs-snapshot-public-restorable-checkPeriodic手動トリガーで即座に最新の状態を取得して評価できる
EC2.182ebs-snapshot-block-public-accessConfiguration changes宣言型ポリシーによる BPA 変更を Config が設定変更として認識しないため、評価がトリガーされない。Security Hub の定期スキャンによる反映を待つ必要がある