[アップデート] Amazon EBSで ごみ箱(Recycle Bin)の保持ルールをロックできるようになりました

「削除されるリソースをごみ箱にとっておくための保持ルール」を誤って削除しないようにできるようになりました。

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

Amazon EBS のごみ箱機能で、「リージョンレベルの保持ルール」のロック機能がサポートされました。

意図せず保持ルール自体を編集・削除してしまう操作を防ぎやすくなりました。

何が変わったのか

イメージは以下です。

Amazon EBS ではごみ箱(Recycle Bin)という機能があり、EBS スナップショットもしくは AMI(インスタンスストア backed は除く)を削除しても一定期間保持してくれます。

ごみ箱機能自体は 2021年11月にリリースされ、2022年2月に AMI もサポートされています。

ごみ箱機能を使用するためには保持ルール(retention rule)の作成が必要で、そこでは主に以下の定義を行います。

  • 保持するリソースタイプ(EBS スナップショットか AMI か)
  • 保持する対象の指定(タグで指定するかリージョン内のすべてのリソースか)
  • 保持期間(1日〜365日)

保持する対象の指定の仕方により、タグレベルの保持ルール・リージョンレベルの保持ルールという呼ばれ方をします。今回のアップデートは後者のリージョンレベルの保持ルールが対象です。

新たに登場した保持ルールのロック設定を行うことでルール自体の編集もしくは削除を防ぐことができます。ロックは即時に解除できるわけではなく、解除を試みてから 7~30日間の遅延期間(原文は delay period ですがいい訳が思いつかない……)が発生します。

このロックによって誤ってルールの変更、削除を行うことを防げますし、悪意を持ってそれらの操作を試みるユーザーがいたとしても遅延期間を設けられます。CloudTrail などで「ロックの解除を試みた」というイベントを通知するようにしておけば検出もできますね。

やってみた

保持ルールを作成し、ロックをかけてみます。

ごみ箱コンソールから保持ルールの作成を試みます。「すべてのリソースに適用」にチェックを入れることでリージョンレベルの保持ルールとなり、ロックの設定ができます。

遅延期間に最小の 7 日を指定し、ロックの内容について承諾のチェックをつけた上で作成を試みます。

rbin_retain_rule

作成されましたが……「ロックを解除済み」と表示されています。

Recycle_Bin_Console_retain_rule_rock

おそらく現時点での日本語コンソールのバグで、英語に切り替えるときちんとロックされていることが分かります。(再読み込みしたからステータスが変わった、とかでなく日本語に戻すとまた「ロックを解除済み」と表示されていました。)

Recycle_Bin_Console_retain_rule_rocked_english

念のため AWS CLI でも確認するとロック済みとなっていました。

% aws --version
aws-cli/2.9.1 Python/3.9.11 Darwin/22.1.0 exe/x86_64 prompt/off

% aws rbin get-rule --identifier aa3VMP0dRna
{
    "Identifier": "aa3VMP0dRna",
    "Description": "",
    "ResourceType": "EBS_SNAPSHOT",
    "RetentionPeriod": {
        "RetentionPeriodValue": 1,
        "RetentionPeriodUnit": "DAYS"
    },
    "ResourceTags": [],
    "Status": "available",
    "LockConfiguration": {
        "UnlockDelay": {
            "UnlockDelayValue": 7,
            "UnlockDelayUnit": "DAYS"
        }
    },
    "LockState": "locked"
}

この状態の保持ルールでは編集も削除も選択できず、ロックの編集だけを受け付ける状態です。

Recycle_Bin_Console_action

保持ルールのロックの解除を試みます。

Recycle_Bin_Console_unlock

確認画面で「ロックを解除」と入力し解除を行います。

Recycle_Bin_Console_unlock_retain_rule

「ロックの解除の保留中」のステータスになりました。指定した遅延期間 7 日が経過するまで、引き続き編集も削除もできない状態です。

Recycle_Bin_Console_rock_stay

AWS CLI で確認するとこんな感じ。

% aws rbin get-rule --identifier aa3VMP0dRna
{
    "Identifier": "aa3VMP0dRna",
    "Description": "",
    "ResourceType": "EBS_SNAPSHOT",
    "RetentionPeriod": {
        "RetentionPeriodValue": 1,
        "RetentionPeriodUnit": "DAYS"
    },
    "ResourceTags": [],
    "Status": "available",
    "LockConfiguration": {
        "UnlockDelay": {
            "UnlockDelayValue": 7,
            "UnlockDelayUnit": "DAYS"
        }
    },
    "LockState": "pending_unlock",
    "LockEndTime": "2022-12-01T22:38:24.688000+09:00"
}

削除を試みてもエラーが発生します。

% aws rbin delete-rule --identifier aa3VMP0dRna

An error occurred (ConflictException) when calling the DeleteRule operation: Cannot delete Recycle Bin rule aa3VMP0dRna because it is locked.

Cannot delete Recycle Bin rule aa3VMP0dRna because it is locked.

ちなみに「ロックの解除の保留中」のステータスでも再度ロックをかけることができます。

Recycle_Bin_Console_lock_pending

ふたたび解除を試みる際には遅延期間を 1 からやり直す必要があります。

終わりに

Amazon EBS のごみ箱機能で保持ルールにロックをかけられるようになった、というアップデートでした。

  • リージョンレベルの保持ルールのみロックできる
  • ロック中は編集も削除も受け付けない
  • ロック解除を試みてから 7~30 日の遅延期間を待機する必要がある
  • ロック解除の保留中に再度ロックできる

誤操作を防げるオプションが増えるのは嬉しいですね。また、高いコンプライアンスを求められる環境ではロックをかけることで監査に対応しやすくなる、ということもありそうです。

日本語のコンソールの表記誤りはちょっと残念ですが、フィードバックを送ったのでそのうち修正されると信じています。

試されたい方の参考になれば幸いです。

以上、 チバユキ (@batchicchi) がお送りしました。

参考