NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

AWSアカウントを管理する上で有効化しておきたいAMI・EBSスナップショットのブロックパブリックアクセス

はじめに

こんにちは。大林です。今回のブログは、AWSアカウントを管理する上で確認しておきたいAMI・EBSスナップショットのブロックパブリックアクセスというテーマで書いていきたいと思います。
今回のブログで紹介する2つのブロックパブリックアクセスはどちらも意図しないパブリック公開を防ぐための設定なので、AWSアカウントを管理する上で重要なポイントになってきます。まだ設定していないブロックパブリックアクセスがある場合は、本ブログを参考に有効化してみてください。

AMI ブロックパブリックアクセスの概要

AMI ブロックパブリックアクセスとは、AWSアカウントがAWSリージョン内でAMIをパブリックに共有することを禁止する設定のことです。この設定により、操作ミスで意図しないAMIのパブリック公開を防ぐことができます。この設定は、2023年10月16日からデフォルトで有効化されていますが、2023年7月15日以降にAMIをパブリック共有していた場合はデフォルトで有効化されません。
AMIをパブリックに共有してしまうと、全世界のAWSアカウントから参照されてしまうため、原則AMIはパブリックに公開しない方がよいです。AMIを共有する場合は、アカウントIDまたはOUを指定して共有するようにしましょう。

AMI ブロックパブリックアクセスの設定状況の確認と有効化

マネジメントコンソールでの設定状況の確認と有効化

マネジメントコンソールでAMI ブロックパブリックアクセスの設定状況を確認するには、まずはEC2 ダッシュボードから「データ保護とセキュリティ」のページを開きます。

AMI ブロックパブリックアクセスが有効化されていないと、以下のように「ユーザーはこのリージョンで AMI を公開共有できます。」と表示されています。

AMI ブロックパブリックアクセスを有効化するには、上記の画面で「管理」ページを開いて、「新しい公開共有をブロック」にチェックを入れて更新ボタンをクリックします。

私が検証した際は、5分程かかってから以下のようにAMI ブロックパブリックアクセスの設定有効化が反映されていました。

CLIでの設定状況の確認と有効化

以下のコマンドを実行すると、AMI ブロックパブリックアクセスの設定状況を確認できます。

aws ec2 get-image-block-public-access-state --region 調査対象リージョン

レスポンスの例:

{
    "ImageBlockPublicAccessState": "unblocked"
}

docs.aws.amazon.com

レスポンスの「ImageBlockPublicAccessState」の値が「unblocked」であればブロックパブリックアクセスは有効化されていません。 一方で、「ImageBlockPublicAccessState」の値が「block-new-sharing」であればブロックパブリックアクセスは有効化されています。


以下のコマンドを実行することでAMI ブロックパブリックアクセスを有効化できます。

aws ec2 enable-image-block-public-access \
    --image-block-public-access-state block-new-sharing \
    --region 有効化対象リージョン

以下のレスポンスが返ってくれば、AMI ブロックパブリックアクセスが正常に有効化されています。

{ 
    "ImageBlockPublicAccessState": "block-new-sharing"
}

docs.aws.amazon.com

EBSスナップショット ブロックパブリックアクセスの概要

EBSスナップショット ブロックパブリックアクセスは、AMI ブロックパブリックアクセスと同じようにAWSアカウントのリージョン内でパブリック共有を禁止する設定のことです。
EBSスナップショット ブロックパブリックアクセスは、AMI ブロックパブリックアクセスと異なり、以下の2つのモードが用意されています。

・すべての共有をブロック(block-all-sharing)
既存のパブリックに共有されているスナップショットを含むすべてのスナップショットのパブリック共有を禁止する設定です。この設定を有効化することで、既存のパブリックに共有されているスナップショットはプライベートに移行されます。

・新しい共有をブロック(block-new-sharing)
新しく共有されたスナップショットのみパブリック共有を禁止する設定です。そのため、既存のパブリックに共有しているスナップショットはパブリックに共有している状態のままになります。

AMIと同様にEBSスナップショットを共有する際は、パブリックに共有せずに共有するアカウントを指定して共有するようにしましょう。

EBSスナップショット ブロックパブリックアクセスの設定状況の確認と有効化

マネジメントコンソールでの設定状況の確認と有効化

マネジメントコンソールでEBSスナップショット ブロックパブリックアクセスの設定状況を確認するには、まずはEC2 ダッシュボードから「データ保護とセキュリティ」のページを開きます。

EBSスナップショット ブロックパブリックアクセスが有効化されていないと、以下のように「ユーザーはこのリージョンでスナップショットを公開共有できます。」と表示されています。

EBSスナップショット ブロックパブリックアクセスを有効化するには、上記の画面で「管理」ページを開いて、「パブリックアクセスをブロック」にチェックを入れます。 ケースに応じて、「すべての公開共有をブロック」または「新しい公開共有をブロック」を選択して、更新ボタンをクリックします。

今回の検証では「すべての公開共有をブロック」を選択したため、ステータスが「すべての共有がブロックされました」になっていることを確認できます。

CLIでの設定状況の確認と有効化

以下のコマンドを実行すると、AMI ブロックパブリックアクセスの設定状況を確認できます。

aws ec2 get-snapshot-block-public-access-state --region 調査対象リージョン

レスポンス例:

{
    "State": "block-all-sharing"
}

レスポンスのStateの値が「unblocked」であればブロックパブリックアクセスは有効化されておらず、「block-all-sharing」であればすべてのパブリック共有が禁止されている状態、「block-new-sharing」であれば新しいスナップショットのパブリック共有が禁止されている状態です。

docs.aws.amazon.com

以下のコマンドを実行することでEBSスナップショット ブロックパブリックアクセスを有効化できます。
以下はすべてのパブリック共有を禁止する設定です。

aws ec2 enable-snapshot-block-public-access \
    --state block-all-sharing \
    --region 有効化対象リージョン

以下のレスポンスが返ってくれば、すべてのパブリック共有を禁止することを意図したEBSスナップショット ブロックパブリックアクセスが正常に有効化されます。

{
    "State": "block-all-sharing"
}

docs.aws.amazon.com

おわりに

今回のブログでは、AMIとEBSスナップショットのブロックパブリックアクセスについて紹介しました。これらの設定を有効化しておくことで、意図しないパブリック公開を防げるため重大な事故の発生を抑えられます。
今回のブログでは紹介しませんでしたが、S3にもブロックパブリックアクセスがあります。ただ、S3の場合はアカウント単位でのブロックパブリックアクセスはありません。もしかたら今後のアップデートで実現されるかもしれませんね!
次のAWSアップデートが楽しみです!

執筆者大林 優斗

クラウドエンジニア
AWSを活用したシステムの設計と開発をやらせていただいています。


執筆記事一覧:https://tech.nri-net.com/archive/author/y-obayashi