ECS实例元数据是指在ECS实例内部通过访问元数据服务(Metadata Service)获取的实例属性等信息,如实例ID、VPC信息、网卡信息。通过元数据服务,您无需登录控制台或调用API,在实例内部即可获取实例信息,可以更便捷、安全地配置或管理正在运行的实例或实例上的程序。例如,在基于ECS实例的应用程序中,通过元数据获取实例RAM角色的临时访问凭证,以安全地访问相关授权资源(比如访问OSS下载文件)。
使用限制
仅网络类型为专有网络VPC的ECS支持实例元数据功能。
仅支持在实例内部访问元数据服务器来获取实例元数据,且实例需处于运行中状态。
单实例高频访问元数据服务器获取元数据,可能会导致限流。在高频访问场景下,建议缓存已获取的实例元数据。以RAM临时安全凭证为例,获取到凭证后建议将其缓存,并在凭证接近过期时间前重新获取新的凭证,以避免因频繁访问实例元数据服务器而导致的访问限流。
获取实例元数据
实例或实例元数据中若包含了敏感数据,建议您采取适当的措施来保护敏感数据,例如访问控制、数据加密等。
两种模式的区别
(推荐)加固模式下获取
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 | 该实例元数据项用于获取以下信息:
| 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角色,则 | 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/