2

我正在尝试在我的 mvn 命令中使用 CodeBuild 服务角色,但它似乎没有获得适当的 IAM 权限。我正在使用s3-wagon-private 插件,它似乎使用了最新版本的DefaultAWSCredentialsProviderChaininclude EC2ContainerCredentialsProviderWrapper,所以我认为它应该使用 CodeBuild 容器上的 CodeBuild 角色。该角色对我尝试使用 s3-wagon-private 访问的 S3 存储库具有适当的权限。

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

有谁知道将 S3 用作最新版本的 maven repo 的简单方法DefaultCredentialProviderChain

4

2 回答 2

4

我的解决方法是将 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 包含一个 AWS 密钥/秘密,供只能访问 S3 maven 存储库的用户使用:

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

然后我正在使用maven-s3-wagon 插件并声明一个<repository>with<id>s3repo</id>并且我的 maven 依赖项解析得很好。

此解决方案涉及构建中的一个额外步骤,创建一个额外的 maven-repo-only IAM 用户(尽管您可能已经有一个),并在 S3 中存储一个额外的文件;但它工作正常并且看起来很安全。但是,如果有人能想出一种使用容器的 IAM 凭据从 S3 maven repo 中提取的方法,请发布另一个解决方案。

于 2017-03-15T01:26:54.473 回答
4

使用 AWS 容器时(就像 CodeBuild 一样)。实例元数据与通常的位置不同http://169.254.169.254/latest/meta-data/

反而。$AWS_CONTAINER_CREDENTIALS_RELATIVE_URIAWS 设置一个指向正确 URI的环境变量以获取元数据。AWS 开发工具包和其他工具需要这样做才能承担 IAM 角色。

AWS 容器上的正确 URL 是:

http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

当前支持的 AWS SDK 支持此功能,但旧工具可能缺少此功能。AWS Instance Metadata 文档对其进行了更详细的解释。

于 2017-10-31T05:52:22.343 回答