

# RDS for SQL Server での TDE 証明書のバックアップと復元
<a name="TDE.BackupRestoreRDS"></a>

RDS for SQL Server には、TDE 証明書のバックアップ、復元、および削除のためのストアドプロシージャが用意されています。RDS for SQL Server には、復元されたユーザー TDE 証明書を表示するための機能も用意されています。

ユーザー TDE 証明書は、オンプレミスで TDE がオンになっている RDS for SQL Server にデータベースを復元するために使用されます。これらの証明書には、プレフィックス `UserTDECertificate_` が付いています。データベースを復元した後、それらを使用できるようにする前に、RDS は、TDE を オンにしたデータベースを変更し、RDS で生成された TDE 証明書を使用するようにします。これらの証明書には、プレフィックス `RDSTDECertificate` が付いています。

ユーザー TDE 証明書は、`rds_drop_tde_certificate` ストアドプロシージャを使って削除しない限り、RDS for SQL Server DB インスタンスに残ります。(詳しくは、「[復元された TDE 証明書の削除](#TDE.BackupRestoreRDS.Drop)」を参照してください。)

ユーザー TDE 証明書を使用して、移行元 DB インスタンスから他のデータベースを復元できます。復元するデータベースは同じ TDE 証明書を使用し、TDE がオンになっている必要があります。同じ証明書を再度インポート (復元) する必要はありません。

**Topics**
+ [前提条件](#TDE.BackupRestoreRDS.Prereqs)
+ [制限事項](#TDE.Limitations)
+ [TDE 証明書のバックアップ](#TDE.BackupRestoreRDS.Backup)
+ [TDE 証明書の復元](#TDE.BackupRestoreRDS.Restore)
+ [復元された TDE 証明書の表示](#TDE.BackupRestoreRDS.Show)
+ [復元された TDE 証明書の削除](#TDE.BackupRestoreRDS.Drop)

## 前提条件
<a name="TDE.BackupRestoreRDS.Prereqs"></a>

RDS for SQL Server で TDE 証明書をバックアップまたは復元する前に、次のタスクを実行してください。最初の 3 つについては、「[ネイティブバックアップおよび復元のセットアップ](SQLServer.Procedural.Importing.Native.Enabling.md)」を参照してください。

1. バックアップおよび復元するファイルを保存するための Amazon S3 汎用バケットまたはディレクトリバケットを作成します。

   データベースバックアップと TDE 証明書のバックアップには、別々のバケットを使用することをお勧めします。

1. ファイルのバックアップと復元用の IAM ロールを作成します。

   IAM ロールは、AWS KMS key のユーザーおよび管理者の両方である必要があります。

   ディレクトリバケットを使用する場合、ディレクトリバケットで [ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM) に必要なアクセス許可以外、追加のアクセス許可は必要ありません。

   S3 リソースを使用する場合、[ネイティブバックアップおよび復元用の IAM ロールの手動作成](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.IAM) に必要なアクセス許可に加えて、IAM ロールには次のアクセス許可も必要です。
   + S3 バケットリソースの `s3:GetBucketAcl`、`s3:GetBucketLocation`、および`s3:ListBucket`

1. DB インスタンスのオプショングループに追加された `SQLSERVER_BACKUP_RESTORE` オプション。

   これは、`TRANSPARENT_DATA_ENCRYPTION` (`TDE`) オプションへの追加です。

1. 対称暗号化 KMS キーであることを確認します。次のオプションがあります。
   + アカウントに既存の KMS キーがある場合は、それを使用できます。これ以上の操作は不要です。
   + アカウントに既存の対称暗号化 KMS キーがない場合は、*AWS Key Management Serviceデベロッパーガイド*の「[キーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)」の手順に従って KMS キーを作成します。

1. Amazon S3 統合を有効にして、DB インスタンスと Amazon S3 の間でファイルを転送します。

   Amazon S3 統合を有効にするための詳細については、「[Amazon RDS for SQL Server DB インスタンスと Amazon S3 の統合](User.SQLServer.Options.S3-integration.md)」を参照してください。

   ディレクトリバケットは S3 統合ではサポートされていないことにご注意ください。このステップは、[オンプレミスデータベースの TDE 証明書のバックアップと復元](TDE.BackupRestoreOnPrem.md) にのみ必要です。

## 制限事項
<a name="TDE.Limitations"></a>

ストアドプロシージャを使用して TDE 証明書をバックアップおよび復元する場合、次の制限があります。
+ `SQLSERVER_BACKUP_RESTORE` および `TRANSPARENT_DATA_ENCRYPTION` (`TDE`) オプションはどちらも DB インスタンスに関連付けられたオプショングループに追加されている必要があります。
+ TDE 証明書のバックアップと復元は、マルチ AZ DB インスタンスではサポートされていません。
+ TDE 証明書のバックアップおよび復元タスクのキャンセルはサポートされていません。
+ RDS for SQL Server DB インスタンス上の他のデータベースの TDE 暗号化にユーザー TDE 証明書を使用することはできません。これを使用して復元できるのは、TDE がオンになっていて、同じ TDE 証明書を使用する移行元 DB インスタンスから他のデータベースのみです。
+ 削除できるのはユーザー TDE 証明書のみです。
+ RDS でサポートされているユーザー TDE 証明書の最大数は 10 です。数が 10 を超える場合は、未使用の TDE 証明書を削除して、もう一度試してください。
+ 証明書名を空または null にすることはできません。
+ 証明書を復元する場合、証明書名にキーワード `RDSTDECERTIFICATE` を含めることはできません。また、プレフィックス `UserTDECertificate_` で始まる必要があります。
+ `@certificate_name` パラメータには、a ～ z、0 ～ 9、@、\$1、\$1、下線 (\$1) の文字のみを含めることができます。
+ `@certificate_file_s3_arn` のファイル拡張子は .cer (大文字小文字を区別しない) にする必要があります。
+ `@private_key_file_s3_arn` のファイル拡張子は .pvk (大文字小文字を区別しない) にする必要があります。
+ プライベートキーファイルの S3 メタデータには、`x-amz-meta-rds-tde-pwd` タグが含まれる必要があります。詳細については、「[オンプレミスデータベースの TDE 証明書のバックアップと復元](TDE.BackupRestoreOnPrem.md)」を参照してください。
+ RDS for SQL Server は、TDE のクロスアカウントキーの使用をサポートしていません。

## TDE 証明書のバックアップ
<a name="TDE.BackupRestoreRDS.Backup"></a>

TDE 証明書をバックアップするには、`rds_backup_tde_certificate` ストアドプロシージャを使用します。これには、以下の構文があります。

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id',
    [@overwrite_s3_files=0|1];
```

以下のパラメータは必須です。
+ `@certificate_name` — バックアップする TDE 証明書の名前。
+ `@certificate_file_s3_arn` — Amazon S3 の証明書バックアップファイルの送信先 Amazon リソースネーム (ARN)。
+ `@private_key_file_s3_arn` — TDE 証明書を保護するぷらいべーとキーファイルの送信先 S3 ARN。
+ `@kms_password_key_arn` — プライベートキーのパスワードの暗号化に使用される対称 KMS キーの ARN。

次のパラメータはオプションです。
+ `@overwrite_s3_files` — S3 内の既存の証明書および秘密キーファイルを上書きするかどうかを示します。
  + `0` – 既存のファイルを上書きしません。この値はデフォルト値です。

    設定 `@overwrite_s3_files` を 0 にすると、ファイルが既に存在している場合はエラーが返されます。
  + `1` – バックアップファイルではない場合でも、指定された名前を持つ既存のファイルを上書きします。

**Example TDE 証明書のバックアップ**  

```
EXECUTE msdb.dbo.rds_backup_tde_certificate
    @certificate_name='RDSTDECertificate20211115T185333',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE',
    @overwrite_s3_files=1;
```

## TDE 証明書の復元
<a name="TDE.BackupRestoreRDS.Restore"></a>

ユーザー TDE 証明書を復元 (インポート) するには `rds_restore_tde_certificate` ストアドプロシージャを使用します。これには、以下の構文があります。

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_certificate_name',
    @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer',
    @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk',
    @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';
```

以下のパラメータは必須です。
+ `@certificate_name` — 復元する TDE 証明書の名前。名前はプレフィックス `UserTDECertificate_` で開始する必要があります。
+ `@certificate_file_s3_arn` — TDE 証明書を復元するために使用されるバックアップファイルの S3 ARN。
+ `@private_key_file_s3_arn` — 復元する TDE 証明書のプライベートキーバックアップファイルの S3 ARN。
+ `@kms_password_key_arn` — プライベートキーのパスワードの暗号化に使用される対称 KMS キーの ARN。

**Example TDE 証明書の復元**  

```
EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_myTDEcertificate',
    @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer',
    @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk',
    @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';
```

## 復元された TDE 証明書の表示
<a name="TDE.BackupRestoreRDS.Show"></a>

復元 (インポート) したユーザー TDE 証明書を表示するには `rds_fn_list_user_tde_certificates` 関数を使用します。これには、以下の構文があります。

```
SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();
```

出力は以下のようになります。すべての列がここに表示されるわけではありません。


|  |  |  |  |  |  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |--- |--- |
| name | certificate\$1id | principal\$1id | pvt\$1key\$1encryption\$1type\$1desc | issuer\$1name | cert\$1serial\$1number | thumbprint | subject | start\$1date | expiry\$1date | pvt\$1key\$1last\$1backup\$1date | 
| UserTDECertificate\$1tde\$1cert | 343 | 1 | ENCRYPTED\$1BY\$1MASTER\$1KEY | AnyCompany Shipping | 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af | 0x6BB218B34110388680B FE1BA2D86C695096485B5 | AnyCompany Shipping | 2022-04-05 19:49:45.0000000 | 2023-04-05 19:49:45.0000000 | NULL | 

## 復元された TDE 証明書の削除
<a name="TDE.BackupRestoreRDS.Drop"></a>

使用していない復元された (インポートされた) ユーザー TDE 証明書を削除するには、`rds_drop_tde_certificate` ストアドプロシージャを使用します。これには、以下の構文があります。

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';
```

以下のパラメータは必須です。
+ `@certificate_name`— 削除する TDE 証明書の名前。

復元された (インポートされた) TDE 証明書のみを削除できます。RDS で作成された証明書は削除できません。

**Example TDE 証明書の削除**  

```
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';
```