在CodeBuild maven作业

时间:2017-03-14 19:04:36

标签: maven aws-codebuild

我正在尝试在我的mvn命令中使用CodeBuild服务角色,但它似乎没有获得适当的IAM权限。我使用的s3-wagon-private plugin似乎确实使用了包含DefaultAWSCredentialsProviderChain的{​​{1}}的最新版本,所以我认为它应该使用CodeBuild容器上的CodeBuild角色。该角色对我尝试使用s3-wagon-private访问的S3 repo具有适当的权限。

但似乎没有使用Clojure项目和project.cloj,默认情况下它不会使用EC2ContainerCredentialsProviderWrapper。我查看了Spring AWS MavenMaven S3 Wagon,但在添加ECS凭据(AWS SDK~1.11.14)之前,两者都使用了DefaultAWSCredentialsProviderChain的版本,并且没有看到太多更新他们,所以不要过于自信我们可以更新/测试/发布SDK版本。

有没有人知道使用S3作为最新版DefaultAWSCredentialsProviderChain的maven repo的简单方法?

2 个答案:

答案 0 :(得分:2)

我的解决方法是将一个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用户使用Container IAM角色从S3获取settings.xml文件没有问题,而settings.xml包含只能访问S3 maven repo的用户的AWS密钥/秘密:

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

然后我使用maven-s3-wagon plugin并使用<repository>声明<id>s3repo</id>,我的maven依赖关系解析得很好。

此解决方案涉及构建中的额外步骤,创建另一个仅限maven-repo的IAM用户(尽管您可能已经拥有一个),并在S3中存储额外的文件;但它工作正常,似乎很安全。但是,如果有人能够找到使用Container的IAM信用卡从S3 maven repo中获取的方法,请发布另一个解决方案。

答案 1 :(得分:0)

使用AWS Containers时(与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 Instance Metadata documentation更详细地解释了它。