从codepipeline启动时,AWS codebuild无法下载源代码

时间:2018-01-24 18:12:58

标签: amazon-web-services aws-codepipeline aws-codebuild

我有一个AWS codebuild作业,当我以root用户身份手动启动时,它可以正常工作。

我有一个codepipe行,当codecommit合并到master时,它应该启动构建作业。它会触发作业和构建开始,但在尝试下载源时失败。

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

我错过了哪些权限?

2 个答案:

答案 0 :(得分:6)

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

您可以通过修改 Codebuild角色的附加政策(或附加新政策)来执行此操作,以便访问以下操作

s3:ListObjects
s3:GetObject
s3:ListBucket

您的 Codepipeline存储桶及其对象

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

或者您可以选择为此存储桶及其对象添加所有操作。您可以发布更改,它可以工作。 Lmk如果没有。

答案 1 :(得分:0)

原因是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. 转到CodeBuild
  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