首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Rusoto SDK:无法找到AWS凭据

使用Rusoto SDK:无法找到AWS凭据
EN

Stack Overflow用户
提问于 2022-01-02 12:30:34
回答 1查看 239关注 0票数 1

我正在尝试使用新的实例元数据服务版本2 (IMDSv2) API。

当我尝试手动查询元数据时,它就像在检索实例元数据- Amazon弹性计算云上描述的那样正常工作。

但是,如果我试图查询实例标记,它会出现错误消息失败:

无法在环境、凭据文件或IAM角色中找到AWS凭据

标记查询是由我正在使用的Rusoto SDK完成的,当我将--http-tokens optional设置为在配置实例元数据选项- Amazon弹性计算云上描述时,这个查询就能工作。

我不完全理解为什么设置机器与IMDSv2一起工作会影响DescribeTags请求,因为我认为它没有使用相同的API -所以我猜这是一个副作用。

如果我尝试使用curl进行手动查询(而不是使用SDK):

代码语言:javascript
复制
https://ec2.amazonaws.com/?Action=DescribeTags&Filter.1.Name=resource-id&Filter.1.Value.1=ami-1a2b3c4d

我得到:

操作DescribeTags对此web服务无效。

谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-03 05:18:55

我所使用的库(RusotoSDK0.47.0)不支持在主机设置为使用IMDSv2时获取所需的凭据。

解决方法是手动查询IAM角色凭据。首先,您得到了令牌:

代码语言:javascript
复制
GET /latest/api/token

接下来,使用标记头“X-AWS-EC2-元数据-令牌”和前面的值:

代码语言:javascript
复制
GET /meta-data/iam/security-credentials

之后,使用上一次查询的结果(别忘了设置令牌头),查询:

代码语言:javascript
复制
GET /meta-data/iam/security-credentials/<query 2 result>

这将提供以下数据:

代码语言:javascript
复制
struct SecurityCredentials {
#[serde(rename = "AccessKeyId")]
access_key_id: String,
#[serde(rename = "SecretAccessKey")]
secret_access_key: String,
#[serde(rename = "Token")]
token: String,
}

然后,我需要做的是使用该数据构建一个自定义凭据提供程序(但这个部分已经是库特定的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70555972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档