Auroraの保管時の暗号化を整理してみた

# 背景・目的
Aurora の保管時の暗号化について検討する機会があったので整理します。

# まとめ
下記に特徴を整理します。

|特徴 |説明|
|:--|:--|
|　暗号化の対象|・DBクラスタ<BR>・自動バックアップ<BR>・リードレプリカ<BR>・スナップショット<BR>・ログ|
| アルゴリズム|AES256|
| 暗号化キー|KMSを使用する。<BR>KMSでは、マネージドキー、またはカスタマーマネージドキーが使用できる|
|インスタンス間の転送中の暗号化| 一部のインスタンスのみで対応可能<BR>認証暗号化（AEA）アルゴリズムを使用する|


# 概要
[Amazon Aurora リソースの暗号化](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Overview.Encryption.html)を元に整理します。

> Amazon Aurora は Amazon Aurora DB クラスターを暗号化できます。保管時に暗号化されるデータには、DB クラスター、自動バックアップ、リードレプリカ、スナップショット用の基本的なストレージが含まれます。

- 対象は下記の通り
    - DBクラスタ
    - 自動バックアップ
    - リードレプリカ
    - スナップショット

>Amazon Aurora の暗号化された DB クラスターでは、業界スタンダードの AES-256 暗号化アルゴリズムを使用して、Amazon Aurora DB クラスターをホストしているデータをサーバーで暗号化します。データが暗号化されると、Amazon Aurora はパフォーマンスの影響を最小限に抑えながら、データへのアクセスと復号の認証を透過的に処理します。暗号化を使用するために、データベースのクライアントアプリケーションを変更する必要はありません。

- 暗号化アルゴリズムは、AES256
- サーバサイドで暗号化
- データへのアクセスと複合の認証を透過的に行う

## Amazon Aurora リソースの暗号化の概要
> Amazon Aurora の暗号化された DB クラスターは、基になるストレージへの不正アクセスからデータを保護することによって、データ保護の追加レイヤーを提供します。Amazon Aurora の暗号化を使用して、クラウドにデプロイされるアプリケーションのデータ保護を強化することや、保管時のデータ暗号化に関するコンプライアンスの要件を達成することができます。

> Amazon Aurora の暗号化された DB クラスターでは、すべての DB インスタンス、ログ、バックアップ、スナップショットが暗号化されます。Amazon Aurora で暗号化されたクラスターのリードレプリカも暗号化できます。Amazon Aurora は、AWS KMS key を使用して、これらのリソースを暗号化します。KMS キーの詳細については、「AWS Key Management Service デベロッパーガイド」の「AWS KMS keys」と「AWS KMS key 管理」を参照してください。DB クラスター内の各 DB インスタンスは、DB クラスターと同じ KMS キーを使用して暗号化されます。暗号化されたスナップショットをコピーする場合、ソーススナップショットの暗号化に使用した KMS キーとは異なる KMS キーを使用して、ターゲットスナップショットを暗号化できます。

- KMSを使用してリソースを暗号化する
- 暗号化されたスナップショットをコピーする場合、ソースのスナップショットの暗号化に使用したキーと異なるKMSキーを使用してターゲットスナップショットを暗号化できる

> AWS マネージドキー を使用することも、カスタマーマネージドキーを作成することもできます。Amazon Aurora リソースを暗号化および復号するために使用する カスタマーマネージドキーを管理するには、AWS Key Management Service (AWS KMS) を使用します。AWS KMS は、セキュアで可用性の高いハードウェアとソフトウェアを組み合わせて、クラウド向けにスケールされたキー管理システムを提供します。AWS KMS を使用して、カスタマーマネージドキーを作成し、このカスタマーマネージドキーの使用方法を制御するポリシーを定義できます。AWS KMS は CloudTrail をサポートしているため、KMS キーの使用を監査して、カスタマーマネージドキーが適切に使用されていることを確認できます。カスタマーマネージドキーは、Amazon Aurora およびサポートされている AWS のサービス (Amazon S3、Amazon EBS、Amazon Redshift など) で使用できます。AWS KMS と統合しているサービスのリストについては、「AWS サービス統合」を参照ください。

- KMSでは、マネージドキー、またはカスタマーマネージドキーを使用できる


## Amazon Aurora DB クラスターの暗号化
> 暗号化された DB クラスターを作成するときは、カスタマーマネージドキーまたは Amazon Aurora の AWS マネージドキー を選択して、DB クラスターを暗号化できます。カスタマーマネージドキーのキー識別子を指定しない場合、Amazon Aurora は新しい DB クラスターに AWS マネージドキー を使用します。Amazon Aurora は、Amazon Aurora 用の AWS マネージドキー を AWS アカウントに作成します。AWS アカウントには、AWS リージョンごとに Amazon Aurora の AWS マネージドキー が別々にあります。

- AWSマネージドキーは、リージョンごとに別々に持つ

> 暗号化された DB クラスターを作成したら、その DB クラスターで使用されている KMS キーを変更することはできません。したがって、暗号化された DB クラスターを作成する前に、KMS キーの要件を必ず確認してください。

- 暗号化されたDBクラスターを作成したら、DBクラスターで使用されているKMSキーは変更できない

> 重要
Amazon Aurora が DB クラスター用の KMS キーにアクセスできなくなる場合があります。例えば、Aurora は、KMS キーが有効にならない場合、または Aurora の KMS キーへのアクセス権が失効した場合に、アクセスできなくなります。このような場合、暗号化された DB クラスターは inaccessible-encryption-credentials-recoverable 状態になります。DB クラスターのこの状態は 7 日間維持されます。その間に DB クラスターを起動すると、RDS は KMS キーがアクティブかどうかをチェックし、アクティブな場合は DB クラスターを復元します。AWS CLI コマンド start-db-cluster または AWS Management Console を使用して DB クラスターを再起動します。
> DB クラスターが復元されない場合、終了状態 inaccessible-encryption-credentials になります。この場合、DB クラスターはバックアップからのみ復元できます。データベース内の暗号化されたデータの消失を防ぐために、暗号化された DB インスタンスのバックアップは常に有効にしておくことを強くお勧めします。

- AuroraがKMSキーにアクセスできなくなった場合
    - アクセス不能になる
    - 7日間の間に、アクティブになるとDBクラスターは再起動される
    - 復元されない場合、終了状態になる。この場合、バックアップからのみ復元できる
        - 暗号化されたDBにアクティブにインスタンスは、常に有効にすることを推奨する

## 転送中の暗号化
> AWS は、すべてのタイプの EC2 インスタンス間において安全でプライベートな接続を提供します。さらに、一部のインスタンスタイプでは、基盤となる Nitro System ハードウェアのオフロード機能を使用して、インスタンス間の転送中のトラフィックを自動的に暗号化します。この暗号化では、256 ビットの暗号化による関連データによる認証暗号化 (AEAD) アルゴリズムを使用します。ネットワークのパフォーマンスには影響しません。インスタンス間でこの追加の転送中トラフィック暗号化をサポートするには、次の要件を満たす必要があります。

- 一部のインスタンスでは、インスタンス間の転送中のトラフィックを自動的に暗号化する
    - 汎用: M6i、M6id、M6in、M6idn、 M7g
    - メモリ最適化: R6i、R6id、R6in、R6idn、R7g、X2idn、X2iedn、X2iezn
- 256ビットの暗号化による認証暗号化（AEAD）アルゴリズムを使用する
- 各インスタンスは同じ AWS リージョン に配置する
- 各インスタンスは同じ VPC 内、あるいはピア接続された VPC 内にあり、トラフィックは仮想ネットワークのデバイスもしくはサービス (ロードバランサーや Transit Gateway など) を通過しないもの

## Amazon Aurora の暗号化された DB クラスターの制限事項
> Amazon Aurora の暗号化された DB クラスターには、以下の制限事項があります。
> - 暗号化された DB クラスターの暗号化をオフにすることはできません。
> - 暗号化されていない DB クラスターの暗号化されたスナップショットを作成することはできません。
> - 暗号化された DB クラスターのスナップショットは、DB クラスターと同じ KMS キーを使用して暗号化する必要があります。
> - 暗号化されていない DB クラスターを暗号化された DB クラスターに変換することはできません。ただし、暗号化されていないスナップショットを暗号化された Aurora DB クラスターに復元することはできます。それを行うには、暗号化されていないスナップショットから復元するときに、KMS キーを指定します。
> - 暗号化されていない Aurora DB クラスターから、暗号化された Aurora レプリカを作成することはできません。暗号化された Aurora DB クラスターから、暗号化されていない Aurora レプリカを作成することはできません。
> - ある AWS リージョンから別のリージョンに暗号化されたスナップショットをコピーするには、送信先 AWS リージョンの KMS キーを指定する必要があります。これは、KMS キーが、作成される AWS リージョンに固有のものであるためです。
> - ソーススナップショットはコピープロセス全体で暗号化されたままになります。Amazon Auroraは、コピー処理中にエンベロープ暗号化を使用してデータを保護します。エンベロープ暗号化の仕組みの詳細については、AWS Key Management Service デベロッパーガイドの「エンベロープ暗号化」を参照してください。
> - 暗号化された DB クラスターの暗号化を解除することはできません。ただし、暗号化された DB クラスターからデータをエクスポートし、暗号化されていない DB クラスターにデータをインポートすることはできます。

- 一度暗号化にすると、オフにできない
- 暗号化されていないDBにアクティブにクラスタは、スナップショットを作成できない
- 暗号化されたDBクラスタのスナップショットは、DBクラスタと同じKMSを利用する
- 暗号化されていないDBクラスタを暗号化されたDBクラスタに変換できない
    - 暗号化されてないスナップショットを暗号化されたAurora DBに復元は可能
    - KMSキーを使用する
- 暗号化されてないAuroraと、暗号化されたAurora間でレプリカを作成できない
- 異なるリージョンに暗号化されたスナップショットをコピーするには、送信先リージョンのKMSキーを指定する
    - KMSキーが作成されるAWSリージョン固有であるため
- ソーススナップショットには、コピープロセス全体で暗号化されたままになる
- 暗号化されたDBにクラスタの暗号化を解除できない
    - データをエクスポート氏、暗号化されていないDBクラスタにインポートは可能

# 考察
今回、Auroraのデータ保管時の暗号化について整理しました。
Auroraでは、KMSによる暗号化が行われ、AWS管理の鍵と顧客管理の鍵の二種類から選択ができます。
また、下記の制約事項があるので注意が必要です。
- 暗号化は一度有効化すると戻すことができない
- 暗号化されているクラスタと、暗号化されていないクラスタ間で
    - スナップショットのコピーのコピーができない
    - レプリカができない

今後は、KMSの顧客管理の鍵とAWS管理の鍵について整理してみたいと思います。

# 参考
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Encryption.html