在CodeBuild Maven工作中使用适当的ECS凭据



我试图在我的MVN命令中使用CodeBuild服务角色,但它似乎并没有拾取适当的IAM权限。我正在使用S3-Wagon-Provate插件,该插件确实使用了包括EC2ContainerCredentialsProviderWrapper在内的DefaultAWSCredentialsProviderChain的最新版本,因此我认为它应该在Codebuild容器上使用CodeBuild角色。该角色具有适当的S3回购权限,我试图与S3-Wagon-Provate访问。

但看来没有使用clojure项目和project.cloj,就不会默认使用DefaultAWSCredentialsProviderChain。我已经看过Spring AWS Maven和Maven S3 Wagon,但两者都在添加ECS凭据(AWS SDK〜1.11.14)之前使用了DefaultAWSCredentialsProviderChain的版本可以使SDK版本更新/已测试/发布。

有人知道将S3用作Maven Repo的简单手段,并具有DefaultCredentialProviderChain的最新版本?

我的解决方法是将一个设置.xml文件放在S3存储桶中,该文件仅限于我的CodeBuild角色。然后在我的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用户毫无问题地抓住settings.xml文件,从s3带有container iam角色和settings.xml包含一个仅访问S3 Maven Repo的用户的AWS键/秘密:

    <server>
        <id>s3repo</id>
        <username>MYKEY</username>
        <password>MYSECRET</password>
    </server>

然后,我使用的是Maven-S3-Wagon插件,并用<id>s3repo</id>声明<repository>,而我的Maven依赖项可以很好地解决。

该解决方案涉及在构建中迈出的额外步骤,创建了一个额外的仅Maven-Repo-IAM用户(尽管您可能已经拥有一个),并在S3中存储一个额外的文件;但是它可以正常工作,而且看起来很安全。但是,如果有人可以找到一种使用容器的IAM信用来从S3 Maven存储库中拉出的方法,请发布另一个解决方案。

使用AWS容器时(例如CodeBuild确实)。实例元数据与通常的http://169.254.169.254/latest/meta-data/

不同

而是。AWS设置了一个环境变量$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,该变量指向正确的URI以获得元数据。这是AWS SDK和其他工具的要求,才能扮演IAM角色。

AWS容器上的正确URL为:

http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

当前支持AWS SDK的支持此功能,但它可能缺乏旧工具。AWS实例元数据文档对其进行了更详细的解释。

最新更新