タイトル通りEBSスナップショットをパブリック公開させないポリシーを書いてみました。
EBSスナップショットをパブリック公開させないポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyActionsPublicEbsSnapshotSharing",
"Effect": "Deny",
"Action": [
"ec2:ModifySnapshotAttribute"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:Add/group": "all"
}
}
}
]
}
アクションとしてModifySnapshotAttribute
を拒否しています。このアクションはスナップショットの権限設定を追加、削除するもので、特定のアカウントに共有する際も同じアクションが使われます。
今回拒否したいのは「パブリックに公開する」スナップショットのため、一部条件を追加します。
Condition
の条件キーとしてec2:Add/group
を使用しています。これはスナップショットに追加されるグループをフィルタリングするための条件キーです。
Amazon EC2 のアクション、リソース、および条件キー - サービス認証リファレンス
この条件キーの値がall
(パブリック)のみを条件とすることで、EBSスナップショットのパブリック公開を拒否できます。
CreateVolumePermission-Amazon Elastic Compute Cloud
試してみる
上記のポリシーをSCPとして対象のアカウントにアタッチ、AdministratorAccessの権限を持ったIAMロールで試してみます。
適当なスナップショットを選択し、アクセス権限の変更からパブリックを選択して保存してみます。
すると、以下のようにエラーメッセージが表示され拒否されました。
アカウントIDを指定して共有してみると、問題なく保存できました。
おわりに
EBSスナップショットをパブリック公開を拒否するポリシーを作成してみました。SCPとして利用すれば予防的ガードレールとして活用できます。
そもそもEBSスナップショットが暗号化されていればパブリックへの公開はできません。できればEBSデフォルト暗号化を有効にしておき、無効化されないように制限をかけることが望ましいです。あくまで保険として本ポリシーをご利用ください。