

# Amazon RDS リソースの暗号化
<a name="Overview.Encryption"></a>

Amazon RDS は、Amazon RDS DB インスタンスを暗号化することができます。保管中に暗号化されるデータには、DB インスタンス、ログ、自動バックアップ、リードレプリカ、スナップショットの基本的なストレージが含まれます。

Amazon RDS の暗号化された DB インスタンスでは、Amazon RDS DB インスタンスをホストしているサーバーでデータを暗号化するために、業界標準の AES-256 暗号化アルゴリズムを使用します。

データが暗号化されると、Amazon RDS はパフォーマンスの影響を最小限に抑えながら、データへのアクセスと復号の認証を透過的に処理します。暗号化を使用するために、データベースのクライアントアプリケーションを変更する必要はありません。

**注記**  
暗号化された/されていない DB インスタンスのでは、AWS リージョン間でレプリケートする場合でも、ソースとリードレプリカ間で送信されるデータは暗号化されます。

**Topics**
+ [

## Amazon RDS リソースの暗号化の概要
](#Overview.Encryption.Overview)
+ [

## DB インスタンスの暗号化
](#Overview.Encryption.Enabling)
+ [

## DB インスタンスの暗号化が有効になっているかの判別
](#Overview.Encryption.Determining)
+ [

## Amazon RDS の暗号化の可用性
](#Overview.Encryption.Availability)
+ [

## 転送中の暗号化
](#Overview.Encryption.InTransit)
+ [

## Amazon RDS の暗号化された DB インスタンスの制限事項
](#Overview.Encryption.Limitations)

## Amazon RDS リソースの暗号化の概要
<a name="Overview.Encryption.Overview"></a>

Amazon RDS の暗号化された DB インスタンスは、基になるストレージへの不正アクセスからデータを保護することによって、データ保護の追加レイヤーを提供します。Amazon RDS の暗号化を使用して、クラウドにデプロイされるアプリケーションのデータ保護を強化することや、保管時のデータ暗号化に関するコンプライアンスの要件を達成することができます。 Amazon RDS の暗号化された DB インスタンスでは、すべてのログ、バックアップ、スナップショットが暗号化されます。暗号化の可用性と制限の詳細については、「[Amazon RDS の暗号化の可用性](#Overview.Encryption.Availability)」および「[Amazon RDS の暗号化された DB インスタンスの制限事項](#Overview.Encryption.Limitations)」を参照してください。

Amazon RDS は、これらのリソースを暗号化するために AWS Key Management Service キーを使用します。AWS KMS は、安全で可用性の高いハードウェアとソフトウェアを組み合わせて、クラウド向けに拡張されたキー管理システムを提供します。AWS マネージドキー を使用することも、カスタマーマネージドキーを作成することもできます。

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

Amazon RDS リソースの暗号化と復号に使用するカスタマーマネージドキーを管理するには、[AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/).を使用します。

AWS KMS を使用して、カスタマーマネージドキーを作成し、これらのカスタマーマネージドキーの使用を制御するポリシーを定義できます。AWS KMS は CloudTrail をサポートしているため、KMS キーの使用状況を監査して、カスタマーマネージドキーが適切に使用されていることを確認できます。カスタマーマネージドキーは、Amazon Aurora およびサポートされている AWS のサービス (Amazon S3、Amazon EBS、Amazon Redshift など) で使用できます。AWS KMS と統合しているサービスのリストについては、「[AWS サービス統合](https://aws.amazon.com/kms/features/#AWS_Service_Integration)」を参照ください。KMS キーの使用に関する考慮事項: 
+ 暗号化された DB インスタンスを作成したら、その DB インスタンスで使用されている KMS キーを変更することはできません。したがって、暗号化された DB インスタンスを作成する前に、KMS キーの要件を必ず確認してください。

  DB インスタンスの暗号化キーを変更する必要がある場合は、インスタンスの手動スナップショットを作成し、スナップショットのコピー中に暗号化を有効にします。詳細については、[re:Post 情報センターの記事](https://repost.aws/knowledge-center/update-encryption-key-rds)を参照してください。
+ 暗号化されたスナップショットをコピーする場合、ソーススナップショットの暗号化に使用した KMS キーとは異なる KMS キーを使用して、ターゲットスナップショットを暗号化できます。
+ また、Amazon RDS の暗号化されたインスタンスのリードレプリカとプライマリ DB インスタンスの両方が同じ AWS リージョンにある場合、リードレプリカはプライマリ DB インスタンスと同じ KMS キーを使用して暗号化する必要があります。
+ プライマリ DB インスタンスとリードレプリカが異なる AWS リージョンにある場合には、その AWS リージョンの KMS キー を使用してリードレプリカを暗号化します。
+ スナップショットを共有する AWS アカウントの AWS マネージドキー を使って暗号化されたスナップショットを共有することはできません。
+ Amazon RDS は、Transparent Data Encryption (TDE) による Oracle または SQL Server の DB インスタンスの暗号化もサポートします。TDE は、RDS 保管時の暗号化とともに使用できますが、TDE と RDS 保管時の暗号化を同時に使用すると、データベースのパフォーマンスに若干影響する可能性があります。個々の暗号化方式ごとに異なるキーを管理する必要があります。TDE の詳細については「[Oracle Transparent Data Encryption](Appendix.Oracle.Options.AdvSecurity.md)」または「[SQL サーバーの透過的なデータの暗号化サポート](Appendix.SQLServer.Options.TDE.md)」を参照してください。

**重要**  
KMS キーを無効にすると、Amazon RDS は DB インスタンス用の KMS キーにアクセスできなくなります。KMS キーへのアクセスを失った場合、バックアップが有効になっているインスタンスでは、暗号化された DB インスタンスは検出から 2 時間後に `inaccessible-encryption-credentials-recoverable` 状態になります。DB インスタンスは 7 日間この状態のままであり、その間、インスタンスは停止します。この間に DB インスタンスに対して行われた API コールは成功しない場合があります。DB インスタンスを復旧するには、KMS キーを有効にして、この DB インスタンスを再起動します。AWS マネジメントコンソール、AWS CLI、または RDS API から KMS キーを有効にします。AWS CLI コマンド [start-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/start-db-instance.html) または AWS マネジメントコンソール を使用して DB インスタンスを再起動します。  
`inaccessible-encryption-credentials-recoverable` 状態は、停止できる DB インスタンスにのみ適用されます。この回復可能な状態は、リードレプリカやリードレプリカを持つインスタンスなど、停止できないインスタンスには適用されません。詳細については、「[DB インスタンスの停止に関する制限事項](USER_StopInstance.md#USER_StopInstance.Limitations)」を参照してください。  
DB インスタンスが 7 日以内に復旧されない場合、終了 `inaccessible-encryption-credentials` 状態になります。この状態では、DB インスタンスは使用できなくなり、バックアップからのみ DB インスタンスを復元できます。データベース内の暗号化されたデータの消失を防ぐために、暗号化された DB インスタンスのバックアップは常に有効にしておくことを強くお勧めします。  
DB インスタンスの作成中に、Amazon RDS は呼び出し元のプリンシパルが KMS キーにアクセスできるかどうかを確認し、DB インスタンスの存続期間全体に使用する KMS キーから許可を生成します。呼び出し元のプリンシパルの KMS キーへのアクセス権を取り消しても、実行中のデータベースには影響しません。スナップショットを別のアカウントにコピーするなど、クロスアカウントシナリオで KMS キーを使用する場合は、KMS キーを他のアカウントと共有する必要があります。別の KMS キーを指定せずにスナップショットから DB インスタンスを作成すると、新しいインスタンスはソースアカウントの KMS キーを使用します。DB インスタンスの作成後にキーへのアクセス権を取り消しても、インスタンスには影響しません。ただし、キーを無効にすると、そのキーで暗号化されたすべての DB インスタンスに影響します。これを防ぐには、スナップショットのコピー操作時に別のキーを指定します。  
バックアップが無効化されている DB インスタンスは、インスタンスの変更または復旧中にボリュームがホストからデタッチされるまで使用できます。RDS は、該当する場合、インスタンスを `inaccessible-encryption-credentials-recoverable` 状態または `inaccessible-encryption-credentials` 状態に移行します。

KMS キーの詳細については、「AWS Key Management Service デベロッパーガイド**」の「[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)」と「[AWS KMS key 管理](Overview.Encryption.Keys.md)」を参照してください。

## DB インスタンスの暗号化
<a name="Overview.Encryption.Enabling"></a>

新しい DB インスタンスを暗号化するには、Amazon RDS コンソールで **[Enable encryption]** (暗号を有効化) を選択します。DB インスタンスの作成については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。

AWS CLI の [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) コマンドを使用して、暗号化された DB インスタンスを作成するには、`--storage-encrypted` パラメータを設定します。[CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) API オペレーションを使用する場合は、`StorageEncrypted` パラメータを true に設定します。



AWS CLI `create-db-instance` コマンドを使用して、カスタマーマネージドキーで暗号化された DB インスタンスを作成する場合は、`--kms-key-id` パラメータを KMS キーの任意のキー識別子に設定します。Amazon RDS API `CreateDBInstance` オペレーションを使用する場合は、`KmsKeyId` パラメータを KMS キーの任意のキー識別子に設定します。カスタマーマネージドキーを別の AWS アカウントで使用するには、キー ARN またはエイリアス ARN を指定します。

## DB インスタンスの暗号化が有効になっているかの判別
<a name="Overview.Encryption.Determining"></a>

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して、DB インスタンスの保存時の暗号化が有効になっているか判別できます。

### コンソール
<a name="Overview.Encryption.Determining.CON"></a>

**DB インスタンスに対して保存時の暗号化がオンになっているかどうかを判別します**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

1. ナビゲーションペインで、**[データベース]** を選択します。

1. 詳細を表示するためにチェックする DB インスタンスの名前を選択します。

1. **設定**タブを選択し、**ストレージ**下にある**暗号化** 値 をチェックします。

   **有効**または**無効**のいずれかが表示されています。  
![\[DB インスタンスの保管時の暗号化のチェック\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/encryption-check-db-instance.png)

### AWS CLI
<a name="Overview.Encryption.Determining.CLI"></a>

AWS CLI を使用して DB インスタンスの保存時の暗号化が有効になっているかを判断するには、以下のオプションで [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) コマンドを呼び起こします: 
+ `--db-instance-identifier` ​- DB インスタンスの名前です。

次の例では、`mydb` DB インスタンスの保管時の暗号化に関して `TRUE` または `FALSE` の いずれかを返すクエリを使用しています。

**Example**  

```
1. aws rds describe-db-instances --db-instance-identifier mydb --query "*[].{StorageEncrypted:StorageEncrypted}" --output text
```

### RDS API
<a name="Overview.Encryption.Determining.API"></a>

Amazon RDS API を使用して DB インスタンスの保管時の暗号化が有効であるかを判断するには、以下のパラメータで [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) オペレーションを呼び起こします: 
+ `DBInstanceIdentifier` ​- DB インスタンスの名前です。

## Amazon RDS の暗号化の可用性
<a name="Overview.Encryption.Availability"></a>

Amazon RDS 暗号化は、現在すべてのデータベースエンジンおよびストレージタイプに使用できます。

Amazon RDS 暗号化は、ほとんどの DB インスタンスクラスで使用できます。次の表は、Amazon RDS 暗号化を*サポートしていない* DB インスタンスクラスの一覧です。


| インスタンスタイプ | インスタンスクラス | 
| --- | --- | 
| 汎用 (M1) |  db.m1.small db.m1.medium db.m1.large db.m1.xlarge  | 
| メモリ最適化 (M2) |  db.m2.xlarge db.m2.2xlarge db.m2.4xlarge  | 
| バースト可能 (T2) |  db.t2.micro  | 

## 転送中の暗号化
<a name="Overview.Encryption.InTransit"></a>

**物理レイヤーでの暗号化**  
AWS グローバルネットワーク上の AWS リージョンを流れるすべてのデータは、AWS の安全な施設を離れる前に、物理層で自動的に暗号化されます。AZ 間のトラフィックはすべて暗号化されます。追加的な暗号化レイヤーでは、このセクションに記載されているもの以外にも、保護が提供されている場合があります。

**Amazon VPC ピアリングおよび Transit Gateway のクロスリージョンピアリング接続によって得られる暗号化**  
Amazon VPC およびTransit Gateway のピアリング接続を使用する、すべてのクロスリージョントラフィックは、リージョンからの送信時に自動的に一括で暗号化されます。すべてのトラフィックにおける物理レイヤーには、そのトラフィックが AWS の保護された設備を離れる前に、追加の暗号化レイヤーが自動的に提供されています。

**インスタンス間での暗号化**  
AWS では、すべてのタイプの DB インスタンス間において安全でプライベートな接続を提供しています。さらに、一部のインスタンスタイプでは、基盤となる Nitro System ハードウェアのオフロード機能を使用して、インスタンス間の転送中のトラフィックを自動的に暗号化します。この暗号化では、256 ビットの暗号化による関連データによる認証暗号化 (AEAD) アルゴリズムを使用します。ネットワークのパフォーマンスには影響しません。インスタンス間でこの追加の転送中トラフィック暗号化をサポートするには、次の要件を満たす必要があります。  
+ インスタンスは、次のインスタンスタイプを使用します。
  + **汎用**: M6i、M6id、M6in、M6idn、M7g
  + **メモリ最適化**: R6i、R6id、R6in、R6idn、R7g、X2idn、X2iedn、X2iezn
+ 各インスタンスは同じ AWS リージョンにあるものとします。
+ 各インスタンスは同じ VPC 内、あるいはピア接続された VPC 内にあり、トラフィックは仮想ネットワークのデバイスもしくはサービス (ロードバランサーや Transit Gateway など) を通過しないものとします。

## Amazon RDS の暗号化された DB インスタンスの制限事項
<a name="Overview.Encryption.Limitations"></a>

Amazon RDS の暗号化された DB インスタンスには、以下の制限事項があります。
+ Amazon RDS DB インスタンスは、DB インスタンスの作成時にのみ暗号化できます。作成後には暗号化できません。

  ただし、暗号化されていないスナップショットのコピーは暗号化できるので、暗号化されていない DB インスタンスに効果的に暗号化を追加できます。つまり、DB インスタンスのスナップショットを作成し、そのスナップショットの暗号化済みコピーを作成します。この暗号化されたスナップショットから DB インスタンスを復元することで、元の DB インスタンスの暗号化されたコピーを作成できます。詳しくは、「[Amazon RDS の DB スナップショットのコピー](USER_CopySnapshot.md)」を参照してください。
+ 暗号化された DB インスタンスの暗号化をオフにすることはできません。
+ 暗号化されていない DB インスタンスの暗号化されたスナップショットを作成することはできません。
+ 暗号化された DB インスタンスのスナップショットは、DB インスタンスと同じ KMS キーを使用して暗号化する必要があります。
+ 暗号化されていない DB インスタンスのリードレプリカを暗号化することや、暗号化されている DB インスタンスのリードレプリカを暗号化しないようにすることはできません。
+ 暗号化されたリードレプリカとソース DB インスタンスの両方が同じ AWS リージョンにある場合、リードレプリカはソース DB インスタンスと同じ KMS キーで暗号化する必要があります。
+ 暗号化されていないバックアップやスナップショットを、暗号化された DB インスタンスに復元することはできません。
+ ある AWS リージョンから別のリージョンに暗号化されたスナップショットをコピーするには、送信先 AWS リージョンの KMS キーを指定する必要があります。これは、KMS キーが、作成される AWS リージョンに固有のものであるためです。

  ソーススナップショットはコピープロセス全体で暗号化されたままになります。Amazon RDSは、コピー処理中にエンベロープ暗号化を使用してデータを保護します。エンベロープ暗号化の仕組みの詳細については、*AWS Key Management Service デベロッパーガイド*の「[エンベロープ暗号化](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)」を参照してください。
+ 暗号化された DB インスタンスの暗号化を解除することはできません。ただし、暗号化された DB インスタンスからデータをエクスポートし、暗号化されていない DB インスタンスにデータをインポートすることはできます。