AWS EC2 |使用 Rusoto SDK:找不到 AWS 凭证
AWS EC2 | using Rusoto SDK: Couldn't find AWS credentials
我正在尝试使用新的 Instance Metadata Service Version 2 (IMDSv2) API。
当我尝试按照 Retrieve instance metadata - Amazon Elastic Compute Cloud 中所述手动查询元数据时,它按预期工作。
但是,如果我尝试查询实例标签,它会失败并显示错误消息:
Couldn't find AWS credentials in environment, credentials file, or IAM role
标签查询由Rusoto SDK that I am using, that works when I set --http-tokens optional
as described on Configure the instance metadata options - Amazon Elastic Compute Cloud完成。
我不完全理解为什么将机器设置为使用 IMDSv2 会影响 DescribeTags
请求,因为我认为它没有使用相同的 API - 所以我猜这是一方面效果。
如果我尝试使用 curl(而不是使用 SDK)进行手动查询:
https://ec2.amazonaws.com/?Action=DescribeTags&Filter.1.Name=resource-id&Filter.1.Value.1=ami-1a2b3c4d
我得到:
The action DescribeTags is not valid for this web service
谢谢:)
我使用的库 (Rusoto SDK 0.47.0) 不支持在主机设置为使用 IMDSv2 时获取所需的凭据。
解决方法是手动查询 IAM 角色凭据。
首先,您获得令牌:
GET /latest/api/token
接下来,使用令牌header“X-aws-ec2-metadata-token”和之前的值:
GET /meta-data/iam/security-credentials
之后,使用之前查询的结果(不要忘记设置token header),查询:
GET /meta-data/iam/security-credentials/<query 2 result>
这将提供以下数据:
struct SecurityCredentials {
#[serde(rename = "AccessKeyId")]
access_key_id: String,
#[serde(rename = "SecretAccessKey")]
secret_access_key: String,
#[serde(rename = "Token")]
token: String,
}
然后我需要做的是使用该数据构建一个自定义凭证提供程序(但这部分已经是特定于库的)。
我正在尝试使用新的 Instance Metadata Service Version 2 (IMDSv2) API。
当我尝试按照 Retrieve instance metadata - Amazon Elastic Compute Cloud 中所述手动查询元数据时,它按预期工作。
但是,如果我尝试查询实例标签,它会失败并显示错误消息:
Couldn't find AWS credentials in environment, credentials file, or IAM role
标签查询由Rusoto SDK that I am using, that works when I set --http-tokens optional
as described on Configure the instance metadata options - Amazon Elastic Compute Cloud完成。
我不完全理解为什么将机器设置为使用 IMDSv2 会影响 DescribeTags
请求,因为我认为它没有使用相同的 API - 所以我猜这是一方面效果。
如果我尝试使用 curl(而不是使用 SDK)进行手动查询:
https://ec2.amazonaws.com/?Action=DescribeTags&Filter.1.Name=resource-id&Filter.1.Value.1=ami-1a2b3c4d
我得到:
The action DescribeTags is not valid for this web service
谢谢:)
我使用的库 (Rusoto SDK 0.47.0) 不支持在主机设置为使用 IMDSv2 时获取所需的凭据。
解决方法是手动查询 IAM 角色凭据。 首先,您获得令牌:
GET /latest/api/token
接下来,使用令牌header“X-aws-ec2-metadata-token”和之前的值:
GET /meta-data/iam/security-credentials
之后,使用之前查询的结果(不要忘记设置token header),查询:
GET /meta-data/iam/security-credentials/<query 2 result>
这将提供以下数据:
struct SecurityCredentials {
#[serde(rename = "AccessKeyId")]
access_key_id: String,
#[serde(rename = "SecretAccessKey")]
secret_access_key: String,
#[serde(rename = "Token")]
token: String,
}
然后我需要做的是使用该数据构建一个自定义凭证提供程序(但这部分已经是特定于库的)。