【问题标题】:AWS CodeBuild GetAuthorizationToken failedAWS CodeBuild GetAuthorizationToken 失败
【发布时间】:2021-07-19 11:31:05
【问题描述】:

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

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

我已尝试附加以下政策:

  • IAMSelfManageServiceSpecificCredentials
  • IAMFullAccess
  • AmazonS3ReadOnlyAccess
  • CodeBuildPolicy-Testing-project-1490555003058
  • IAMReadOnlyAccess
  • AWSCodeBuildAdminAccess
  • IAMUserSSHKeys
  • AWSCodeCommitFullAccess
  • IAMFullAccess
  • AmazonS3FullAccess
  • 管理员访问权限
  • AWSElasticBeanstalkFullAccess
  • AWSCodePipelineFullAccess
  • WSCodeBuildAdminAccess

但它仍然给我同样的错误

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

【问题讨论】:

  • 您解决了这个问题吗?

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


【解决方案1】:

实际上 getAuthorizationToken 错误无法在 ECR 内部解决(因为你甚至不会在那里看到 ecr:getAuthorizationToken)。

您需要转到 IAM 面板 => Roles => CodeBuild Role => Grant Policy => AmazonEC2ContainerRegistryReadOnly

这使它能够获得令牌

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这有什么关系? ecr:GetAuthorizationToken 未在该文档中提及,并且在执行这些步骤之后发生错误。
    【解决方案3】:

    当您配置 AWS Codebuild 时,它会创建服务角色并在其中附加默认策略以写入日志并将文件放入 S3 存储桶。为了让 CodeBuild 底层实例能够访问 ECR,您应该将策略附加到该服务角色。

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

    AmazonEC2ContainerRegistryFullAccess

    更多信息:

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

    【讨论】:

      【解决方案4】:

      这是我管理 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"
                  ]
              }
          ]
      }
      

      【讨论】:

        【解决方案5】:

        我遵循这条准则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 会创建两个角色(Code Pipelines 角色和 Code Build 角色)。您需要将策略 AmazonEC2ContainerRegistryFullAccess 添加到代码构建角色。 codebuild 角色的名称将是:codebuild--service-role, 不要将上述策略添加到 AWSCodePipelineServiceRole--。

        【讨论】:

          猜你喜欢
          • 2019-03-31
          • 2020-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-27
          • 2022-10-05
          • 2023-01-28
          • 2019-06-02
          相关资源
          最近更新 更多