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

时间:2018-07-11 17:50:45

标签: sql-server amazon-web-services amazon-s3 aws-kms

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

这是我得到的错误:

  

对象元数据(x-amz-key)不完整,无法解密给定的S3对象。

这是我正在使用的代码(已删除私人信息)将对象写入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 Server (在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文档相同。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

在仅将SQL备份上传到为该存储桶配置了SSE的S3存储桶中的情况下,尝试从该备份文件还原将失败,并且AWS RDS服务器实例将引发异常:“对象元数据(x- amz-key)不完整,无法解密给定的S3对象...“