如何解决授予 AWS CodeBuild 对 AWS CodeArtifact 的访问权限
我必须使用 AWS 帐户 - A 和 B。
帐户 A 设置了 CodeArtifact 存储库。在帐户 A 中,我创建了一个到帐户 B 的具有 TrustRelationship 的角色。我已将带有 codeartifact:*
和 sts:GetServiceBearerToken
的策略附加到此角色的权限。
账户 B 有一个带有 Codebuild 的 CodePipeline。 Codebuild 正在使用它自己的 Build 角色。在帐户 B 的 Codebuild 中构建的源代码的构建规范中,我试图:
aws codeartifact login --tool npm --repository accountA-repository --domain accountA
这当然行不通,因为:
调用时发生错误 (AccessDeniedException) GetAuthorizationToken 操作: 用户: arn:aws:sts::xxx:assumed-role/accountB-CodeBuildServiceRol/AWSCodeBuild-xxx 未被授权执行:codeartifact:GetAuthorizationToken on 资源:arn:aws:codeartifact:us-x::domain/accountA
我尝试在帐户 B 的 CodeBuild 中的 buildspec.yaml
中进行假设,但没有成功。有没有办法通过代码构建角色来承担角色?或者有没有更好的方法来授予 CodeBuild 权限?尝试搜索但没有找到这种情况。所有示例似乎都使用相同的帐户。
您如何允许来自帐户 B 的 CodeBuild 与来自帐户 A 的 CodeArtifact 交互?
解决方法
根据 CodeBuild 文档,可以为 CodeBuild 角色分配跨账户权限
https://docs.aws.amazon.com/codebuild/latest/userguide/auth-and-access-control.html
跨账户访问 – 您可以在您的账户中使用 IAM 角色授予另一个 AWS 账户访问您账户资源的权限。有关示例,请参阅 IAM 用户指南中的教程:使用 IAM 角色跨 AWS 账户委派访问权限。
我建议再次检查您的 Code Build ACL 的配置
,对于任何努力寻找这个问题的答案的人。假设 buildspec.yaml 中的角色有效,但并不那么简单。这是我在调用 npm install
之前所做的:
- mkdir ~/.aws/ && touch ~/.aws/config
- echo "[profile buildprofile]" > ~/.aws/config
- echo "role_arn = $CODE_ARTIFACT_ROLE_ARN" >> ~/.aws/config
- echo "credential_source = EcsContainer" >> ~/.aws/config
- aws codeartifact login --tool npm --repository accountArepo --domain accountA --domain-owner xxxx --profile buildprofile
我已经从 CloudFormation CODE_ARTIFACT_ROLE_ARN
资源传递了 AWS::CodeBuild::Project
环境变量。我相信你也可以配置它控制台。
This answer 非常有用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。