从 Go 中的 ec2 元数据服务获取 aws 凭据
Posted
技术标签:
【中文标题】从 Go 中的 ec2 元数据服务获取 aws 凭据【英文标题】:get aws credentials from ec2 metadata services in Go 【发布时间】:2022-01-15 12:42:34 【问题描述】:如何让 GO SDK 从AWS
提供的Instance Metadata Service
(169.254.169.254
) 中获取AWS
的访问密钥。
我查看了官方AWS SDK
的go
文档,似乎只有从环境变量中获取访问密钥的方法,但没有来自IMS
的凭据检索器。
这是如何在 go 中完成的?
【问题讨论】:
我冒昧地重写了您的问题,这样它就不会询问有关图书馆的建议。这类问题很快就结束了。 LMK 如果您觉得我的编辑对您的问题的描述不准确 不,这样更好,谢谢 【参考方案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
的正确方法是什么?
您要解决什么问题,导致您想从会话对象中获取凭据?
我正在尝试从实例元数据提供程序获取 AccessKeyID
或 SecretKey
等凭据。
如果您想直接检索凭证,则没有理由使用 aws sdk。在 GO 中,使用 net/http
到 http.Get("https://169.254.169.254/latest/meta-data/iam/security-credentials")
,然后使用 http.Get
将特定于实例配置文件角色的结果。相反,如果您使用的是 aws sdk,则没有理由触摸凭据,也不会产生任何好处。
我想创建一个v4.Signer
,我需要传递一个凭据对象v4.NewCredentials(cred??)
。我如何获得 creds
对象?以上是关于从 Go 中的 ec2 元数据服务获取 aws 凭据的主要内容,如果未能解决你的问题,请参考以下文章