将 KMS 加密备份从 S3 还原到 RDS 实例时出现问题

Issue restoring KMS encrypted backup from S3 to RDS instance

我正在尝试从非 AWS 实例备份数据库,推送到 S3,然后在 RDS 实例上恢复该数据库。我已经通过服务器端加密成功地将文件推送到 S3,但是我 运行 在尝试在 RDS 实例上恢复所述数据库时遇到了问题。

这是我遇到的错误:

Object metadata (x-amz-key) incomplete, cannot decrypt the given S3 object.

这是我正在使用的代码(删除了私人信息)将对象写入 S3 并在 RDS 上恢复:

Powershell:

Write-S3Object -BucketName my-S3-bucket -Key "my_test_database.bak" -File C:\somepath\my_test_database.bak -ServerSideEncryption aws:kms -ServerSideEncryptionKeyManagementServiceKeyId "abcde012-abcd-0123-ef89-9876543210cd" -ProfileName default

SQL 服务器(在 RDS 实例上):

EXEC [msdb].[dbo].[rds_restore_database] @restore_db_name = 'my_test_database',
    @S3_arn_to_restore_from = N'arn:aws:s3:::my-S3-bucket/my_test_database.bak',
    @KMS_master_key_arn = N'arn:aws:kms:region:0123456789:key/abcde012-abcd-0123-ef89-9876543210cd';

我想知道在设置 IAM 或生成加密密钥时是否遗漏了什么。据我所知,我推送到 S3 和恢复数据库的代码与 AWS 文档相同。

如有任何帮助,我们将不胜感激!

AWS 支持对存储在存储桶中的对象进行两种类型的加密:服务器端加密 (SSE) 和客户端加密 (CSE)。如果您计划使用加密的 SQL 服务器还原选项,备份文件 必须是客户端加密的

如果您只是将 SQL 备份上传到为存储桶配置 SSE 的 S3 存储桶中,尝试从该备份文件恢复将失败,并且 AWS RDS 服务器实例将抛出异常: "Object metadata (x-amz-key) incomplete, cannot decrypt the given S3 object ..."