在 RDS for SQL Server 上备份和还原 TDE 证书 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 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 证书之前,请确保执行以下任务。针对本机备份和还原进行设置中介绍了前三个任务。

  1. 创建 Amazon S3 桶以存储要备份和还原的文件。

    我们建议您使用单独的桶进行数据库备份和 TDE 证书备份。

  2. 创建用于备份和还原文件的 IAM 角色。

    IAM 角色必须既是 Amazon KMS key 的用户又是其管理员。

    除了 SQL Server 本机备份和还原所需的权限外,IAM 角色还需要以下权限:

    • 针对 S3 桶资源的 s3:GetBucketACLs3:GetBucketLocations3:ListBucket

    • 针对 * 资源的 s3:ListAllMyBuckets

  3. SQLSERVER_BACKUP_RESTORE 选项添加到数据库实例上的选项组。

    这是对 TRANSPARENT_DATA_ENCRYPTION (TDE) 选项的补充。

  4. 请确保您有对称的加密 KMS 密钥。您有以下选项:

    • 如果您的账户中有现有的 KMS 密钥,则可以使用它。无需进一步操作。

    • 如果您的账户中没有对称的加密 KMS 密钥,请按照《Amazon Key Management Service 开发人员指南》中的创建密钥中的说明创建一个 KMS 密钥。

  5. 启用 Amazon S3 集成以在数据库实例和 Amazon S3 之间传输文件。

    有关启用 Amazon S3 集成的更多信息,请参阅将 Amazon RDS for SQL Server 数据库实例与 Amazon S3 集成

限制

使用存储过程备份和还原 TDE 证书具有以下限制:

  • 必须将 SQLSERVER_BACKUP_RESTORETRANSPARENT_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';