AWS Backup で Vault Lock を使ったランサムウェア対策をやってみた

# はじめに

[前の記事](https://qiita.com/sugimount-a/items/bf3132e5c5cf3f458c28)では、S3 にデータを置いたときのランサムウェア対策例を紹介しました。S3 のオブジェクトロック機能を使うことで、既存ファイルの変更や削除の操作を防ぐことが出来、ランサムウェアによる暗号化といった悪意のある操作を予防できます。一言で表現すると、WORM(Write Once Read Many) を使ったランサムウェア対策を紹介しました。



今回は、より多くのサービスに対するバックアップをカバーする AWS Backup を活用したランサムウェア対策を見ていきます。AWS Backup は、複数のサービスをカバーしている、一元化したバックアップサービスです。そもそも、AWS Backup のバックアップ領域は、AWS 側で管理されている領域になるので、ランサムウェアがデータの暗号化を行うことは出来ない仕組みになっています。ただ、権限があればバックアップデータの削除が出来てしまうので、こういった悪意を持ったデータの操作を防ぐために、AWS Backup の Vault Lock の機能を利用して WORM の構成を実現できます。Root ユーザーなどの特権ユーザーでも、バックアップデータの削除が出来ない仕組みを構成できます。



また、ランサムウェアの対策について、AWS が公開している e-book 「Securing your AWS Cloud environment from ransomware」で包括的に説明されています。例えば、バックアップデータを WORM で保護する点に加えて、以下の点も紹介されています。このあたりも合わせて検討されると良いと思います。

https://aws.amazon.com/jp/blogs/news/securing-aws-cloud-environment-ransomware-new-ebook/

- Amazon VPC でセキュリティグループやネットワーク ACL を使って環境を分離する
- IAM で割り当てる権限を必要最低限に抑える
- AWS Backup を使ったバックアップや、AWS Elastic Disaster Recovery を使った復元
- 脆弱性管理のための Amazon Inspector や、パッチ適用のための AWS Systems Manager Path Manager の利用
- インシデントの早期発見である Amazon GuardDuty



それでは、AWS Backup を使った、Vault Lock の設定方法を見ていきましょう。



# Backup vault の作成

まず、AWS Backup に Vault と呼ばれる領域を作成します。Vault は、AWS アカウント内で暗号化されたストレージの場所であり、バックアップデータを管理できます。

Create Backup vault を押します。

![image-20220612125219019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/370af313-8887-5ded-a632-60257fe77f3c.png)



名前などを指定して、Create Backup vault を押します。

![image-20220612125334376.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/413af10b-9806-6c7d-d4f8-0983e5cb9bdf.png)



中身が空の Vault が作成できました

![image-20220612125421808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/f1a8898a-2578-0789-78c0-fcc5633e1bbb.png)



# Vault Lock を有効にする

新たに作成した Vault に対して、Vault Lock を有効化していきます。マネージメントコンソール上だと設定できないので、今回は AWS CLI で設定を進めていきます。

まず、設定前の状態を確認します。

```bash
aws backup describe-backup-vault \
		--backup-vault-name Vault_Lock_Test
```



Locked が false となっており、Vault Lock が無効です。

```bash
> aws backup describe-backup-vault \
      --backup-vault-name Vault_Lock_Test
{
    "BackupVaultName": "Vault_Lock_Test",
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:xxxxxxxxxxxx:backup-vault:Vault_Lock_Test",
    "EncryptionKeyArn": "arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/07fbe28d-899b-46ee-8346-6686161e87a6",
    "CreationDate": "2022-06-12T12:53:39.611000+09:00",
    "CreatorRequestId": "760f920e-c55c-4add-96b8-9fd5ca0d7d91",
    "NumberOfRecoveryPoints": 0,
    "Locked": false
}
```



Vault Lock を有効化するコマンドを発行します。以下のオプションを指定しています。

- changeable-for-days : 指定した期間 Vault Lock に関する設定を変更できる。この期間を超えると変更できなくなる。最小でも 3 以上を指定する必要がある。(これを 3 に指定したとしても、バックアップしたオブジェクトは即時データ保護される。)
- min-retention-days : データを保持する最短期間。これよりも短い期間のバックアップジョブは失敗する。指定しないことも可能。`30` を指定しているので、最低でも 30 日間データを保持するバックアップが必要
- max-retention-days : データを保持する最長期間。これよりも長い期間のバックアップジョブは失敗する。指定しないことも可能。`9999` を指定しているので、最大でも 9999 日間のデータを保持するバックアップが必要 (指定しないことの方が多そう)

```bash
aws backup put-backup-vault-lock-configuration \
        --backup-vault-name Vault_Lock_Test \
        --changeable-for-days 3 \
        --min-retention-days 30 \
        --max-retention-days 9999
```



設定されたことを確認します。`Locked` が `true` になっており、正常に設定されています。

```bash
> aws backup describe-backup-vault \
                  --backup-vault-name Vault_Lock_Test
{
    "BackupVaultName": "Vault_Lock_Test",
    "BackupVaultArn": "arn:aws:backup:ap-northeast-1:xxxxxxxxxxxx:backup-vault:Vault_Lock_Test",
    "EncryptionKeyArn": "arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/07fbe28d-899b-46ee-8346-6686161e87a6",
    "CreationDate": "2022-06-12T12:53:39.611000+09:00",
    "CreatorRequestId": "760f920e-c55c-4add-96b8-9fd5ca0d7d91",
    "NumberOfRecoveryPoints": 0,
    "Locked": true,
    "MinRetentionDays": 30,
    "MaxRetentionDays": 9999,
    "LockDate": "2022-06-15T13:26:17.387000+09:00"
}
```





# 手動バックアップ開始

これで、Vault Lock の設定が有効化されたので、動作確認してみましょう。AWS Backup 上で手動でバックアップを取得していきます。 (本番構成では、Backup Plan で自動化する方が多いと思います)

Create on-demand backup を押します

![image-20220612133948316.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/8fb6239e-1d01-546e-7366-b5096eb87877.png)



バックアップ対象、データ保持期間、バックアップ先の Vault を指定します。Vault Lock で最短30日と指定しているので、それよりも短い 1 日でバックアップをするとどうなるか確認してみましょう。

![image-20220612134056880.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/391efbb7-ec0f-6834-d7bc-cf3601cb7260.png)



バックアップに失敗しました！想定通りですね。

![image-20220612134141054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3870db9e-e980-20e9-6083-d56575961f1d.png)



今度は、30 日にしてバックアップを開始します。

![image-20220612134257053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/b115a24e-d5ac-2f0e-de91-4d5543486602.png)



一定時間後、バックアップが完了しました。

![image-20220612134952946.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/5cabfe62-2fab-e5de-de6e-7450918a479b.png)



# 保護されているか確認

バックアップデータが保護されているか確認するために、削除を試してみます。Vault Lock で保護されているので、失敗するはずです。

![image-20220612135047899.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/d80bf84b-3ba6-8390-1a1e-977d207c1ec7.png)



失敗しました！これで、Vault Lock による WORM モデルを実現することが出来ました。

![image-20220612135125578.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/e05b6cef-d694-3a13-4e7d-572da6d4039b.png)



# 付録 : Backup Plan の作成手順

自動バックアップのための、Backup Plan の作成手順を残しておきます

Create

![image-20220612132906148.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/280c797c-d008-b5cd-2bd3-47cfcda6d297.png)





適当に名前を指定

![image-20220612133425510.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/00ea9890-22ab-efa0-bdbc-185ab3f2b4f5.png)



バックアップ先の Vault を指定

![image-20220612133513273.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/3b7c4f83-bc04-fc97-ed85-52b783b75e83.png)



Create Plan

![image-20220612133545090.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/947d8170-b052-0ba7-4662-8dfce557c7af.png)



バックアップ対象をアサインする

![image-20220612133639700.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/9886866c-6d86-5eb5-39ca-46a02e48e83a.png)



バックアップ対象を選択してアサインする

![image-20220612133746645.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/2bcd283e-16a1-5e46-f3d3-4b15d0a5ce79.png)



# 検証を通じてわかったこと

- AWS Backup は、複数の AZ を利用してデータが複製されている。
  - 99.999999999% の耐久性を実現するように設計されている
  - https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/disaster-recovery-resiliency.html
- AWS Backup Vault Lock は、マネージメントコンソールから操作できない
  - AWS CLI や SDK などを通じて設定が必要
- AWS Backup がサポートしているリソース
  - https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html
  - Aurora
  - DocumentDB
  - DynamoDB
  - EBS
  - EC2
  - EFS
  - FSx
  - Neptune
  - RDS
  - S3
  - Storage Gateway
  - VMware virtual machines
- AWS Backup がサポートしているリソースに対する、機能のマトリクス表がある
  - https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html#features-by-resource
![image-20220612124308791.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1002774/a797c5a3-b029-ece6-d884-40fd6ee92c26.png)



# 参考 URL

AWS Document
https://docs.aws.amazon.com/aws-backup/latest/devguide/vault-lock.html

[アップデート] AWS Backupがボールトのロックをサポートしました
https://dev.classmethod.jp/articles/aws-backup-supports-vault-lock/