[アップデート] EBS スナップショットの削除を保護する Snapshot Lock 機能が追加されました

EBS スナップショットが WORM (Write-Once-Read-Many) 準拠の形式で保存可能に
2023.11.16

こんにちは、AWS事業本部の平木です!

今回、EBS スナップショットを偶発的または悪意のある削除から保護する、
Snapshot Lock 機能が追加されたためご紹介します。

4行まとめ

忙しい人向けにスナップショットロックの機能をまとめました。

  • スナップショットロックが有効化されている最中はいかなるユーザーであっても削除はできない。
  • 2つのロックモードがあり、ガバナンスモードでは適切な権限があればいつでもロックを解除でき、コンプライアンスモードでは適切な権限があれば「クーリングオフ期間内」はいつでもロック解除できる。
  • (コンプライアンスモード)クーリングオフ期間終了後~ロック期限内にスナップショットを削除するには AWS アカウントを閉じる以外に方法は2023年11月16日現在時点では無い。
  • (コンプライアンスモード)WORM (Write-Once-Read-Many) 準拠の形式で保存可能。

詳細は続きをご確認ください。

Snapshot Lock (スナップショットロック)とは

EC2 インスタンスや RDS などでは削除保護といった削除をする際にすぐには削除できないように保護してくれる機能があります。

EBS スナップショットには削除保護機能はありませんでしたが、
今回のアップデートにより偶発的または悪意のある削除から保護してくれるスナップショットロックが追加されました。

スナップショットロックは、基本ロックする機能という点では変わらないですが、2つのロックモードがあり仕様が異なるためご紹介します。

ガバナンスモード

ガバナンスモードでは、適切な IAM 権限を持っているユーザーであればいつでもスナップショットロックを解除したり、ロックモードやロックの期間などを変更可能です。

ガバナンスモードを使用することで、特定の権限を持つユーザーのみにロックを解除する権限やロックモードを変更できるようにすることでガバナンス要件を満たせたり、ロックすることによる影響を確認することもできます。

ガバナンスモードには後述するコンプライアンスモードのようなクーリングオフ期間はありません。

コンプライアンスモード

コンプライアンスモードでは適切な IAM 権限をもっているユーザーであればクーリングオフ期間内のみスナップショットロックを解除したり、ロックモードやロック期間などの変更が可能です。

先ほどのガバナンスモードと異なる点としては、
スナップショットロックに関する変更ができる期間がクーリングオフ期間内のみに限定されるため、
クーリングオフ期間後からロックの有効期限内はいかなる権限を持っていても変更することはできません。

コンプライアンスモードを使用した EBS スナップショットを削除したい場合は、

  • スナップショットロックの有効期限が切れるのを待つ
  • AWS アカウントを閉じる

のみとなります。

コンプライアンスモードを使用することで、特権ユーザーを含む誰もがロック構成を変更できないようにできたり、
WORM (Write-Once-Read-Many) 準拠の形式で保存することができます。

ロックの期間について

ロック期間

スナップショットロックは、ロック期間を設定することができ、
ロック期間が経過した EBS スナップショットは、ロック解除され削除可能となります。

ロック期間の指定の仕方は2通りあり、日数を指定する方法と有効期限を指定する方法があります。

日数

日数を指定する場合は、指定した日数が経過するとロックが解除されます。
期間は、1日から36,500日 (100 年) の範囲で指定可能です。

有効期限

未来の有効期限を指定する場合は、YYYY/MM/DD の日にちおよびhh:mm で時間指定が可能です。
期間は、1日から36,500日 (100 年) の範囲で指定可能です。

クーリングオフ期間

スナップショットロックのコンプライアンスモードを使用する場合は、
クーリングオフ期間を設定できます。

クーリングオフ期間を設定することで、この期間内は適切な IAM 権限をもっているユーザーであればスナップショットロックを解除したり、ロックモードやロック期間などの変更が可能です。

クーリングオフ期間は、最小1時間~最大72時間の範囲で指定可能です。

また、クーリングオフ期間の設定はオプションとなっているので、
クーリングオフ期間を設けずすぐにコンプライアンスモードを適用したい場合は、
クーリングオフ期間を設定せずにロックの設定を有効にすることで可能です。

やってみた

実際にスナップショットロックを試してみました。

AWS マネジメントコンソール

EBS スナップショットのコンソール画面を開き、
スナップショットの設定タブを開くとスナップショットロックの項目が追加されていることが分かります。

「アクション > スナップショットの設定 > スナップショットロックの管理」を選択すると、
スナップショットロックの設定ができます。

①「スナップショットロックをロック」にチェックを入れるとロックの設定ができます。
② ロックモードを選択し、
③ 年 または 日 で指定できるロック期間を指定し、
④ 「ロックの設定を保存」で
スナップショットロックの設定が可能です。

今回は添付画像とは異なりますが、
ガバナンスモードでロック期間2023年11月17日11:57で設定してみました。

設定が完了すると、スナップショットの設定にてロックモードとロック期間を確認できます。

この状態で削除を試みると、ロックがかかっているというエラーが出て問題なく削除できないことが確認できました。

ガバナンスモードではいつでもロック構成を変更できるため、
適切な権限を持っていれば、「アクション > スナップショットの設定 > スナップショットロックの管理」画面で、
下記のように変更可能です。

続いてコンプライアンスモードでも試してみます。

同様の手順でスナップショットロックの設定画面へ進んで、
コンプライアンスモードを選択すると、ロック期間とクーリングオフ期間の設定ができます。

今回は、ロック期間1日、クーリングオフ期間1時間で設定してみます。

確認のチェックボックスにチェックを入れると設定可能です。

設定してみると下記のように、ロックモードを確認できます。

クーリングオフ期間内であれば、下記のように変更できます。

クーリングオフ期間を設定していない場合は、モードの切り替えはできず、ロック期間の延長のみ可能です。

以上がマネジメントコンソールで行う方法でした。

AWS CLI

同様の流れを AWS CLI でも行ってみました。

スナップショットロックの操作を AWS CLI で行うには、最新バージョンの AWS CLI にアップデートする必要があります。

それぞれ操作するコマンドを紹介します。

スナップショットロックを有効化するコマンド

コマンドの形式は、

aws ec2 lock-snapshot \
 --snapshot-id {スナップショットID} \
 --lock-mode governance \
 --lock-duration 1-36500_days または --expiration-date YYYY-MM-DDThh:mm:ss.sssZ

例えばガバナンスモードで2023年11月17日12:53を指定するコマンドの例は、

[cloudshell-user@ip-10-4-41-28 ~]$ aws ec2 lock-snapshot \
>  --snapshot-id snap-xxxxxxxxxxxxxxxxx \
>  --lock-mode governance \
>  --expiration-date 2023-11-17T12:53:00.000Z \
>  --region ap-northeast-1
{
    "SnapshotId": "snap-xxxxxxxxxxxxxxxxx",
    "LockState": "governance",
    "LockCreatedOn": "2023-11-16T03:51:39.406Z",
    "LockExpiresOn": "2023-11-17T12:53:00.000Z",
    "LockDurationStartTime": "2023-11-16T03:51:39.406Z"
}
[cloudshell-user@ip-10-4-41-28 ~]$

スナップショットロックを解除するコマンド

コマンドの形式は、

aws ec2 unlock-snapshot --snapshot-id {スナップショットID}

コマンドの例は、

[cloudshell-user@ip-10-4-41-28 ~]$ aws ec2 unlock-snapshot \
>  --snapshot-id snap-xxxxxxxxxxxxxxxxx \
>  --region ap-northeast-1
{
    "SnapshotId": "snap-xxxxxxxxxxxxxxxxx"
}
[cloudshell-user@ip-10-4-41-28 ~]$

スナップショットロックを参照するコマンド

コマンドの形式は、

aws ec2 describe-locked-snapshots --snapshot-ids {スナップショットID}

コマンドの例は、

[cloudshell-user@ip-10-4-41-28 ~]$ aws ec2 describe-locked-snapshots \
>  --snapshot-id snap-xxxxxxxxxxxxxxxxx \
>  --region ap-northeast-1
{
    "Snapshots": [
        {
            "OwnerId": "XXXXXXXXXXXX",
            "SnapshotId": "snap-xxxxxxxxxxxxxxxxx",
            "LockState": "compliance",
            "LockCreatedOn": "2023-11-16T03:56:39.808Z",
            "LockDurationStartTime": "2023-11-16T03:56:39.808Z",
            "LockExpiresOn": "2023-11-17T12:57:00.000Z"
        }
    ]
}
[cloudshell-user@ip-10-4-41-28 ~]$

参考

おわりに

今回は、EBS スナップショットに追加された偶発的または悪意のある削除から保護する Snapshot Lock 機能をご紹介しました。

スナップショットロックは、

  • 米国証券取引委員会 (SEC) 規則 17a-4(f),18a-6(e)
  • 米国商品先物取引委員会 (CFTC)1.31(c)-(d)
  • 米国の金融業規制機構規制 (FINRA) 4511(c)

の対象となる環境での使用について Cohasset Associates 社によって評価されています。

Cohasset Associates 社によるコンプライアンスアセスメントについては、
Amazon Elastic Block Store (EBS) COMPLIANCE ASSESSMENT - PDF
から確認できます。

先日、EBS スナップショットのブロックパブリックアクセスに関するアップデートがありました。
[アップデート] EBS スナップショットのパブリック共有をアカウントレベルでブロックする機能が追加されました。 | DevelopersIO
AWS 上のデータを安全に運用するためのガバナンスのアップデートが増えてきていますのでキャッチアップして有効活用いただければと思います!

この記事がどなたかの役に立てば嬉しいです。