mur*_*att 6 amazon-web-services amazon-iam aws-codepipeline aws-codebuild
嘿云大师:)我需要你的帮助!
我很长一段时间以来一直在尝试为 Docker 容器设置一个从源到构建再到 ECR 到 ECS 的 AWS CodePipeline,其中管道位于部署它的另一个帐户中。实际上,我有多个部署帐户:开发、测试和生产,但是,现在我的目标只是将其部署到开发中。
(此外,在我的设置中,我还在所有三个部署帐户中都有 ECR 存储库 - 与可能与管道相同的帐户中的一个 ECR 存储库相比,这是推荐的方法吗?)
所有这些都使用 CloudFormation 模板,包括 AWS 基础设施和管道。
我目前遇到了 CodeBuild 作为 CodeBuild 及其服务角色推送到另一个帐户中的 ECR 存储库的权限问题。
Pipeline 帐户有一个包含两个阶段的管道:源代码和构建,从 CodeCommit 获取代码,然后使用 CodeBuild 来构建容器。第一阶段有效,但第二阶段无效,buildspec.yml无法登录到我的 ECR 存储库,如下所示:
pre_build:
commands:
- $(aws ecr get-login --no-include-email --region eu-west-1 --registry-ids DEV_ACCOUNT_ID)
Run Code Online (Sandbox Code Playgroud)
此操作失败并出现明显的预期错误:
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken
operation: User: arn:aws:sts::PIPELINE_ACCOUNT_ID:assumed-role/delivery-pipeline-foundation-BuildProjectRole-AAGTGRD1TAPI/AWSCodeBuild-25244ee4-e337-4617-b203-d1687a6a116e
is not authorized to perform: ecr:GetAuthorizationToken on resource: *
Run Code Online (Sandbox Code Playgroud)
CodeBuild 项目服务角色没有跨账户访问 ECR 的权限。我知道这一点,但还不知道如何解决它。
AFAIK,CodePipeline 需要同一帐户中的服务角色。构建项目服务角色也必须位于同一帐户中,并提供对 CodeBuild、工件存储和 KMS 等的权限。
我尝试在开发帐户中为 CodeBuild 项目赋予角色,但收到错误:
Failed to call UpdateProject, reason: Invalid service role: Service role account
ID does not match caller's account (Service: AWSCodeBuild; Status Code: 400;
Error Code: InvalidInputException; Request ID: 123458e0-f5d4-4ac9-1060-067e70123249)
Run Code Online (Sandbox Code Playgroud)
总之,管道需要管道帐户中的角色,对于 CodeBuild 项目也是如此。这一切都是有意义的,因为它们在那里运行并且还需要访问工件 S3 存储桶和相关的 KMS。
那么,如何以及在哪里提供登录 ECR 以及稍后推送到特定存储库的角色/权限,以便 docker 命令可以在文件中buildspec.yml
?
我计划在构建阶段工作后使用 CodeDeploy ECS 进行部署。
是否建议跨账户部署采用总体方法和/或您是否使用其他方法?
大多数在线示例都更简单,使用 具有此相关问题的单个帐户 或只是没有 ECR 的一般跨帐户(我正在工作)。
预先感谢您对此的帮助!
| 归档时间: |
|
| 查看次数: |
3098 次 |
| 最近记录: |