【小ネタ】EBSスナップショットをパブリックに公開させないポリシー

2022.04.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

タイトル通り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デフォルト暗号化を有効にしておき、無効化されないように制限をかけることが望ましいです。あくまで保険として本ポリシーをご利用ください。

参考