我正在尝试从非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文档相同。
任何帮助将不胜感激!
答案 0 :(得分:0)
AWS对存储在存储桶中的对象支持两种加密类型:服务器端加密(SSE)和客户端加密(CSE)。如果您打算使用加密的SQL Server还原选项,则备份文件必须经过客户端加密。
在仅将SQL备份上传到为该存储桶配置了SSE的S3存储桶中的情况下,尝试从该备份文件还原将失败,并且AWS RDS服务器实例将引发异常:“对象元数据(x- amz-key)不完整,无法解密给定的S3对象...“