You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让AWS CodeBuild生成公开S3工件或用CodeDeploy部署非公开工件?

解决AWS CodeDeploy需手动公开S3工件的问题

首先明确:CodeDeploy完全支持部署非公开的S3工件,这是更安全的最佳实践,没必要把工件设为公开。下面分两种场景给你解决方案:

一、推荐:用CodeDeploy部署非公开S3工件

不需要修改S3工件的权限,只要确保CodeDeploy有权限读取即可:

  • 给你的CodeDeploy服务角色添加S3读取权限:在角色的IAM策略中加入针对目标S3桶(或具体工件前缀)的s3:GetObject权限,示例策略片段:
    {
        "Effect": "Allow",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::your-artifact-bucket/*"
    }
    
  • 后续创建CodeDeploy修订时,直接指定S3路径即可,CodeDeploy会自动通过服务角色读取工件,无需手动设公开。

二、如果确实需要CodeBuild直接生成公开工件

你在post_build阶段执行aws s3api命令失败(退出码255),大概率是CodeBuild服务角色权限不足,或者命令格式有误,按以下步骤排查:

  1. 检查CodeBuild服务角色权限:确保角色拥有s3:PutObject和s3:PutObjectAcl权限(针对目标S3桶),添加到IAM策略中:
    {
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl"
        ],
        "Resource": "arn:aws:s3:::your-artifact-bucket/*"
    }
    
  2. 简化命令写法:相比单独调用put-object-acl,更推荐在上传工件时直接指定ACL,比如用s3 cp命令:
    aws s3 cp ./your-build-output-dir s3://your-artifact-bucket/your-artifact-path/ --recursive --acl public-read
    
    这样上传和设置ACL一步完成,减少出错概率。
  3. 验证命令正确性:可以在本地测试命令格式,确保桶名、工件路径没有拼写错误,并且桶的区域和CodeBuild环境区域一致(如果跨区域,需要加--region参数)。

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:27:57