

# 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 역할은 [기본 백업 및 복원을 위한 IAM 역할 수동으로 만들기](SQLServer.Procedural.Importing.Native.Enabling.md#SQLServer.Procedural.Importing.Native.Enabling.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 인스턴스에 연결된 옵션 그룹에 추가해야 합니다.
+ 다중 AZ DB 인스턴스에는 TDE의 인증서 백업 및 복원이 지원되지 않습니다.
+ 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>

`rds_restore_tde_certificate` 저장 프로시저를 통해 사용자 TDE 인증서를 복원(가져오기)할 수 있습니다. 다음 구문을 사용합니다.

```
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>

`rds_fn_list_user_tde_certificates` 함수를 통해 복원된(가져온) 사용자 TDE 인증서를 볼 수 있습니다. 다음 구문을 사용합니다.

```
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';
```