You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从AWS S3恢复SQL Server .bak到RDS时CMK不存在或无权限求助

解决AWS RDS恢复SQL Server备份时的CMK相关错误

可能的原因及解决方法

1. S3存储桶/对象自动加密导致权限问题

你提到新生成的bak未加密,但如果S3存储桶默认开启了服务器端加密(SSE-KMS),上传的文件会被自动加密,RDS无权限访问对应的KMS密钥就会触发该错误。

  • 先检查存储桶加密设置:进入S3存储桶的「属性」→「服务器端加密」,确认是否启用了SSE-KMS。如果是,需确保RDS关联的服务角色能访问这个CMK。
  • 临时测试方案:上传时强制关闭加密,使用以下命令:
    aws s3 cp local/myDBName.bak s3://s3-my-temp-folder/myDBName.bak --sse none
    
    上传完成后再尝试恢复操作。

2. RDS服务角色缺少KMS解密权限

若S3对象确实采用了KMS加密(无论桶默认配置还是上传时指定),RDS的IAM角色必须拥有kms:Decrypt权限:

  • 找到RDS关联的IAM角色(比如自定义的rds-s3-integration-role),进入IAM控制台为该角色添加权限策略,允许对目标CMK执行解密操作。
  • 参考权限策略示例:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "kms:Decrypt",
                "Resource": "arn:aws:kms:你的区域:你的账号ID:key/密钥ID"
            }
        ]
    }
    

3. 备份文件残留加密元数据

部分场景下,原始加密备份恢复后,即使采用默认参数备份,SQL Server仍可能保留加密标记。可以用以下命令检查新生成bak的状态:

  • 本地SQL Server执行查询:
    RESTORE HEADERONLY FROM DISK = 'D:\你的备份路径\myDBName.bak'
    
    查看IsEncrypted字段,若值为1说明备份仍处于加密状态。此时需重新备份并明确指定无加密:
    BACKUP DATABASE [myDBName] TO DISK = 'D:\新备份路径\myDBName_unencrypted.bak' WITH NO_ENCRYPTION
    
    上传该无加密备份后再尝试恢复。

4. 资源区域不匹配

确认RDS实例、S3存储桶、KMS密钥的区域完全一致——CMK是区域级资源,跨区域无法访问。

额外验证建议

  • 对比可成功恢复的文件B的S3加密状态:查看它的「属性」→「服务器端加密」配置,照着调整失败文件的对应设置。
  • 使用完全相同的aws s3 cp命令参数上传两个文件,排除上传过程中的加密配置差异。

内容的提问来源于stack exchange,提问作者Shijie Zheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:24:32