【问题标题】:get aws credentials from ec2 metadata services in Go从 Go 中的 ec2 元数据服务获取 aws 凭据
【发布时间】:2022-01-15 12:42:34
【问题描述】:

如何让 GO SDK 从AWS 提供的Instance Metadata Service (169.254.169.254) 中获取AWS 的访问密钥。

我查看了官方AWS SDKgo 文档,似乎只有从环境变量中获取访问密钥的方法,但没有来自IMS 的凭据检索器。

这是如何在 go 中完成的?

【问题讨论】:

  • 我冒昧地重写了您的问题,这样它就不会询问有关图书馆的建议。这类问题很快就结束了。 LMK 如果您觉得我的编辑对您的问题的描述不准确
  • 不,这样更好,谢谢

标签: amazon-web-services go


【解决方案1】:

我查看了官方 AWS SDK 的 go 文档,似乎只有从环境变量中获取访问密钥的方法,但没有来自 IMS 的凭据检索器。

你只是错过了它。 Go SDK 支持实例元数据服务以及所有其他常见的凭证提供程序。

来自https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html

如果您已将实例配置为使用 IAM 角色,则开发工具包会自动将这些凭证用于您的应用程序。

您无需执行任何操作即可对其进行配置。它应该可以工作。如果您遇到问题,请确保您没有手动配置某些其他凭据源。

通常你不需要做更多的事情,比如:

  sess := session.Must(
    session.NewSessionWithOptions(session.Options{
      SharedConfigState: session.SharedConfigEnable,
    }),
  )

无论有没有 CLI 配置、元数据服务或环境变量,它都应该可以在任何地方运行。

【讨论】:

  • 从这个会话对象中获取credentials 的正确方法是什么?
  • 您要解决什么问题,导致您想从会话对象中获取凭据?
  • 我正在尝试从实例元数据提供程序获取 AccessKeyIDSecretKey 等凭据。
  • 如果您想直接检索凭证,则没有理由使用 aws sdk。在 GO 中,使用 net/httphttp.Get("https://169.254.169.254/latest/meta-data/iam/security-credentials"),然后使用 http.Get 将特定于实例配置文件角色的结果。相反,如果您使用的是 aws sdk,则没有理由触摸凭据,也不会产生任何好处。
  • 我想创建一个v4.Signer,我需要传递一个凭据对象v4.NewCredentials(cred??)。我如何获得 creds 对象?
猜你喜欢
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多