SCPでAMIブロックパブリックアクセスの無効化を拒否してみた

2023.09.14

みなさんこんにちは、杉金です。
AMIのパブリック共有を禁止する設定が発表されました。ぜひ有効化にしたい設定ですが、誰かがこの設定を解除しないよう、設定無効化の操作を禁止するSCPを作ってみました。AMIブロックパブリックアクセス自体のアップデート紹介は以下のブログを参照ください。

やってみる

適用するSCPは以下です。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "Statement1",
			"Effect": "Deny",
			"Action": [
				"ec2:DisableImageBlockPublicAccess"
			],
			"Resource": "*"
		}
	]
}

禁止するアクションは以下です。DisableImageBlockPublicAccessを指定することで、設定の無効化を拒否します。

SCPポリシーを編集していると以下のエラーが出ます。おそらくアップデートしたばかりで、該当アクションがポリシーのリストとして反映されていなさそうです。 設定自体は可能ですので、そのまま設定を保存します。

設定後の動作確認をするために、ポリシー適用先となるAWSアカウントのマネジメントコンソールに接続します。あらかじめ、EC2の設定からブロックパブリックアクセスの設定を有効にします。「Data protection and security」→「Block public access for AMI」の状態を確認すると New public sharing blocked となっていることを確認します。
この状態から無効化の操作が拒否されるかを確認します。

「Manage」ボタンを選択すると、すでにチェックがついた状態になっていますのでチェックを外します。

チェックを外したら、「Update」を選択します。

設定確認のメッセージが表示されますので、confirmと入力して「Allow public sharing」を選択します。

ここで画面が遷移して、操作が拒否されたメッセージが表示されます。

SCPによる操作の拒否が確認できました。これで誤った無効化を防ぐことができます。

最後に

今回のAMIブロックパブリックアクセス機能ですが、基本的にAMIをパブリックで共有することは無いため、AWSアカウントを作成した後の初期設定で機能を有効化するとよいでしょう。ワークロードのOUに対して今回のSCPを適用しておくことで、誤って設定を解除することを防げます。

参考資料