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

如何解密从S3下载的经AWS KMS双重加密的RDS备份文件?

解决方案

核心思路

由于备份文件存在两层加密:存储过程指定KMS密钥的文件级加密 + S3桶默认KMS的对象级加密,本地环境无法直接访问AWS KMS密钥,因此必须先在AWS环境内解除文件级的加密层,再将未加密的备份文件下载到本地恢复。

方案一:通过RDS实例解密并重传备份

  1. 将S3上的加密备份文件下载到RDS实例本地存储
    执行RDS存储过程,把目标事务日志文件从S3拉取到RDS实例的指定路径:
    EXEC msdb.dbo.rds_download_from_s3
        @s3_arn_of_file = 'arn:aws:s3:::your-bucket-name/path/to/transaction-log.trn',
        @filepath_in_rds = 'D:\RDSBackup\transaction-log.trn',
        @overwrite_file = 1;
    
  2. 在RDS内验证并解密文件
    执行MSSQL命令验证备份(RDS会自动使用指定的KMS密钥解密文件级加密):
    RESTORE VERIFYONLY FROM DISK = 'D:\RDSBackup\transaction-log.trn';
    
  3. 生成未加密的备份并上传回S3
    创建临时数据库(或直接针对原库)生成未加密的事务日志备份,再上传到S3:
    -- 生成未加密的事务日志备份
    BACKUP LOG YourDatabaseName TO DISK = 'D:\RDSBackup\unencrypted-trn.trn' WITH NO_ENCRYPTION;
    
    -- 上传到S3
    EXEC msdb.dbo.rds_tlog_backup_copy_to_S3
        @source_db_name = 'YourDatabaseName',
        @s3_arn_to_backup_to = 'arn:aws:s3:::your-bucket-name/path/to/unencrypted-trn.trn',
        @overwrite_S3_backup_file = 1;
    
  4. 下载未加密文件到本地
    此时S3上的文件仅保留S3桶默认的KMS加密,下载时(通过有解密权限的IAM身份)会自动解除S3层加密,得到未加密的事务日志文件,可直接在本地MSSQL环境恢复。

方案二:通过EC2实例解密备份

  1. 准备EC2环境
    启动一台具备以下权限的EC2实例:

    • S3 GetObject 权限(可访问目标备份文件)
    • KMS Decrypt 权限(针对存储过程加密时使用的KMS密钥)
      安装MSSQL Server或MSSQL命令行工具(如sqlcmd)。
  2. 下载S3文件到EC2
    使用AWS CLI下载目标文件,S3层的加密会自动解密:

    aws s3 cp s3://your-bucket-name/path/to/transaction-log.trn /tmp/transaction-log.trn
    
  3. 解密并生成未加密备份
    使用sqlcmd连接本地MSSQL(或临时部署的MSSQL实例),执行解密并重新备份:

    -- 先创建临时数据库用于恢复日志(可选,若仅需导出未加密备份)
    CREATE DATABASE TempDBForDecrypt;
    
    -- 恢复日志到临时库(自动解密文件级加密)
    RESTORE LOG TempDBForDecrypt FROM DISK = '/tmp/transaction-log.trn' WITH NORECOVERY, DECRYPTION, KMS_KEY = 'arn:aws:kms:your-region:your-account-id:key/your-key-id';
    
    -- 生成未加密的事务日志备份
    BACKUP LOG TempDBForDecrypt TO DISK = '/tmp/unencrypted-trn.trn' WITH NO_ENCRYPTION;
    
  4. 传输未加密文件到本地
    将EC2上的/tmp/unencrypted-trn.trn文件通过SCP或其他方式下载到本地环境,直接用于恢复。

后续优化建议

若需避免后续出现双重加密问题,可调整备份策略:

  • 取消存储过程中的@kms_key_arn参数,仅依赖S3桶默认的SSE-KMS加密,这样备份文件仅存在一层加密,后续在AWS侧解密后即可直接下载使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:33:10