如何在使用AWS Codebuild时读取SSM参数?

Sho*_*orn 6 amazon-web-services aws-codebuild

我目前正在成功使用codebuild进行简单的构建任务(在非vpc配置中).

但是现在我正在尝试运行一个读取SSM参数值的构建任务,并且它失败了,因为它无法加载任何凭据,明显的原因是:

com.amazonaws.auth.InstanceProfileCredentialsProvider@5754b242: Unable to load credentials from service endpoint
Run Code Online (Sandbox Code Playgroud)

我分配给codebuild项目的IAM服务角色确实拥有ssm:GetParameters我正在尝试读取的参数的权限(如果这是问题,我希望看到一条unauthorized消息,而不是unable to load credentials).

我正在使用Java SDK进行SSM GetParameter调用,我已经确认从EC2实例运行时可以从SSM参数读取,所以我很确定这里的问题是Codebuild.

为了进一步诊断问题,我尝试添加构建命令来curl对照AWS实例元数据地址:

curl 169.254.169.254/latest/meta-data/iam/info
Run Code Online (Sandbox Code Playgroud)

它不是像普通的EC2环境那样返回实例元数据,而是超时.

因此,问题的根源似乎是代码构建环境不能与AWS元数据查找地址一起使用,这会导致AWS提供商链无法查找凭据.

如何从codebuild读取我的SSM参数(没有硬编码或使用SDK凭据的环境变量)?

Mai*_*KaY 8

请问您为什么不使用内置方法AWS CodeBuild?您可以SSM通过AWS CodeBuild项目的构建规范获取参数.在这种情况下,通过Java SDK的附加调用已过时.

version: 0.2

env:
  parameter-store:
    key: "value"
    key: "value"

phases:
  build:
    commands:
      - command
      - command
Run Code Online (Sandbox Code Playgroud)

parameter-store:如果指定了env,则需要,并且您要检索存储在Amazon EC2 Systems Manager参数存储中的自定义环境变量.包含键/值标量的映射,其中每个映射表示存储在Amazon EC2 Systems Manager参数存储中的单个自定义环境变量.key是您稍后将在构建命令中用于引用此自定义环境变量的名称,value是存储在Amazon EC2 Systems Manager参数存储中的自定义环境变量的名称.

有关更多信息,请查看AWS CodeBuild构建规范参考