在 RDS for SQL Server 上备份和还原 TDE 证书
RDS for SQL Server 提供了用于备份、还原和删除 TDE 证书的存储过程。RDS for SQL Server 还提供了用于查看已还原的用户 TDE 证书的功能。
用户 TDE 证书用于将数据库还原到 RDS for SQL Server,这些数据库位于本地并已开启 TDE。这些证书具有前缀 UserTDECertificate_
。还原数据库之后,在使其可供使用之前,RDS 会修改已开启 TDE 的数据库以使用 RDS 生成的 TDE 证书。这些证书具有前缀 RDSTDECertificate
。
用户 TDE 证书保留在 RDS for SQL Server 数据库实例上,除非您使用 rds_drop_tde_certificate
存储过程删除它们。有关更多信息,请参阅 删除还原的 TDE 证书。
您可以使用用户 TDE 证书从源数据库实例还原其他数据库。要还原的数据库必须使用相同的 TDE 证书并开启 TDE。您不必再次导入(还原)同一证书。
先决条件
在 RDS for SQL Server 上备份或还原 TDE 证书之前,请确保执行以下任务。针对本机备份和还原进行设置中介绍了前三个任务。
-
创建 Amazon S3 桶以存储要备份和还原的文件。
我们建议您使用单独的桶进行数据库备份和 TDE 证书备份。
-
创建用于备份和还原文件的 IAM 角色。
IAM 角色必须既是 Amazon KMS key 的用户又是其管理员。
除了 SQL Server 本机备份和还原所需的权限外,IAM 角色还需要以下权限:
-
针对 S3 桶资源的
s3:GetBucketACL
、s3:GetBucketLocation
和s3:ListBucket
-
针对
*
资源的s3:ListAllMyBuckets
-
-
将
SQLSERVER_BACKUP_RESTORE
选项添加到数据库实例上的选项组。这是对
TRANSPARENT_DATA_ENCRYPTION
(TDE
) 选项的补充。 -
请确保您有对称的加密 KMS 密钥。您有以下选项:
-
如果您的账户中有现有的 KMS 密钥,则可以使用它。无需进一步操作。
-
如果您的账户中没有对称的加密 KMS 密钥,请按照《Amazon Key Management Service 开发人员指南》中的创建密钥中的说明创建一个 KMS 密钥。
-
-
启用 Amazon S3 集成以在数据库实例和 Amazon S3 之间传输文件。
有关启用 Amazon S3 集成的更多信息,请参阅将 Amazon RDS for SQL Server 数据库实例与 Amazon S3 集成。
限制
使用存储过程备份和还原 TDE 证书具有以下限制:
-
必须将
SQLSERVER_BACKUP_RESTORE
和TRANSPARENT_DATA_ENCRYPTION
(TDE
) 这两个选项添加到与数据库实例关联的数据库选项组。 -
多可用区数据库实例不支持 TDE 证书备份和还原。
-
不支持取消 TDE 证书备份和还原任务。
-
您不能使用用户 TDE 证书对 RDS for SQL Server 数据库实例上的任何其他数据库进行 TDE 加密。您可以使用它从源数据库实例中仅还原已启用 TDE 并且使用相同 TDE 证书的其他数据库。
-
您只能删除用户 TDE 证书。
-
RDS 上支持的最大用户 TDE 证书数量为 10 个。如果此数字超过 10,请删除未使用的 TDE 证书,然后重试。
-
证书名称不能为空或为 null。
-
还原证书时,证书名称不能包含
RDSTDECERTIFICATE
关键字,并且必须以UserTDECertificate_
前缀开头。 -
@certificate_name
参数只能包含以下字符:a-z、0-9、@、$、# 和下划线 (_)。 -
@certificate_file_s3_arn
的文件扩展名必须为 .cer(不区分大小写)。 -
@private_key_file_s3_arn
的文件扩展名必须为 .pvk(不区分大小写)。 -
私有密钥文件的 S3 元数据必须包括
x-amz-meta-rds-tde-pwd
标签。有关更多信息,请参阅 备份和还原本地数据库的 TDE 证书。
备份 TDE 证书
要备份 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
– 覆盖具有指定名称的现有文件,即使该文件不是备份文件也是如此。
-
例 备份 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 证书
可以使用 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。
例 还原 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 证书
可以使用 rds_fn_list_user_tde_certificates
函数来查看已还原(导入)的用户 TDE 证书。它具有以下语法。
SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();
输出与以下内容类似。此处并未显示所有列。
name |
certificate_id |
principal_id |
pvt_key_encryption_type_desc |
issuer_name |
cert_serial_number |
thumbprint |
subject |
start_date |
expiry_date |
pvt_key_last_backup_date |
UserTDECertificate_tde_cert |
343 |
1 |
ENCRYPTED_BY_MASTER_KEY |
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 证书
要删除您未使用的已还原(导入)的用户 TDE 证书,请使用 rds_drop_tde_certificate
存储过程。它具有以下语法。
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_
certificate_name
';
以下参数是必需参数:
-
@certificate_name
– 要删除的 TDE 证书的名称。
您只能删除已还原(导入)的 TDE 证书。您不能删除 RDS 创建的证书。
例 删除 TDE 证书
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_
myTDEcertificate
';