AWS RDS还原S3中SQL Server备份文件提示Access Denied如何解决
报错根因
你遇到的Access Denied报错和备份文件是否公开无关,RDS读取S3文件是通过你绑定的具备S3_INTEGRATION功能的IAM角色完成的,走的是IAM权限校验,不会用匿名身份访问公开文件,报错的核心原因是角色、权限、配置链路中的某一环出现了问题,常见原因如下:
- IAM角色的权限策略未授予S3桶和备份文件的读权限
- IAM角色的信任策略未允许RDS服务代入该角色
SQLSERVER_BACKUP_RESTORE选项绑定的IAM角色有误,或选项组未正确附加到RDS实例- S3桶自定义Bucket Policy拦截了IAM角色的访问请求
- 还原命令中填写的S3文件ARN拼写错误,桶名/文件名与实际不匹配
修复步骤
1. 修正IAM角色权限策略
给你绑定的IAM角色附加如下权限策略,替换[bucketname]为你的实际S3桶名:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::[bucketname]", "arn:aws:s3:::[bucketname]/*" ] } ] }
2. 修正IAM角色信任策略
确认角色的信任关系允许RDS服务代入,正确配置如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
3. 确认选项组配置生效
- 进入RDS控制台选项组页面,确认你创建的带
SQLSERVER_BACKUP_RESTORE选项的组,已经正确关联了上述配置好的IAM角色ARN - 确认该选项组已经附加到你的RDS实例上,配置修改后等待3-5分钟让配置同步完成,不需要重启实例
4. 检查S3桶策略规则
如果你的S3桶配置了自定义Bucket Policy,确认没有规则阻止该IAM角色的GetObject、ListBucket请求,移除针对该角色的限制规则即可。
5. 重新发起还原任务
确认所有配置正确后,重新执行还原命令即可。额外提示:如果你只需要还原这一个完整备份,不需要后续还原差异备份/事务日志,可以把命令里的@with_norecovery=1改成@with_norecovery=0,否则还原完成后数据库会处于恢复中状态无法直接使用。
内容的提问来源于stack exchange,提问作者Baegopa
相关产品推荐
相关产品推荐

