繁体   English   中英

将 Docker 映像从 AWS Codebuild 推送到另一个账户的 ECR

[英]Pushing Docker Image to Another Account's ECR from AWS Codebuild

我正在尝试从管道帐户构建 docker 映像并将其推送到另一个帐户(开发)的 ECR 中。

虽然我能够将 docker 从代码构建推送到同一账户(管道)内的 ECR 存储库,但我在为外部 AWS 账户 ECR 执行此操作时遇到了困难。

附加到开发帐户上的 ECR 存储库的策略:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowCrossAccountPush",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<pipelineAccountID>:role/service-role/<codebuildRole>"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:CompleteLayerUpload",
        "ecr:GetDownloadUrlForLayer",
        "ecr:InitiateLayerUpload",
        "ecr:PutImage",
        "ecr:UploadLayerPart"
      ]
    }
  ]
}

在我的管道帐户中,运行构建项目的服务角色与上述策略中的 ARN 匹配,并且我的构建规范包含以下推送映像的片段:

- $(aws ecr get-login --no-include-email --region us-east-1 --registry-ids <DevAccount>)
- docker tag <imageName>:latest $ECR_REPO_DEV:latest
- docker push $ECR_REPO_DEV:latest

Codebuild 能够成功登录 ECR,但是当它尝试实际推送图像时,我得到:

*denied: User: arn:aws:sts::<pipelineAccountID>:assumed-role/<codebuildRole>/AWSCodeBuild-413cfca0-133a-4f37-b505-a94668201e26 is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:us-east-1:<DevAccount>:repository/<repo>*

此外,我已经继续并确保角色的 IAM 策略(位于 codepipeline 帐户上)具有此 repo 的权限:

 {
            "Sid": "CrossAccountRepo",
            "Effect": "Allow",
            "Action": "ecr:*",
            "Resource": "arn:aws:ecr:us-east-1:<DevAccount>:repository/sg-api"
}

我现在对我可能会丢失什么一无所知。 唯一想到的是让构建以跨账户角色运行,但我什至不确定这是否可能。 我的目标是将构建管道与开发分开。 我听说这是最佳做法。

建议?

提前致谢。

根据我对此的理解和上面的错误消息,最常见的原因是 ECR 存储库没有允许 CodeBuild IAM 角色访问它的策略。

请在 ECR 回购中设置此政策:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowCrossAccountPush",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<dev acount>:root"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload"
            ]
        }
    ]
}

请在 CodeBuild 服务角色上添加此策略:

{
            "Sid": "CrossAccountRepo",
            "Effect": "Allow",
            "Action": "ecr:*",
            "Resource": "*"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM