同一AWS账户下无法从S3导入Redis RDB备份到ElastiCache
解决ElastiCache导入S3 RDB时“Failed to retrieve from S3”错误
以下是针对同一AWS账户、eu-central-1区域、禁用集群模式场景下的排查和解决步骤:
1. 校验S3桶策略的正确性
先确认你添加的桶策略格式和权限范围是否准确,eu-central-1区域的ElastiCache规范ID确实是540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353,但要确保策略结构符合要求:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353:root" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::你的桶名/*" } ] }
- 替换
你的桶名为实际存储RDB的S3桶名称 - 确保
Resource字段覆盖到具体的RDB文件(用/*可匹配桶内所有对象) - 检查桶内是否存在其他冲突策略(比如拒绝类语句),避免权限被覆盖
2. 检查RDB文件的权限与加密设置
- 确认RDB文件的ACL权限允许ElastiCache服务主体读取,或者文件所有者为当前AWS账户
- 如果RDB文件启用了SSE-KMS加密,需要额外给ElastiCache的规范ID添加KMS密钥的解密权限:
在KMS密钥策略中加入以下语句:{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353:root" }, "Action": "kms:Decrypt", "Resource": "*" }
3. 验证ElastiCache集群的网络访问能力
- 如果集群在VPC内:
- 若使用S3网关端点,检查端点策略是否允许访问目标桶
- 若无端点,确认子网路由表有指向互联网的路由(NAT/互联网网关),且安全组允许出站HTTPS(443)流量到S3
- 检查S3桶是否有IP限制策略,是否阻止了ElastiCache集群的IP段访问
4. 确认RDB文件的兼容性
- 源Redis版本必须与目标ElastiCache Redis版本一致或更低(比如目标是6.2,源不能是7.0)
- 本地尝试加载该RDB文件,验证文件是否损坏(可在本地Redis实例执行
redis-server --dbfilename 你的RDB文件名测试)
5. 借助CloudTrail定位具体错误
在CloudTrail中搜索s3:GetObject操作,查看对应的错误代码:
AccessDenied:权限问题,回到前两步校验NoSuchKey:确认RDB文件路径是否正确,桶名和文件名是否输入错误Throttling:可能触发S3请求限额,稍后重试或申请提额
内容的提问来源于stack exchange,提问作者Thejus Dutt
相关产品推荐
相关产品推荐

