AWS Security Hub コントロール「EC2.182」対応:CDKで EBS Block Public Access を有効化してみた

AWS Security Hub コントロール「EC2.182」対応:CDKで EBS Block Public Access を有効化してみた

2025.12.14

製造ビジネステクノロジー部の小林です。

2025年12月8日、AWS Security Hub に新しいセキュリティコントロール「[EC2.182] Amazon EBS Snapshots should not be publicly accessible」が追加されました。
https://docs.aws.amazon.com/securityhub/latest/userguide/ec2-controls.html#ec2-182

Security Hub ユーザーガイド
https://docs.aws.amazon.com/securityhub/latest/userguide/doc-history.html

このコントロールは、アカウント全体でスナップショットの公開共有を防ぐ仕組み(Block Public Access)が有効かを確認します。

なぜ重要なのか?

EBSスナップショットには、アプリケーションデータ、設定ファイル、データベースの内容など、機密性の高い情報が含まれている可能性があります。万が一スナップショットが公開共有されてしまうと、誰でもそのデータをコピーできる状態になり、機密情報の漏洩につながるセキュリティリスクとなります。

EC2.182は、このような事態を事前に防ぐための予防的コントロールです。

AWSマネジメントコンソールでの設定

EC2 ダッシュボードにアクセスし、左メニューの「設定」をクリックします。
スクリーンショット 2025-12-14 11.34.30

画面中央付近に「EBS スナップショットのパブリックアクセスをブロック」の欄があります。画像からもパブリックアクセスがブロックされていないことがわかります。パブリックアクセスブロックを有効化するために「管理」をクリックします。
スクリーンショット 2025-12-14 11.36.58

「パブリックアクセスをブロック」にチェックを入れ、「すべての公開共有をブロック」を選択して更新します。
スクリーンショット 2025-12-14 11.39.05

すべての公開共有をブロック
すべての公開共有リクエストをブロックし、既存のパブリックスナップショットへのパブリックアクセスを制限します。

新しい公開共有をブロック
新しい公開共有リクエストをブロックしますが、現在公開共有されているスナップショットは引き続き公開されます。

EBS スナップショットのパブリックアクセスをブロックできました。
スクリーンショット 2025-12-14 11.43.59

AWS CDK で実装してみる

次に、CDK でこの EBS スナップショットのパブリックアクセスをブロックする設定を実装してみます。CloudFormation には AWS::EC2::SnapshotBlockPublicAccess リソースが存在します。
https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-snapshotblockpublicaccess.html

現時点では高レベルな L2 コンストラクトは提供されていませんが、CloudFormation リソースに直接対応する L1 コンストラクト (CfnSnapshotBlockPublicAccess) が利用可能です。
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.CfnSnapshotBlockPublicAccess.html

これを使えば、Custom Resource などの複雑な実装を使わずに、以下のようにシンプルに記述できます。

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

export class EbsSnapshotBlockPublicAccessStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    /**
     *  L1コンストラクトを使用してEBSスナップショットのパブリックアクセスをブロック
     */
    new ec2.CfnSnapshotBlockPublicAccess(this, 'EbsBlockPublicAccess', {
      state: 'block-all-sharing',  // "block-all-sharing" で「すべての公開共有をブロック」
    });
  }
}

プロパティの state には以下のいずれかを指定します。

  • block-all-sharing: すべての公開共有をブロック
  • block-new-sharing: 新しい公開共有のみブロック
  • unblocked: ブロックしない

今回は EC2.182 に準拠するため、block-all-sharing を設定しました。

デプロイ

先ほど有効化した、EBS スナップショットのパブリックアクセスブロック設定を無効化します。
スクリーンショット 2025-12-14 12.10.38

CDKソースをデプロイします。するとパブリックアクセスブロック設定が有効化されました。
スクリーンショット 2025-12-14 12.14.06

おわりに

EC2.182は、EBSスナップショットの公開共有を事前に防ぐ予防的コントロールです。現在スナップショットを使用していない場合でも、将来の利用時に備えて有効化しておくことを推奨します。

この記事をシェアする

FacebookHatena blogX

関連記事