AWS Security Hub コントロール「EC2.182」対応:CDKで EBS Block Public Access を有効化してみた
製造ビジネステクノロジー部の小林です。
2025年12月8日、AWS Security Hub に新しいセキュリティコントロール「[EC2.182] Amazon EBS Snapshots should not be publicly accessible」が追加されました。
Security Hub ユーザーガイド
このコントロールは、アカウント全体でスナップショットの公開共有を防ぐ仕組み(Block Public Access)が有効かを確認します。
なぜ重要なのか?
EBSスナップショットには、アプリケーションデータ、設定ファイル、データベースの内容など、機密性の高い情報が含まれている可能性があります。万が一スナップショットが公開共有されてしまうと、誰でもそのデータをコピーできる状態になり、機密情報の漏洩につながるセキュリティリスクとなります。
EC2.182は、このような事態を事前に防ぐための予防的コントロールです。
AWSマネジメントコンソールでの設定
EC2 ダッシュボードにアクセスし、左メニューの「設定」をクリックします。

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

「パブリックアクセスをブロック」にチェックを入れ、「すべての公開共有をブロック」を選択して更新します。

すべての公開共有をブロック
すべての公開共有リクエストをブロックし、既存のパブリックスナップショットへのパブリックアクセスを制限します。
新しい公開共有をブロック
新しい公開共有リクエストをブロックしますが、現在公開共有されているスナップショットは引き続き公開されます。
EBS スナップショットのパブリックアクセスをブロックできました。

AWS CDK で実装してみる
次に、CDK でこの EBS スナップショットのパブリックアクセスをブロックする設定を実装してみます。CloudFormation には AWS::EC2::SnapshotBlockPublicAccess リソースが存在します。
現時点では高レベルな L2 コンストラクトは提供されていませんが、CloudFormation リソースに直接対応する L1 コンストラクト (CfnSnapshotBlockPublicAccess) が利用可能です。
これを使えば、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 スナップショットのパブリックアクセスブロック設定を無効化します。

CDKソースをデプロイします。するとパブリックアクセスブロック設定が有効化されました。

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








