全部产品
Search
文档中心

云服务器 ECS:通过元数据从ECS实例内部获取实例属性等信息

更新时间:Jan 04, 2024

ECS实例元数据是指在ECS实例内部通过访问元数据服务(Metadata Service)获取的实例属性等信息,如实例ID、VPC信息、网卡信息。通过元数据服务,您无需登录控制台或调用API,在实例内部即可获取实例信息,可以更便捷、安全地配置或管理正在运行的实例或实例上的程序。例如,在基于ECS实例的应用程序中,通过元数据获取实例RAM角色的临时访问凭证,以安全地访问相关授权资源(比如访问OSS下载文件)。

使用限制

  • 仅网络类型为专有网络VPC的ECS支持实例元数据功能。

  • 仅支持在实例内部访问元数据服务器来获取实例元数据,且实例需处于运行中状态。

  • 单实例高频访问元数据服务器获取元数据,可能会导致限流。在高频访问场景下,建议缓存已获取的实例元数据。以RAM临时安全凭证为例,获取到凭证后建议将其缓存,并在凭证接近过期时间前重新获取新的凭证,以避免因频繁访问实例元数据服务器而导致的访问限流。

获取实例元数据

    重要

    实例或实例元数据中若包含了敏感数据,建议您采取适当的措施来保护敏感数据,例如访问控制、数据加密等。

两种模式的区别

ECS实例的元数据默认同时支持普通模式和加固模式来获取元数据。两者区别如下:

对比项

普通模式

加固模式

交互方式

请求/响应

会话

鉴权方式

同VPC内源IP地址鉴权

同VPC内源IP地址鉴权+元数据服务器访问凭证鉴权

该访问凭证具有以下特点:

  • 短时效性:访问凭证有效期,且最长为6小时,超过有效期后将失效,需要重新获取。

  • 绑定实例:仅适用于一台实例,如果将凭证复制到其他实例使用,会被拒绝访问。

  • 不接受代理访问:请求中包含标头X-Forwarded-For,元数据服务器会拒绝签发访问凭证。

查看方法

通过命令直接访问endpoint

先获取元数据服务器访问凭证进行鉴权,再访问endpoint。

(推荐)加固模式下获取

  • Linux实例

    # 获取访问元数据服务器访问凭证,需设置有效期,不可包含标头X-Forwarded-For
    TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:<元数据服务器访问凭证有效期>"`
    # 获取实例元数据
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/<metadata>
  • Windows实例

    # 获取访问元数据服务器访问凭证,需设置有效期,不可包含标头X-Forwarded-For
    $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "<元数据服务器访问凭证有效期>"} -Method PUT –Uri http://100.100.100.200/latest/api/token
    # 获取实例元数据
    Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/<metadata>
    • <元数据服务器访问凭证有效期>:访问凭证用于鉴权以加强数据安全。有效期取值范围为1~21600,单位为秒。

      • 在有效期内可重复使用实例元数据获取命令获取任何元数据信息;超过有效期后,凭证失效需重新获取,否则无法获取实例元数据。

      • 访问凭证仅适用于一台实例,如果将凭证复制到其他实例使用,会被拒绝访问。

    • <metadata>:需替换为具体要查询的实例元数据,可查阅实例元数据列表

普通模式下获取

  • Linux实例

    curl http://100.100.100.200/latest/meta-data/<metadata>
  • Windows实例(PowerShell)

    Invoke-RestMethod http://100.100.100.200/latest/meta-data/<metadata>

<metadata>:需替换为具体要查询的实例元数据,可查阅实例元数据列表

示例

以获取实例所属VPC ID为例,命令如下。

加固模式

假设,设置元数据服务器访问凭证有效期为180秒。

  • Linux实例

    TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:180"`
    curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/vpc-id
  • Windows实例

    $token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "180"} -Method PUT –Uri http://100.100.100.200/latest/api/token
    Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/vpc-id

普通模式

  • Linux实例

    curl http://100.100.100.200/latest/meta-data/vpc-id
  • Windows实例

    Invoke-RestMethod http://100.100.100.200/latest/meta-data/vpc-id

实例元数据列表

元数据

说明

示例

dns-conf/nameservers

实例的DNS配置。

100.100.XX.XX

hostname

实例的主机名。

iZbp13znx0m0me8cquu****

instance/instance-type

实例规格。

ecs.g6e.large

instance/instance-name

实例名称

iZbp1bfqfsvqzxhmnd5****

image-id

创建实例时所使用的镜像ID。

aliyun_3_x64_20G_alibase_20210425.vhd

image/market-place/product-code

云市场镜像的商品码。

cmjj01****

image/market-place/charge-type

云市场镜像的计费方式。

PrePaid

instance-id

实例ID。

i-bp13znx0m0me8cquu****

mac

实例的MAC地址,如果实例存在多个网卡,只显示eth0上的MAC地址。

00:16:3e:0f:XX:XX

network-type

网络类型,只支持VPC类型实例。

vpc

network/interfaces/macs/[mac]/network-interface-id

网卡的标识ID,其中[mac]参数需要替换为实例的MAC地址。

eni-bp1b2c0jvnj0g17b****

network/interfaces/macs/[mac]/netmask

网卡对应的子网掩码。

255.255.XX.XX

network/interfaces/macs/[mac]/vswitch-cidr-block

网卡所属的虚拟交换机IPv4 CIDR段。

192.168.XX.XX/24

network/interfaces/macs/[mac]/vpc-cidr-block

网卡所属的VPC IPv4 CIDR段。

192.168.XX.XX/16

network/interfaces/macs/[mac]/private-ipv4s

网卡分配的私网IPv4地址列表。

["192.168.XX.XX"]

network/interfaces/macs/[mac]/vswitch-id

网卡所属安全组的虚拟交换机ID。

vsw-bp1ygryo03m39xhsy****

network/interfaces/macs/[mac]/vpc-id

网卡所属安全组的VPC ID。

vpc-bp1e0g399hkd7c8q3****

network/interfaces/macs/[mac]/primary-ip-address

网卡主私有IP地址。

192.168.XX.XX

network/interfaces/macs/[mac]/gateway

网卡对应的IPv4网关地址。

192.168.XX.XX

instance/max-netbw-egress

实例规格的出方向内网最大带宽。单位:Kbit/s。

1228800

network/interfaces/macs/[mac]/ipv4-prefixes

网卡分配的私网IPv4前缀列表。

192.168.XX.XX/28

network/interfaces/macs/[mac]/ipv6-prefixes

网卡分配的IPv6前缀列表。

2001:db8:1234:1a00:XXXX::/80

disks/[disk-id]/id

云盘ID。

d-bp131n0q38u3a4zi****

disks/[disk-id]/name

云盘名称。

testDiskName

private-ipv4

实例主网卡的私网IPv4地址。

192.168.XX.XX

public-ipv4

实例主网卡的公网IPv4地址。

120.55.XX.XX

eipv4

该实例元数据项用于获取以下信息:

  • 实例的固定公网IPv4地址。

  • 实例主网卡挂载的弹性公网IPv4地址。

120.55.XX.XX

ntp-conf/ntp-servers

NTP服务器地址。

ntp1.aliyun.com

owner-account-id

实例拥有者的阿里云账号ID。

1609****

region-id

实例所属地域。

cn-hangzhou

zone-id

实例所属可用区。

cn-hangzhou-i

public-keys/[keypair-id]/openssh-key

公有密钥。仅在实例启动时提供了公有密钥的情况下可用。

ssh-rsa ****3NzaC1yc2EAAAADAQABAAABAQDLNbE7pS****@****.com

serial-number

实例所对应的序列号。

4acd2b47-b328-4762-852f-998****

source-address

镜像库地址,主要为yum源或者apt源,供Linux实例的包管理软件获取更新。

http://mirrors.cloud.aliyuncs.com

kms-server

Windows实例的KMS激活服务器。

kms.cloud.aliyuncs.com

wsus-server/wu-server

Windows实例的更新服务器。

http://update.cloud.aliyuncs.com

wsus-server/wu-status-server

Windows实例的更新状态监控服务器。

http://update.cloud.aliyuncs.com

vpc-id

实例所属VPC ID。

vpc-bp1e0g399hkd7c8q****

vpc-cidr-block

实例所属VPC CIDR段。

192.168.XX.XX/16

vswitch-cidr-block

实例所属虚拟交换机CIDR段。

192.168.XX.XX/24

vswitch-id

实例所属虚拟交换机ID。

vsw-bp1ygryo03m39xhsy****

/ram/security-credentials/[role-name]

如果存在与实例关联的RAM角色,则role-name为角色的名称,并且role-name包含与角色关联的临时安全凭证。如果没有,则不显示。

AliyunECSImageExportDefaultRole

instance/spot/termination-time

抢占式实例的操作系统设置的停机释放时间,时区标准为UTC+0,格式为yyyy-MM-ddThh:mm:ssZ。

2020-04-07T17:03:00Z

instance/virtualization-solution

ECS虚拟化方案,支持Virt 1.0和Virt 2.0。

ECS Virt

instance/virtualization-solution-version

内部Build号。

2.0

常见问题

Q:加固模式下,使用命令无法获取实例元数据。

A:请确认命令是否正确。常见错误命令如下:

  • 元数据服务器访问凭证的有效期超出范围(1秒~21600秒)

    curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds: 21700"
  • 请求中存在X-Forwarded-For标头

    curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-Forwarded-For: www.ba****.com"
  • 指定的元数据服务器访问凭证无效

    curl -H "X-aliyun-ecs-metadata-token: aaa" -v http://100.100.100.200/latest/meta-data/