

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 既存の Amazon RDS for PostgreSQL DB インスタンスを暗号化する
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance"></a>

*Amazon Web Services、Piyush Goyal、Shabana Raghu、Yaser Raja*

## 概要
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-summary"></a>

このパターンでは、AWS クラウドの Amazon Relational Database Service (Amazon RDS) for PostgreSQL DB インスタンスを最小のダウンタイムで暗号化する方法を説明しています。このプロセスは、Amazon RDS for MySQL DB インスタンスでも機能します。　

Amazon RDS DB インスタンスの暗号化は、DB インスタンスの作成時に有効にすることができますが、作成後に暗号化を有効にすることはできません。ただし、DB インスタンスのスナップショットを作成し、そのスナップショットの暗号化済みコピーを作成すると、暗号化されていない DB インスタンスに暗号化を追加できます。この暗号化されたスナップショットから DB インスタンスを復元することで、元の DB インスタンスの暗号化されたコピーを取得できます。プロジェクトがこのアクティビティの間（少なくとも書き込みトランザクションの場合）ダウンタイムを許可されている場合は、これがすべての作業になります。DB インスタンスの暗号化された新しいコピーが使用可能になると、アプリケーションを新しいデータベースに接続できます。　 ただし、プロジェクトでこのアクティビティによる大幅なダウンタイムが許容されない場合は、ダウンタイムを最小限に抑えるための代替アプローチが必要です。　 このパターンでは、AWS Database Migration Service (AWS DMS) を使用してデータを移行し、継続的に複製します。これにより、新しい暗号化されたデータベースへのカットオーバーを最小限のダウンタイムで行うことができます。 

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

## 前提条件と制限
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ 暗号化されていないAmazon RDS for PostgreSQL DB インスタンス
+ AWS DMS タスクの使用経験 (作成、変更、または停止) (AWS DMS ドキュメントの「[AWS DMS タスクの使用](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)」を参照)
+ データベースを暗号化するための AWS Key Management Service (AWS KMS) に関する知識 ([AWS KMS ドキュメント](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)を参照)

**機能制限**
+ Amazon RDS DB インスタンスの暗号化は、DB インスタンスの作成時にのみ有効にすることができます。作成後に暗号化を有効にすることはできません。
+ [ログに記録されていないテーブル](https://www.postgresql.org/docs/current/sql-createtable.html)のデータは、スナップショットを使用しても復元されません。詳細については、「[PostgreSQL を使用するためのベストプラクティス](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html#CHAP_BestPractices.PostgreSQL)」を参照してください。
+ 暗号化されていない DB インスタンスのリードレプリカを暗号化することや、暗号化されている DB インスタンスのリードレプリカを暗号化しないようにすることはできません。
+ 暗号化されていないバックアップやスナップショットを、暗号化された DB インスタンスに復元することはできません。
+ AWS DMS はシーケンスを自動的に転送しないため、これを処理するには追加の手順が必要です。

詳細については、Amazon RDS ドキュメントの「[Amazon RDS 暗号化 DB インスタンスの制限事項](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html#Overview.Encryption.Limitations)」を参照してください。

## アーキテクチャ
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-architecture"></a>

**ソースアーキテクチャ**
+ 暗号化されていない RDS DB インスタンス

**ターゲット アーキテクチャ**
+ 暗号化されていない RDS DB インスタンス
  + ターゲット RDS DB インスタンスは、ソース RDS DB インスタンスの DB スナップショットコピーを復元することによって作成されます。
  + AWS KMS キーは、スナップショットの復元中の暗号化に使用されます。
  + AWS DMS レプリケーションタスクを使用してデータを移行します。

![プロセスは AWS DMS を使用して、既存の Amazon RDS for PostgreSQL DB インスタンスを新しい DB に暗号化します。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/44dd8420-d89d-466e-b7fb-1bdafab8f7f9.png)


## ツール
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-tools"></a>

**暗号化を有効化するためのツール:**
+ 暗号化のための AWS KMS キー – 暗号化された DB インスタンスを作成するときは、カスタマーマネージドキーまたは Amazon RDS の AWS マネージドキーを選択して、DB インスタンスを暗号化できます。カスタマーマネージドキーのキー識別子を指定しない場合、Amazon RDS は新しい DB インスタンスに AWS マネージドキーを使用します。Amazon RDS は、Amazon RDS 用の AWS マネージドキーを AWS アカウントに作成します。AWS アカウントには、AWS リージョンごとに Amazon RDS の AWS マネージドキーがあります。Amazon RDS の暗号化に KMS キーを使用する方法の詳細については、「[Amazon RDS リソースの暗号化](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)」を参照してください。

**継続的なレプリケーションに使用されるツール**:
+ AWS DMS - AWS Database Migration Service (AWS DMS) を使用して、ソース DB からターゲット DB に変更を複製します。ダウンタイムを最小限に抑えるために、ソース DB とターゲット DB を同期させることが重要です。AWS DMS の設定とタスクの作成については、「[AWS DMS のドキュメント](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)」を参照してください。

## エピック
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-epics"></a>

### ソース DB インスタンスのスナップショットを作成し、暗号化します
<a name="create-a-snapshot-of-the-source-db-instance-and-encrypt-it"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソース PostgreSQL DB インスタンスの詳細を確認します。 | Amazon RDS コンソールで、ソース PostgreSQL DB インスタンスを選択します。[**設定**] タブで、インスタンスの暗号化が有効になっていないことを確認します。画面の図については、「[追加情報](#encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional)」セクションを参照してください。 | DBA | 
| DB スナップショットを作成します。 | 暗号化するインスタンスの DB スナップショットを作成します。スナップショットを作成するのにかかる時間は、データベースのサイズによって異なります。手順については、Amazon RDS ドキュメントの「[DB スナップショットの作成](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)」を参照してください。 | DBA | 
| スナップショットを暗号化します。　 | Amazon RDS コンソールのナビゲーションペインで、[**スナップショット**] を選択し、作成した DB スナップショットを選択します。[**アクション**] では、[**スナップショットのコピー**] を選択します。対応するフィールドで、送信先の AWS リージョンと DB スナップショットのコピー名を指定します。[**暗号化を有効にする**] チェックボックスを選択します。[**マスターキー**] では、DB スナップショットの暗号化に使用する KMS キー識別子を指定します。[**スナップショットをコピー**] を選択します。詳細については、Amazon RDS のドキュメントの「[スナップショットのコピー](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)」を参照してください。 | DBA | 

### ターゲット DB インスタンスを準備します
<a name="prepare-the-target-db-instance"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| DB スナップショットを復元します。 | Amazon RDS コンソールで、[**スナップショット**] タブを選択します。作成した暗号化スナップショットを選択します。[**アクション**]、[**スナップショットの復元**] の順に選択します。**DB インスタンス識別子**として、新しい DB インスタンスの一意の名前を入力します。インスタンスの詳細を確認してから、[**DB インスタンスの復元**] を選択します。新しい、暗号化された DB インスタンスがスナップショットから作成されます。詳細については、Amazon RDS ドキュメントの「[DB スナップショットからの復元](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)」を参照してください。 | DBA | 
| AWS DMS を使用してデータを移行します。 | AWS DMS コンソールで、AWS DMS タスクを作成します。[**移行タイプ**] では、[**既存のデータを移行して進行中の変更を複製する**] を選択します。[**タスク設定**] の [**ターゲットテーブル作成モード**] では、[**切り詰め**] を選択します。詳細については、AWS DMS ドキュメントの「[タスクの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)」を参照してください。 | DBA | 
| データ検証を有効にします。 | [**タスク設定**] で、[**検証を有効にする**] を選択します。これにより、ソースデータとターゲットデータを比較して、データが正確に移行されたことを確認できます。  | DBA | 
| ターゲット DB インスタンスの制約を無効にします。 | ターゲット DB インスタンスで、[トリガーと外部キーの制約をすべて無効](https://www.postgresql.org/docs/current/sql-altertable.html)にしてから、AWS DMS タスクを開始します。トリガーと外部キーの制約を無効にする詳細については、[AWS DMS ドキュメント](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)を参照してください。 | DBA | 
| データを検証します。 | フルロードが完了したら、ターゲット DB インスタンスのデータを検証して、ソースデータと一致するかどうかを確認します。詳細については、AWS DMS ドキュメントの「[AWS DMS のデータ検証](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)」を参照してください。 | DBA | 

### ターゲット DB インスタンスへのカットオーバー
<a name="cut-over-to-the-target-db-instance"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソース DB インスタンスに対する書き込み操作を停止します。 | ソース DB インスタンスでの書き込み操作を停止して、アプリケーションのダウンタイムを開始できるようにします。AWS DMS がパイプライン内のデータのレプリケーションを完了したことを検証します。ターゲット DB インスタンスで、トリガーと外部キーを有効にします。 | DBA | 
| データベースシーケンスの更新 | ソースデータベースにシーケンス番号が含まれている場合は、ターゲットデータベースのシーケンスを検証して更新します。 | DBA | 
| アプリケーションのエンドポイントを設定します。 | アプリケーション接続で、新しい Amazon RDS DB インスタンスのエンドポイントを使用するように設定します。現在、DB インスタンスは暗号化されています。 | DBA、アプリ所有者 | 

## 関連リソース
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-resources"></a>
+ 「[AWS DMS タスクの作成](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)」 
+ 「[Amazon CloudWatch を使用したレプリケーション タスクのモニタリング](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Monitoring.CloudWatch)」
+ 「[AWS DMS タスクのモニタリング](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)」
+ 「[Amazon RDS 暗号化キーを更新する](https://aws.amazon.com/premiumsupport/knowledge-center/update-encryption-key-rds/)」

## 追加情報
<a name="encrypt-an-existing-amazon-rds-for-postgresql-db-instance-additional"></a>

ソース PostgreSQL DB インスタンスの暗号化の確認:

![ソース PostgreSQL DB インスタンスの概要ページには、ストレージに対して暗号化が有効になっていないというメッセージが表示されます。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/820d17c0-0eed-4ed9-9f43-cbada081d924/images/d53d1dab-b5c2-452d-b823-ba3d6508ad15.png)


このパターンに関するその他の注意事項:
+ `rds.logical_replication` パラメータを 1 に設定して、PostgreSQL でのレプリケーションを有効にします。

**重要な注意:** レプリケーションスロットは、ファイルが外部から (たとえば `pg_recvlogical` によって) 消費されるまで、抽出、変換、ロード(ETL)ジョブを介して、あるいは AWS DMS 経由で先書きログ (WAL) ファイルを保持します。`rds.logical_replication` パラメータ値を 1 に設定すると、AWS DMS は `wal_level`、`max_wal_senders`、`max_replication_slots`、および `max_connections` パラメータを設定します。論理レプリケーションスロットが存在するが、replicationスロットによって予約された WAL ファイルにコンシューマが存在しない場合、トランザクション ログ ディスクの使用量が増加し、使用可能なストレージ容量が継続的に減少することがあります。この問題を解決するための詳細情報と手順については、AWS サポートナレッジセンターの「[Amazon RDS for PostgreSQL で "デバイスに空き領域がありません" や "DiskFull" というエラーが発生する理由を知りたいです。](https://aws.amazon.com/premiumsupport/knowledge-center/diskfull-error-rds-postgresql/)」を参照してください。
+ DB スナップショットを作成した後、ソース DB インスタンスに加えたスキーマの変更は、ターゲット DB インスタンスには反映されません。
+ 暗号化された DB インスタンスを作成したら、その DB インスタンスで使用されている KMS キーを変更することはできません。したがって、暗号化された DB インスタンスを作成する前に、KMS キーの要件を必ず確認してください。
+ AWS DMS タスクを実行する前に、ターゲット DB インスタンスのトリガーと外部キーを無効にする必要があります。タスクが完了した後、これらを再度有効にすることができます。