Bitbucket-S3部署遇Access Denied错误,请求协助排查
解决Bitbucket Pipeline部署S3时的AccessDenied错误
我来帮你排查这个部署权限问题,虽然你的IAM策略看起来授予了全S3权限,但还是有几个常见的坑会触发AccessDenied错误,咱们一步步来排查:
1. 确认Bitbucket中的AWS凭证配置正确
首先要确保你在Bitbucket仓库的Settings > Repository variables中配置的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY完全匹配IAM用户的凭证:
- 检查有没有多余的空格或特殊字符(复制粘贴时很容易出现这类问题)
- 可以尝试重新生成IAM用户的访问密钥,然后更新Bitbucket的变量,避免旧密钥失效
2. 检查S3桶的桶策略与访问控制
S3的权限是IAM策略和桶策略共同作用的,即使IAM用户有全权限,如果桶策略存在Deny规则,会优先生效:
- 登录AWS控制台,进入目标S3桶的Permissions > Bucket Policy页面,检查是否有拒绝写入的语句
- 同时确认桶的ACL没有设置为完全私有,不过你的IAM策略是
s3:*,这个概率较低,但可以快速排查排除
3. 验证LOCAL_PATH的有效性
虽然这不会直接导致权限错误,但可以确认构建产物路径是否正确:
- 查看Pipeline中
ls -ltr的输出,确认dist/portalfrontend目录下存在构建后的文件 - 你当前用
$(pwd)作为LOCAL_PATH是正确的,但也可以尝试直接写dist/portalfrontend(从项目根目录出发的相对路径),避免cd后的路径识别问题
4. 确认AWS区域与桶的区域匹配
你的配置中指定了AWS_DEFAULT_REGION: 'ap-south-1',要确保目标S3桶确实创建在这个区域。区域不匹配可能会引发权限类的错误提示,虽然报错信息不一定完全一致,但可以快速排除这个问题。
5. 本地测试IAM用户权限
用这个IAM用户的凭证在本地执行AWS CLI命令,验证是否能正常上传文件:
# 先创建一个测试文件 echo "test content" > test.txt # 上传到目标桶 aws s3 cp test.txt s3://bitbucket-s3-deployment-xxxxxxxx/test.txt --acl public-read --region ap-south-1
- 如果本地也报错,说明问题出在IAM用户或S3桶的权限配置上
- 如果本地成功,那大概率是Bitbucket Pipeline中的配置问题(比如变量没生效)
6. 排查IAM用户的权限边界与账号SCP
有些AWS账号会通过权限边界或**组织服务控制策略(SCP)**限制用户权限:
- 进入IAM控制台,查看该用户的Permissions > Permissions boundary,确认没有限制S3写入的规则
- 如果你的账号属于AWS组织,检查组织的SCP是否禁止了S3的PutObject操作
额外建议:升级Bitbucket Pipe版本
你当前使用的atlassian/aws-s3-deploy:0.2.4版本比较老旧,建议升级到最新稳定版(比如atlassian/aws-s3-deploy:3.0.0),新版本可能修复了一些权限相关的兼容性问题。
内容的提问来源于stack exchange,提问作者mohammad obaid
相关产品推荐
相关产品推荐

