如何下载AWS Postgres数据库的S3快照本地副本?遇权限等问题求助
问题分析与解决方案
1. 关于HeadObject 404错误
你执行的第一个命令aws s3 cp s3://<your-bucket-name>/<your-snapshot-name> <local-path>报错404,原因是该命令默认复制单个对象,而<your-snapshot-name>是一个前缀(目录)而非单个文件对象,S3中不存在名为<your-snapshot-name>的单个对象,因此触发404。使用--recursive参数是正确的选择,但后续遇到的权限问题才是核心障碍。
2. 核心问题:KMS解密权限缺失
递归复制时返回的AccessDenied错误明确指向客户主密钥(CMK)权限问题:你的IAM身份(用户/角色)没有对加密该快照对象的KMS密钥的解密权限。即使拥有S3全访问权限,若对象通过KMS加密,必须同时具备KMS的Decrypt权限才能下载对象。
解决步骤:
(1)确认加密密钥信息
在AWS控制台进入S3桶,找到快照下任意一个.gz.parquet文件,查看其属性中的加密配置:
- 如果是AWS托管的S3密钥,ARN格式为
arn:aws:kms:<region>:<account-id>:key/aws/s3 - 如果是客户托管CMK,会显示该密钥的具体ARN
(2)添加KMS权限策略
给你的IAM用户/角色附加以下权限策略(替换占位符为实际信息):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<your-region>:<your-account-id>:key/<your-cmk-id>" } ] }
- 若CMK属于其他AWS账户,还需要登录该账户,在CMK的密钥策略中添加允许你的账户执行
kms:Decrypt的语句。
(3)验证区域一致性
确保你的AWS CLI配置的区域与S3桶、CMK所在区域一致:
- 查看当前CLI区域:
aws configure get region - 若区域不匹配,执行
aws configure set region <correct-region>,或在复制命令中添加--region <correct-region>参数。
3. 额外验证
执行以下命令确认快照路径下存在对象:
aws s3 ls s3://<your-bucket-name>/<your-snapshot-name>/ --recursive
若能列出所有.gz.parquet文件,说明路径正确,只需补充KMS权限即可完成递归复制。
内容的提问来源于stack exchange,提问作者benmneb
相关产品推荐
相关产品推荐

