跨AWS账户使用query_export_to_s3导出RDS数据至S3时,如何指定目标账户的KMS密钥加密文件
跨AWS账户使用query_export_to_s3导出RDS数据至S3时,如何指定目标账户的KMS密钥加密文件
嘿,这个场景我之前帮不少用户处理过,刚好能给你清晰的解决步骤!
首先得确认你已经搞定了最关键的权限基础:你在账户B创建的KMS密钥,已经给账户A的相关IAM实体(比如RDS的服务角色,或者你用来执行导出操作的IAM身份)配置了kms:GenerateDataKey和kms:Decrypt权限——这点你提到已经做了,但还是建议再去KMS控制台的密钥权限页核对一下,别漏了必要的操作。
接下来就是核心操作:在执行query_export_to_s3的时候,直接指定账户B的KMS密钥ARN就行!这个命令本身支持KMS_KEY_ID参数,专门用来指定加密导出文件的密钥,步骤如下:
- 第一步,先拿到账户B的KMS密钥ARN:你可以登录账户B的KMS控制台,找到你创建的那个密钥,复制它的ARN,格式一般是
arn:aws:kms:你的区域:账户B的ID:key/密钥的UUID。 - 第二步,在账户A的RDS数据库里执行导出命令时,把这个ARN作为最后一个参数传入。举个实际的SQL例子:
SELECT query_export_to_s3( 'SELECT * FROM your_target_table', -- 你要导出的查询语句 's3://your-bucket-in-accountB/exported-data.csv', -- 账户B的S3路径 'us-east-1', -- 你的AWS区域,要和桶、密钥区域一致 'CSV', -- 导出格式 'HEADER', -- 是否包含表头 '', -- 分隔符,默认是逗号,这里留空用默认 '', -- 引号字符,默认双引号 'arn:aws:kms:us-east-1:123456789012:key/abcdef-1234-5678-90ab-cdef12345678' -- 账户B的KMS密钥ARN );
这里还要额外提醒几个容易踩坑的点:
- 确保账户A的执行实体(比如RDS服务角色)有访问账户B S3桶的
s3:PutObject权限,同时账户B的S3桶策略要允许这个实体写入,并且策略里要明确允许使用指定的KMS密钥进行加密(可以在桶策略的s3:PutObject动作里添加条件,关联这个KMS密钥的ARN)。 - 如果账户B的S3桶开启了默认加密,不用担心,
query_export_to_s3指定的KMS密钥会覆盖桶的默认加密设置,只要权限到位就没问题。 - 导出完成后,你可以先下载一小部分文件测试,确认用账户B的KMS密钥能正常解密打开,没问题再导出全量数据。
这样操作后,导出的文件就会用账户B的KMS密钥加密,你在账户B里就能直接打开,完全符合你不能在A创建密钥给B的安全要求~
备注:内容来源于stack exchange,提问作者paul590
相关产品推荐
相关产品推荐

