我正在尝试在我的 mvn 命令中使用 CodeBuild 服务角色,但它似乎没有获得适当的 IAM 权限。我正在使用 s3-wagon-private plugin它似乎确实使用了包含 EC2ContainerCredentialsProviderWrapper
的最新版本的 DefaultAWSCredentialsProviderChain
,因此我认为它应该在 CodeBuild 容器上使用 CodeBuild 角色。该角色对我尝试使用 s3-wagon-private 访问的 S3 存储库具有适当的权限。
但看起来如果不使用 Clojure 项目和 project.cloj,那么默认情况下它不会使用 DefaultAWSCredentialsProviderChain
。我看过Spring AWS Maven和 Maven S3 Wagon但两者都在添加 ECS 凭证(AWS SDK ~1.11.14)之前使用 DefaultAWSCredentialsProviderChain
版本,并且没有看到太多更新,所以我们不能过于自信我们可以获得 SDK版本更新/测试/发布。
有谁知道使用 S3 作为最新版本的 DefaultCredentialProviderChain
的 Maven 存储库的简单方法?
最佳答案
我的解决方法是将 settings.xml 文件放入仅限我的 CodeBuild 角色使用的 S3 存储桶中。然后在我的 buildspec.yaml 文件中,添加以下内容:
phases:
build:
commands:
- aws s3 cp s3://MY_SECURE_BUCKET/settings.xml ~/.m2/settings.xml
- ls -lhr ~/.m2/settings.xml
- mvn -s ~/.m2/settings.xml package
CodeBuild 用户可以毫无问题地从具有容器 IAM 角色的 S3 获取 settings.xml 文件,并且 settings.xml 包含一个 AWS key / secret ,供只能访问 S3 maven 存储库的用户使用:
<server>
<id>s3repo</id>
<username>MYKEY</username>
<password>MYSECRET</password>
</server>
然后我使用 maven-s3-wagon plugin并声明 <repository>
与 <id>s3repo</id>
我的 Maven 依赖项解决得很好。
此解决方案涉及构建中的一个额外步骤,创建一个额外的 maven-repo-only IAM 用户(尽管您可能已经有一个),并在 S3 中存储一个额外的文件;但它工作正常并且看起来很安全。但是,如果有人能想出一种使用容器的 IAM 凭据从 S3 maven 存储库中提取数据的方法,请发布另一个解决方案。
关于maven - 在 CodeBuild maven 作业上使用适当的 ECS 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42794486/