我目前正在成功使用 codebuild 来执行简单的构建任务(在非 vpc 配置中)。
但现在我尝试运行一个读取 SSM 参数值的构建任务,但它失败了,因为它无法加载任何凭据,明显的原因是:
com.amazonaws.auth.InstanceProfileCredentialsProvider@5754b242: Unable to load credentials from service endpoint
我分配给 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
它不会像正常 EC2 环境那样返回实例元数据,而是会超时。
因此,问题的根源似乎是代码构建环境无法与 AWS 元数据查找地址配合使用,这导致 AWS 提供商链无法查找凭证。
如何从 codebuild 读取 SSM 参数(无需硬编码或使用 SDK 凭据的环境变量)?
我可以问你为什么不使用内置方法AWS CodeBuild
?您可以从中获取参数SSM
通过你的构建规范AWS CodeBuild
项目。在这种情况下,通过 Java SDK 进行的额外调用已过时。
version: 0.2
env:
parameter-store:
key: "value"
key: "value"
phases:
build:
commands:
- command
- command
参数存储:如果指定了 env 并且您想要
检索存储在 Amazon EC2 Systems 中的自定义环境变量
管理器参数存储。包含键/值标量的映射,
其中每个映射代表一个自定义环境变量
存储在 Amazon EC2 Systems Manager 参数存储中。关键是名字
您稍后将在构建命令中使用来引用此自定义
环境变量,value是自定义环境的名称
存储在 Amazon EC2 Systems Manager 参数存储中的变量。
欲了解更多信息,请查看AWS CodeBuild 的构建规范参考 https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)