如何判断 EC2 实例使用的是哪个版本的实例元数据服务 (IMDS)?
How to tell what version of Instance Metadata Service(IMDS) EC2 instance is using?
我想知道我的 ec2 实例使用的是哪个版本的实例元数据服务。
如果你想从EC2实例中判断,你可以尝试向http://169.254.169.254/发送请求,看看状态码是什么。
例如,此实例启用了 IMDSv2,不接受没有令牌的请求:
$ curl -w "%{http_code}\n" http://169.254.169.254/
401
401 状态码表示未授权。
如果您拥有有权描述 EC2 实例的 AWS 访问密钥,那么您可以运行以下内容:
$ aws ec2 describe-instances --region us-west-2 --instance-id i-0123456789abcdef --query "Reservations[0].Instances[0].MetadataOptions"
{
"State": "applied",
"HttpTokens": "optional",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled"
}
此服务器不需要 IMDSv2(HttpTokens
是 optional
)。
要启用 IMDSv2,您可以 运行 aws ec2 modify-instance-metadata-options
。在 AWS documentation on configuring the instance metadata options.
中查看更多内容
让我总结一下我的发现here
- 通过 AWS 控制台中的 EC2 服务连接到实例
- 输入 IMDSv1 命令:
curl http://169.254.169.254/latest/meta-data/
- 如果您收到列表项,则您的实例可以使用 IMDSv1 请求。如果您收到
401 - Unauthorized
那么它使用 IMDSv2 或非。
- 现在输入 IMDSv2 命令:
TOKEN=curl -X PUT "<http://169.254.169.254/latest/api/token"> -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
- 如果您收到项目列表,则您的实例可以使用 IMDSv2 请求。否则,您的实例根本不允许请求元数据(无论版本如何)
如果要更改此配置follow this。
我想知道我的 ec2 实例使用的是哪个版本的实例元数据服务。
如果你想从EC2实例中判断,你可以尝试向http://169.254.169.254/发送请求,看看状态码是什么。
例如,此实例启用了 IMDSv2,不接受没有令牌的请求:
$ curl -w "%{http_code}\n" http://169.254.169.254/
401
401 状态码表示未授权。
如果您拥有有权描述 EC2 实例的 AWS 访问密钥,那么您可以运行以下内容:
$ aws ec2 describe-instances --region us-west-2 --instance-id i-0123456789abcdef --query "Reservations[0].Instances[0].MetadataOptions"
{
"State": "applied",
"HttpTokens": "optional",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled"
}
此服务器不需要 IMDSv2(HttpTokens
是 optional
)。
要启用 IMDSv2,您可以 运行 aws ec2 modify-instance-metadata-options
。在 AWS documentation on configuring the instance metadata options.
让我总结一下我的发现here
- 通过 AWS 控制台中的 EC2 服务连接到实例
- 输入 IMDSv1 命令:
curl http://169.254.169.254/latest/meta-data/
- 如果您收到列表项,则您的实例可以使用 IMDSv1 请求。如果您收到
401 - Unauthorized
那么它使用 IMDSv2 或非。 - 现在输入 IMDSv2 命令:
TOKEN=curl -X PUT "<http://169.254.169.254/latest/api/token"> -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
- 如果您收到项目列表,则您的实例可以使用 IMDSv2 请求。否则,您的实例根本不允许请求元数据(无论版本如何)
如果要更改此配置follow this。