EBS スナップショットブロックパブリックアクセスの宣言型ポリシーを適用してみた

EBS スナップショットブロックパブリックアクセスの宣言型ポリシーを適用してみた

非 Control Tower 環境で EBS スナップショットブロックパブリックアクセスの宣言型ポリシーを適用してみました。
Clock Icon2025.01.29

カスタマーサクセス部 運用支援チームのいたくらです。

はじめに

ここ数日で、許可された AMI と EC2 シリアルコンソールアクセスの宣言型ポリシーの適用に関するブログを公開しました。
https://dev.classmethod.jp/articles/202501-declarative-policy-for-allowed-amis/
https://dev.classmethod.jp/articles/202501-declarative-policy-for-ec2-serial-console/

今回は EBS スナップショットブロックパブリックアクセスの宣言型ポリシーの適用と挙動の変化を確認してみました。

前提

前提として、自分が検証した環境について補足します。

  • AWS Organizations を有効化済みで、以下の OU 構成
    • 3.png
    • SandboxOU 配下には itkr_mem02(以降、アカウントA と表記)と itkr_mem03(以降、アカウントB と表記)が存在
  • AWS Control Tower は有効化していない
  • 宣言型ポリシーは有効化済み
    • 有効化手順はこちらを参照ください
  • もしも本番環境で試そうとしている方は、宣言型ポリシーのアカウントステータスレポートを生成することをおすすめします
    • 生成手順はこちらを参照ください

やってみた

宣言型ポリシーを作成する

AWS Organizations のサービスページより、「ポリシー」>「EC2 の宣言型ポリシー」>「ポリシーを作成」の順にクリックすると、以下のような入力画面が表示されます。
サービス属性は「スナップショットブロックパブリックアクセス」を選択します。
13-1.png

ポリシー名、ポリシーの説明を入力します。
スナップショットブロックパブリックアクセスの場合は、パブリックアクセスを ブロックする / ブロックしない のチェックボックスがあります。
今回は ブロックする で設定するため、チェックして進めます。

チェックすると、すべてのパブリック共有をブロック新規パブリック共有をブロック を選択できます。
試しに今回は すべてのパブリック共有をブロック を選択します。

最後にカスタムエラーメッセージを設定し、「ポリシーを作成」をクリックします。
※ カスタムエラーメッセージは日本語で設定したらエラーが出たので、英語で設定しましょう
4.png

作成が完了すると、利用可能なポリシー一覧に表示されます。
5.png

宣言型ポリシーをアタッチする

作成した宣言型ポリシーを SandboxOU にアタッチします。
14.png

7.png

作成した宣言ポリシーの詳細画面の「ターゲット」タブに、ポリシーをアタッチした SandboxOU が表示されていれば OK です。
8.png

宣言型ポリシーによる挙動の変化を確認する

■ 宣言型ポリシー アタッチ前

SandboxOU 配下にある アカウント A で適当に EBS スナップショットを作成したのち、アクセス許可を「パブリック」に変更してあります。
2-A.png

次に SandboxOU 配下にある アカウント B にて、スナップショット一覧より「パブリックスナップショット」を選択し、さらに アカウント A で作成したスナップショット ID(snap-08……)でフィルタします。
アカウント B からパブリックアクセスが許可されているアカウント A の EBS スナップショット情報を確認できる状態でした。
2-B.png

■ 宣言型ポリシー アタッチ後

SandboxOU 配下にある アカウント A で作成した EBS スナップショットは、パブリックアクセス許可の状態で存在しています。
9-A.png

次に SandboxOU 配下にある アカウント B にて、先ほどと同様にスナップショット一覧より「パブリックスナップショット」を選択し、さらに アカウント A で作成したスナップショット ID(snap-08……)でフィルタしてみます。
9-B.png
「一致するスナップショットが見つかりません。」と表示されました。
アカウント A の EBS スナップショットのパブリックアクセスがブロックされていることが確認できました。

■ 「新規パブリック共有をブロック」にした場合の挙動

スナップショットブロックパブリックアクセスのオプションを「新規パブリック共有をブロック」へ変更してみました。
15.png

現在パブリックに共有されているスナップショットは引き続きパブリックアクセス可能なため、アカウント B にて新しく EBS スナップショットを作成し、アクセス権限の変更を試してみました。
12.png
このように共有オプションの選択肢である「パブリック」がグレーアウトになっています。
パブリックを選択できないようにしてくれていて良いですね。

カスタムエラーメッセージを確認してみる

アカウント A にて CloudShell を起動して、以下コマンドを実行して確認します。

~ $ aws ec2 get-snapshot-block-public-access-state 
{
    "State": "block-new-sharing",
    "ManagedBy": "declarative-policy"
}
~ $ 
~ $ aws ec2 enable-snapshot-block-public-access --state block-all-sharing

An error occurred (DeclarativePolicyViolation) when calling the EnableSnapshotBlockPublicAccess operation: This functionality has been disabled by a Declarative Policy. Custom Message: This action was denied by the declarative policy: test-block-public-access-for-EBS-snapshots-dp
~ $

get-snapshot-block-public-access-state で、このアカウントの EBS スナップショットブロックパブリックアクセスのステータスを確認できます。
上記の実行結果より「宣言型ポリシーによって管理されていて、新規のパブリック共有をブロックしている」ということが分かります。

また、enable-snapshot-block-public-access --state block-all-sharing で、すべてのパブリック共有をブロックに変更しようとすると、エラーメッセージが表示されて実行できません。
「Custom Message:」以降の文章が、先ほど宣言型ポリシー作成時に入力したカスタムエラーメッセージになっていることが分かります。

さいごに

EBS スナップショットブロックパブリックアクセスの宣言型ポリシーの適用と挙動の変化を確認してみました。
一般的にはあえてパブリックに公開する必要はないと思うので、「すべてのパブリック共有をブロック」に設定してポリシーをアタッチしておけばいいと思いました。
設定する際は現状の AWS 環境を確認し、適切なオプションを選択いただければと思います。

この記事がどなたかのお役に立てれば幸いです。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。
サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.