AWS CodeBuild GetAuthorizationToken失败

时间:2017-03-26 19:34:41

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

我正在尝试构建我的测试项目,但每次都在 pre_build 中失败。我检查错误日志,然后说:

  

[Container] 2017/03/26 19:28:21调用GetAuthorizationToken操作时发生错误(AccessDeniedException):User:arn:aws:sts :: 074181202020:assume-role / codebuild-Testing-project-service -role / AWSCodeBuild无权执行:ecr:资源上的GetAuthorizationToken:*

我尝试附加以下政策:

  
      
  • IAMSelfManageServiceSpecificCredentials
  •   
  • IAMFullAccess
  •   
  • AmazonS3ReadOnlyAccess
  •   
  • CodeBuildPolicy-测试项目-1490555003058
  •   
  • IAMReadOnlyAccess
  •   
  • AWSCodeBuildAdminAccess
  •   
  • IAMUserSSHKeys
  •   
  • AWSCodeCommitFullAccess
  •   
  • IAMFullAccess
  •   
  • AmazonS3FullAccess
  •   
  • AdministratorAccess
  •   
  • AWSElasticBeanstalkFullAccess
  •   
  • AWSCodePipelineFullAccess
  •   
  • WSCodeBuildAdminAccess
  •   

但它仍然给我同样的错误

任何帮助将不胜感激!谢谢!

5 个答案:

答案 0 :(得分:6)

实际上,无法在ECR内部解决getAuthorizationToken错误(因为您甚至在那儿都看不到ecr:getAuthorizationToken)。

您需要转到IAM面板=>角色=> CodeBuild角色=>授予策略=> AmazonEC2ContainerRegistryReadOnly

这使它能够获得令牌

答案 1 :(得分:3)

您需要为ECR存储库策略添加权限,而不是为CodeBuild服务角色添加权限。此页面包含repo策略的示例: https://docs.aws.amazon.com/codebuild/latest/userguide/sample-ecr.html

答案 2 :(得分:1)

这是我管理ECR的政策。然后,将它附加到要允许访问的用户上:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:PutImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeRepositories",
                "ecr:GetRepositoryPolicy",
                "ecr:ListImages",
                "ecr:DeleteRepository",
                "ecr:BatchDeleteImage",
                "ecr:SetRepositoryPolicy",
                "ecr:DeleteRepositoryPolicy",
                "ecr:GetAuthorizationToken"
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage"
            ]
        }
    ]
}

答案 3 :(得分:1)

当您配置AWS Codebuild时,它将创建服务角色并在其中附加默认策略以写入日志并将文件放入S3存储桶。为了使CodeBuild基础实例有权访问ECR,您应该将策略附加到该服务-role。

您可以使用一些托管策略,例如:

  

AmazonEC2ContainerRegistryFullAccess

有关更多信息:

https://aws.amazon.com/blogs/devops/build-a-continuous-delivery-pipeline-for-your-container-images-with-amazon-ecr-as-source/

答案 4 :(得分:0)

我遵循此准则https://www.stacksimplify.com/aws-eks/aws-devops-eks/learn-to-master-devops-on-aws-eks-using-aws-codecommit-codebuild-codepipeline/#step-08-review-the-buildspecyml-for-codebuild-environment-variables

还注意到,AWS 将创建两个角色(代码管道角色和代码构建角色)。您需要将策略 AmazonEC2ContainerRegistryFullAccess 添加到代码构建角色。 codebuild 角色的名称将是:codebuild--service-role, 请勿将上述策略添加到 AWSCodePipelineServiceRole--。