Amazon Machine Image(AMI)のブロックパブリックアクセスが2023/10/16からすべてのAWSリージョンでデフォルト有効化されます

ブロックパブリックアクセスって書き続けると、許可されているのか許可されていないのかわからなくなってますね。どっちなんだい!
2023.10.12

たぬき( @tanuki_tzp )です。

突然ですが、AWSからこんな通知を受け取った人はいませんか?

Amazon マシンイメージブロックパブリックアクセス (AMI BPA) は、2023 年 10 月 16 日からすべての AWS リージョンでデフォルトで有効になることをお知らせします。

こちらについて、Amazonマシンイメージブロックパブリックアクセスとはなんなのか、どんな内容の設定変更があるのか等をお知らせしていきたいと思います。

Amazonマシンイメージブロックパブリックアクセス(AMI BPA)とは

AMIのパブリックアクセスとは

Amazonマシンイメージ(AMI)とは、AWS上でインスタンスを起動する際に使用する、仮想マシンのテンプレートです。
AMIはEC2等の起動時に必ず選択する必要があり、一度は目にしたことがあるのではないでしょうか?

AMIは、不特定多数のユーザー向けに公開することができ、公開した状態をパブリックアクセス可能といいます。
AMIを不特定多数へ公開せず、作成したAWSアカウント内、および、共有設定した特定のアカウント・組織/OUのみで使用する場合はプライベートアクセスとなります。

今回は、AMIをパブリックアクセス可能にする操作を全リージョンに対してデフォルトでブロックする設定に切り替えるというお知らせになります。

対象になるパターン・ならないパターン

2023 年 10 月 16 日から、AWS は AMI BPA のデフォルト設定を有効に変更し始めます。AWS リージョンでデフォルト設定が適用されると、すべての新しい AWS アカウントで AMI BPA がデフォルトで有効になります。この設定は、2023 年 7 月 15 日以降 AMI をパブリックに共有していない既存のアカウントでも有効になります。この変更は、パブリック AMI を保有する既存の AWS アカウントには影響しません。

お知らせ文を噛み砕いていきましょう。
今回のブロックパブリックアクセス設定が自動で有効化される対象アカウントは下記になります。

  • 新規のAWSアカウント
  • パブリックアクセスをAMIに設定したことがないAWSアカウント
  • 2023/7/15以降にAMIをパブリックアクセス可能にしていないAWSアカウント

自動変更の対象外となるAWSアカウントは下記です。

  • パブリックアクセス可能なAMIを保有しているAWSアカウント

ユーザーはどんな対応をしたらいいのか

AMI をパブリックに共有する必要があるユースケースがある場合は、デフォルトが適用された後に作成された新しいアカウント、および 2023 年 7 月 15 日以降に AMI をパブリックに共有していない既存のアカウントの AMI BPA を無効にする必要があります。AMI の公開共有を必要とするユースケースが現在ない場合は、アクションは必要ありません。

お知らせ文を整理すると、

  • AMIをパブリックアクセス可能にしたい場合
    デフォルトでブロックパブリックアクセスが有効化された後(2023/10/6以降順次)に、ユーザー自身でブロックパブリックアクセスの無効化が必要となります。
    無効から有効、有効から無効のどちらの場合でも、設定変更後、反映されるまで5分ほど時間がかかるので気長に待っていただけたらと思います。

  • AMIを引き続きプライベートでのみ使用したい場合
    特にユーザーが取るべきアクションはありません。
    自己所有しているAMIが公開されていないかを確認したい場合は、本記事に手順を記載していますのでそちらをご参照ください。

となります。

ブロックパブリックアクセスを有効化した際のAMIへの影響について

本設定変更は既に作成されているAMIに対して、影響を及ぼしません。
前提として、AMI作成時にデフォルトでパブリックアクセス可能にはならないので、AMIを公開している場合はユーザーが明示的に設定しているものとなります。

ブロックパブリックアクセス有効化はAMIに対して、新たにパブリックアクセスを許可する操作に対する制限となります。

そのため、既にパブリックアクセス可能にされているAMIがある状態でブロックパブリックアクセスを有効化した場合でも、パブリックアクセスは無効化されず、公開されたままになることに注意してください。
また、特定のアカウント・組織/OUへのAMIの共有はプライベートアクセスで可能ですので、こちらのAMIにも影響はありません。
万が一、特定のアカウント等への共有にパブリックアクセス許可を使用してしまっている場合はこの期に設定を見直していただきたいです。

特定のアカウント・組織/OUへのAMIの共有が許可されている場合には、下記の欄にアカウントIDや組織/OUのARNが追加されていると思います。

パブリックアクセスが可能になっているAMIの確認方法

パブリックアクセスが可能になっているAMIの確認方法について、AWSコンソールからの確認方法とAWS CLIのコマンドを使用した確認方法の2パターンを記載します。
なお、確認例として表示しているAMIはブログ公開時に削除済みとなります。

特定のリージョンのみの確認で良い場合はコンソールからでの確認でも問題ありませんが、複数リージョンでAMIを作成している場合は全リージョン一括で確認できるAWS CLIからの確認をおすすめします。

コンソール

AMIが公開されているか確認したいリージョンのEC2を開き、ナビゲーションペインから"AMI"を開くか、検索ウィンドウで"AMI"を検索すると機能としてヒットします。

AMIの一覧を確認し、"可視性"がパブリックになっているAMIが、パブリックアクセス可能になっています。

AWS CLI

CloudShellを起動させ、下記のコマンドを打つと全リージョンに対してサクッと確認できます。
(CloudShellの使い方はこちら)

コマンド実行時に対象がない場合には何も出力されません。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "##### Enabled Public Access AMI in ${region}"
  aws ec2 describe-images --region ${region} --owners self \
  --filters "Name=is-public,Values=true" \
  --query "Images[].ImageId" --output text
done

実行結果例です。
パブリックアクセス可能にしていた"ami-0211cc6192298e827"が出力されています。

##### Enabled Public Access AMI in ap-south-1
##### Enabled Public Access AMI in eu-north-1
##### Enabled Public Access AMI in eu-west-3
##### Enabled Public Access AMI in eu-west-2
##### Enabled Public Access AMI in eu-west-1
##### Enabled Public Access AMI in ap-northeast-3
##### Enabled Public Access AMI in ap-northeast-2
##### Enabled Public Access AMI in ap-northeast-1
ami-0211cc6192298e827
##### Enabled Public Access AMI in ca-central-1
##### Enabled Public Access AMI in sa-east-1
##### Enabled Public Access AMI in ap-southeast-1
##### Enabled Public Access AMI in ap-southeast-2
##### Enabled Public Access AMI in eu-central-1
##### Enabled Public Access AMI in us-east-1
##### Enabled Public Access AMI in us-east-2
##### Enabled Public Access AMI in us-west-1
##### Enabled Public Access AMI in us-west-2

現在のブロックパブリックアクセス設定の確認方法

現在、AMIをパブリックアクセス可能に変更できる設定になっているかを確認します。
AMIの確認と同様で、複数リージョンの確認を一括で行いたい場合はAWS CLIを使用した確認をおすすめします。

コンソール

AMIが公開されているか確認したいリージョンのEC2を開き、ナビゲーションペインから"EC2ダッシュボード"を開きます。

アカウントの属性から、"Data protection and security"を開き、"Block public access for AMIs"を確認します。

Public accessのステータスが"New public sharing allowed"の場合は、AMIに新たにパブリック設定を行うことができるようになっています(設定自体ができる状態なので、新たに取得したAMIが勝手に公開されたりはしません)。
"New public sharing blocked"の場合は、AMIに新たにパブリックアクセスを許可する設定は付与できなくなっています。

AWS CLI

CloudShellを起動させ、下記のコマンドを打つと全リージョンに対して現在のステータスを確認します。
(CloudShellの使い方はこちら)

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
| while read region; do
  echo "##### AMI Public Access Block in ${region}"
  aws --region ${region} ec2 get-image-block-public-access-state --output text
done

実行結果例です。
今回は、東京リージョンのみ(ap-northeast-1)を手動でブロックパブリックアクセスを有効化していたので、"block-new-sharing"が出力されています。
ブロックパブリックアクセスのデフォルト有効化の前後比較をしたい場合、CLIで一括でログを取って比較するのが漏れがなく一番簡単な手法かと思われます。

##### AMI Public Access Block in ap-south-1
unblocked
##### AMI Public Access Block in eu-north-1
unblocked
##### AMI Public Access Block in eu-west-3
unblocked
##### AMI Public Access Block in eu-west-2
unblocked
##### AMI Public Access Block in eu-west-1
unblocked
##### AMI Public Access Block in ap-northeast-3
unblocked
##### AMI Public Access Block in ap-northeast-2
unblocked
##### AMI Public Access Block in ap-northeast-1
block-new-sharing
##### AMI Public Access Block in ca-central-1
unblocked
##### AMI Public Access Block in sa-east-1
unblocked
##### AMI Public Access Block in ap-southeast-1
unblocked
##### AMI Public Access Block in ap-southeast-2
unblocked
##### AMI Public Access Block in eu-central-1
unblocked
##### AMI Public Access Block in us-east-1
unblocked
##### AMI Public Access Block in us-east-2
unblocked
##### AMI Public Access Block in us-west-1
unblocked
##### AMI Public Access Block in us-west-2
unblocked

おまけ

  • パブリックアクセスを可能にしたAMIを作るときは、紐づくEBSのスナップショットが暗号化されていないこと
    パブリックアクセスを可能にしたAMIを作る際、EBSのスナップショットが暗号化されていると作成できませんでした。
    そのため、EBSの暗号化を無効化しようとしたのですが、EBSもセキュアに寄せるためにデフォルトの暗号化設定を有効化していたため、そちらも一旦無効にしてから元になるEC2インスタンスを立てる必要がありました。

おわりに

急に設定を変更しますといった通知が来たら慌ててしまいますが、AWSをよりセキュアにご利用いただくための変更になるため、ご理解いただけたらと思います。
EC2にはGlobal Viewがリリースされているので、Global Viewで検索できるリソースに自己所有しているAMIも追加されたら嬉しいな……と思いました(執筆時点で未対応でした)。

本記事が誰かのお役に立てれば幸いです。