AWS Amplify调用StartDeployment时遭遇S3 AccessDenied错误求助
问题:GitHub Actions + AWS Amplify部署时S3访问被拒(403)
我正在为一系列小型项目搭建基于GitHub Actions和AWS Amplify的CI/CD流程:
- 最初尝试Amplify的「从Git构建」功能,但第二次构建部署后站点出现异常,因此改为在GitHub Actions中完成构建并生成产物
- 目前产物已成功上传至S3存储桶,但调用
StartDeployment命令时始终返回以下错误:
An error occurred (UnauthorizedException) when calling the StartDeployment operation: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied;
已为应用附加具备S3和Amplify访问权限的角色,但问题仍存在。手动更新站点或标记产物为公共可读可临时解决,但不符合安全规范。
现有权限配置
S3存储桶策略
{ "Sid":"Stmt1677734301706", "Effect":"Allow", "Principal":{ "Service":"amplify.amazonaws.com", "AWS":"arn:aws:iam::USERID:role/AmplifyRole" }, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::websites-builds/*" }
Amplify服务角色信任策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "amplify.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- 该服务角色已附加亚马逊托管策略
AdministratorAccess-Amplify,理论上具备完整S3访问权限
排查方向与解决方案
补充S3存储桶必要权限
当前桶策略仅允许s3:GetObject,但Amplify部署时需要ListBucket权限遍历存储桶中的产物。更新后的桶策略如下:{ "Sid":"Stmt1677734301706", "Effect":"Allow", "Principal":{ "Service":"amplify.amazonaws.com", "AWS":"arn:aws:iam::USERID:role/AmplifyRole" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::websites-builds", "arn:aws:s3:::websites-builds/*" ] }注意:
s3:ListBucket的资源目标是存储桶本身,而非对象路径。验证角色关联与调用记录
- 在AWS IAM控制台检查
AmplifyRole的「访问顾问」,确认近期是否有amplify.amazonaws.com的调用记录,排除角色未被正确关联的问题 - 进入Amplify应用设置页面,确认已绑定指定的
AmplifyRole,避免使用默认角色导致权限不足
- 在AWS IAM控制台检查
检查GitHub Actions上传配置
- 确保GitHub Actions中用于上传S3的身份拥有
PutObject权限,且上传的对象ACL保持私有(无需设置公共可读) - 排除上传时意外设置了限制Amplify访问的对象级ACL
- 确保GitHub Actions中用于上传S3的身份拥有
确认角色权限生效
若上述配置调整后问题仍存在,可通过AWS IAM的「模拟策略」功能,验证AmplifyRole对目标S3存储桶的s3:GetObject和s3:ListBucket权限是否正常
内容的提问来源于stack exchange,提问作者Victor Cortes
相关产品推荐
相关产品推荐

