嘿云大师:)我需要你的帮助!
很长时间以来,我一直在尝试将AWS CodePipeline从源代码设置为在管道位于另一个容器中的Docker容器上构建到ECR到ECS部署帐户。其实我有多次部署帐户:开发人员,测试人员和生产人员,但是,现在我只是打算将其部署到开发人员
((在我的设置中,我在所有三个部署帐户中也都有ECR存储库-与可能的一个ECR回购相比,这是推荐的方法吗?与管道相同的帐户?)
[所有人都在使用CloudFormation模板,包括AWS下文以及管道。
我目前在CodeBuild推送到ECR存储库时遇到权限问题在另一个帐户中,称为CodeBuild及其服务角色。
[管道帐户]的管道分为两个阶段:来源和构建采用CodeCommit中的代码,然后CodeBuild来构建容器。第一阶段工作正常,但在buildspec.yml
无法登录ECR的情况下无法工作我喜欢这样的回购:
pre_build:
commands:
- $(aws ecr get-login --no-include-email --region eu-west-1 --registry-ids DEV_ACCOUNT_ID)
此操作失败,出现明确的预期错误:
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: *
CodeBuild项目服务角色没有交叉帐户的权限访问ECR。我知道,但还没有解决的方法。
AFAIK,CodePipeline需要在同一帐户中担任服务角色。构建项目服务角色还必须在同一帐户中并提供权限到CodeBuild,工件存储和KMS。
我试图让CodeBuild项目在Dev帐户中起作用,但出现错误:
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)
总而言之,管道需要管道帐户中的角色,对于CodeBuild项目。所有这些都有意义,因为那些人在那里奔跑,还需要访问文物S3存储桶和相关的KMS。
因此,如何以及在何处以及在何处提供角色/权限来登录ECR以及以后推送到特定的存储库中,以便docker命令可以在buildspec.yml
中文件?
我计划在构建阶段工作后使用CodeDeploy ECS进行部署。
是建议跨帐户部署的整体方法和/或还有其他方法吗?
[大多数在线示例很多simpler with a single account与this related issue或只是general cross-account without ECR(我在工作)。
在此先感谢您的帮助!
您可以在另一个拥有ECR存储库的帐户中创建一个用户,并将其访问密钥和秘密密钥作为环境变量提供给您的CodeBuild项目。