文档

通过元数据从ECS实例内部访问实例属性等信息

更新时间:

ECS实例元数据是指在ECS实例内部通过访问元数据服务(Metadata Service)获取的实例属性等信息,如实例ID、VPC信息、网卡信息。通过元数据服务,您无需登录控制台或调用API,在实例内部即可访问实例信息,可以更便捷、安全地配置或管理正在运行的实例或实例上的程序。例如,运行在ECS实例中的应用程序,可以通过访问实例元数据服务访问绑定到实例上的RAM角色身份凭证(STS),以在不硬编码凭证的情况下访问授权资源(如OSS、KMS、其他ECS等)。

使用限制

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

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

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

访问实例元数据

    重要

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

实例元数据访问模式说明

实例元数据支持普通模式和加固模式两种访问模式。

普通模式和加固模式的区别

对比项

普通模式

加固模式

交互方式

请求/响应

会话

鉴权方式

同VPC内源IP地址鉴权

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

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

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

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

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

查看方法

无需任何访问凭证即可通过命令直接访问endpoint

需要先获取元数据服务器访问凭证进行鉴权,再访问endpoint,提高了元数据访问的安全性

cloud-init版本限制

需确保实例的cloud-init版本为23.2.2。

说明
  • 部分最新发布的公共镜像支持cloud-init 23.2.2版本,您在通过API接口RunInstancesCreateInstance创建新实例时,可以指定ImageId选择cloud-init 23.2.2版本的镜像,选用这些公共镜像创建的实例支持加固模式访问元数据。支持cloud-init 23.2.2版本的公共镜像信息,请参见公共镜像发布记录

  • 如果已有实例的cloud-init版本不满足要求,您可以升级cloud-init版本,从而支持加固模式。检查cloud-init版本及升级方法,请参见安装cloud-init

访问实例元数据

(推荐)加固模式下访问

  • 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

设置实例元数据访问模式

默认情况下,实例元数据可同时通过普通模式和加固模式访问。为了进一步增强安全性,您可以设置实例元数据访问模式为仅加固模式。

新创建实例

通过API接口RunInstancesCreateInstance创建实例时,通过HttpTokens参数设置实例元数据访问模式。该参数取值范围:

  • optional:默认不强制使用加固模式,即可以通过普通模式和加固模式访问实例元数据。

  • required:强制使用加固模式,即仅加固模式。设置该取值后,普通模式无法访问实例元数据。

已有实例

通过API接口ModifyInstanceMetadataOptions修改元数据信息时,通过HttpTokens参数设置实例元数据访问模式。该参数取值范围:

  • optional:默认不强制使用加固模式,即可以通过普通模式和加固模式访问实例元数据。

  • required:强制使用加固模式,即仅加固模式。设置该取值后,普通模式无法访问实例元数据。

通过RAM权限策略限制仅加固模式访问实例元数据

阿里云账号可以通过以下权限策略,实现所有RAM用户(子账号)在通过API接口RunInstancesCreateInstance创建实例或ModifyInstanceMetadataOptions修改已有实例元数据信息时,只能通过仅加固模式访问实例元数据。权限策略内容如下:

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ecs:RunInstances",
        "ecs:CreateInstance",
        "ecs:ModifyInstanceMetadataOptions"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "ecs:SecurityHardeningMode": [
            "false"
          ]
        }
      }
    }
  ]
}

添加权限策略具体操作,请参见通过脚本编辑模式创建自定义权限策略

重要

使用仅加固模式访问实例元数据时,需确保实例的cloud-init版本为23.2.2。如果实例的cloud-init版本不满足要求,可能导致实例无法正常启动。检查cloud-init版本及升级方法,请参见安装cloud-init

实例元数据列表

元数据

说明

示例

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]/vpc-ipv6-cidr-blocks

网卡所属的VPC IPv6 CIDR段,仅支持已配置了IPv6的VPC类型实例。

[2408:XXXX:325:a200::/56]

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]/ipv6s

网卡分配的IPv6地址列表,仅支持已配置了IPv6的VPC类型实例。

[2408:XXXX:325:a204:1875:217f:184a:e4e]

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

网卡所属的VPC的IPv6网关地址。

2408:XXXX:325:a204:ffff:ffff:ffff:fff7

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

网卡所属的虚拟交换机IPv6 CIDR段,仅支持已配置了IPv6的VPC类型实例。

2408:XXXX:325:a204::/64

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

常见问题

加固模式下,使用命令无法访问实例元数据,如何处理?

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

  • 元数据服务器访问凭证的有效期超出范围(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/
  • 本页导读 (1)
文档反馈