AWS 代码构建失败,从代码管道启动时无法下载源



我有一个 AWS 代码构建作业,当我以根用户身份手动初始化时,它工作正常。

我有一个代码管道行,当代码提交合并到 master 时,它应该启动构建作业。它会触发作业并启动构建,但在尝试下载源代码时失败。

我将完整的 S3/codebuild/codecommit 策略附加到管道,但它仍然抛出拒绝访问。

我缺少哪些权限?

当您已经有一个 CodeBuild 项目并将其集成到 CodePipeline 项目中时,通常会发生这种情况。Codebuild 现在不会从 CodeCommit/Github 存储库下载源代码。相反,它将尝试下载在 S3 的代码管道存储桶中创建的源构件。因此,您需要向 CodeBuild 角色提供权限,以访问 S3 中的代码pipline 存储桶。

您可以通过修改 Codebuild 角色的附加策略(或附加新策略(来执行此操作,该策略授予对以下操作的访问权限

s3:ListObjects
s3:GetObject
s3:ListBucket

代码管道存储桶及其对象

"arn:aws:s3:::codepipeline-bucket",
"arn:aws:s3:::codepipeline-bucket/*"

或者,您可以选择为此存储桶及其对象添加所有操作。您可以发布更改,它将起作用。如果不是,则为 LMK。

原因是 CodeBuild 服务角色需要访问 CodePipeline S3 存储桶的权限。要解决此问题,您可以附加内联策略或修改现有策略以允许这些操作访问 CodePipeline S3 存储桶中的对象(为策略指定资源(

s3:GetObject
s3:GetObjectVersion
s3:PutObject    

这是 json 中的策略,请记住将 S3-BUCKET-NAME 替换为您的实际代码管道 s3 存储桶名称。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
        }
    ]
}

要查找 S3 存储桶名称,您可以在 AWS 控制台上执行以下操作来跟踪错误源:

  1. 转到代码构建
  2. 在左侧面板上选择"生成项目">
  3. 选择您的项目,将显示构建历史记录
  4. 单击状态为失败的生成运行项
  5. 如果存在,请参阅生成日志中的错误
  6. 选择阶段详细信息
  7. CodeBuild 很可能在DOWNLOAD_SOURCE阶段失败,并显示以下错误消息:
CLIENT_ERROR: AccessDenied: Access Denied status code: 403, request id: 
requestId, host id: hostId for primary source and source version 
arn:aws:s3:::S3-BUCKET-NAME/path

最新更新