更新时间:2025-02-19 gmt 08:00

通过元数据获取ecs基本信息-九游平台

操作场景

弹性云服务器元数据包含了弹性云服务器在云平台的基本信息,例如云服务id、主机名、网络信息等。弹性云服务器元数据支持两种风格,可以分别通过兼容openstack和兼容ec2的api获取,如表1所示。对于支持的元数据类型,本节详细介绍了其uri和使用方法。

使用须知

如果元数据中包含了敏感数据,您应当采取适当的措施来保护敏感数据,比如限制访问范围、加密等。

防火墙配置示例如下所示:

  • windows

    如果您不希望管理员之外的用户访问实例自定义数据,请以管理员身份开启防火墙后,在powershell 中执行下面的命令,阻止非管理员用户访问实例自定义数据:

    ps c:\>$rejectprincipal = new-object -typename system.security.principal.ntaccount ("everyone")

    ps c:\>$rejectprincipalsid = $rejectprincipal.translate([system.security.principal.securityidentifier]).value

    ps c:\>$exceptprincipal = new-object -typename system.security.principal.ntaccount ("administrator")

    ps c:\>$exceptprincipalsid = $exceptprincipal.translate([system.security.principal.securityidentifier]).value

    ps c:\>$principalsddl = "o:lsd:(d;;cc;;;$exceptprincipalsid)(a;;cc;;;$rejectprincipalsid)"

    ps c:\>new-netfirewallrule -displayname "reject metadata service for $($rejectprincipal.value), exception: $($exceptprincipal.value)" -action block -direction out -protocol tcp -remoteaddress 169.254.169.254 -localuser $principalsddl

  • linux

    如果您不希望root之外的用户访问自定义实例自定义数据,请以root用户权限执行下面的命令,阻止非root用户访问自定义实例自定义数据:

    iptables --append output --proto tcp --destination 169.254.169.254 --match owner ! --uid-owner root --jump reject

弹性云服务器元数据类别支持列表

表1中不包含兼容ec2类型的ami-id、ami-launch-index、ami-manifest-path、block-device-mapping/、instance-action、instance-id、reservation-id、ramdisk-id、kernel-id元数据项,以上元数据项均无实际含义,不建议使用。

表1 弹性云服务器元数据类别支持列表

元数据类型

实例元数据项

约束说明

openstack类型

/meta_data.json

查询弹性云服务器的元数据信息。

元数据的关键字段请参见表2

openstack类型

/password

查询弹性云服务器的密码。

windows系统使用keypairs创建弹性云服务器初始化时cloudbase-init用于保存密文密码。

openstack类型

/user_data

查询弹性云服务器的自定义数据。

用户根据需要自行指定脚本和配置文件用于弹性云服务器初始化,详细操作请参考通过实例自定义数据配置ecs实例

若linux虚拟化使用密码方式,则保存注入密码的脚本。

openstack类型

/network_data.json

查询弹性云服务器的网络信息。

openstack类型

/securitykey

获取临时的ak、sk。

弹性云服务器获取临时的ak、sk,需要在iam上对op_svc_ecs账户进行委托授权,并对相应的弹性云服务器资源进行授权委托管理。

说明:

委托的授权权限由用户自行设置,建议根据实际业务需要进行最小化授权。

ecs服务本身不会使用委托对资源进行操作。

openstack类型

/spot/instance-action

查询竞价实例关机提示。

兼容ec2类型

/meta-data/hostname

查询弹性云服务器的主机名称。

请参考以下链接为弹性云服务器去掉后缀.novalocal:

弹性云服务器的主机名带后缀.novalocal

兼容ec2类型

/meta-data/local-hostname

该字段含义同hostname一致。

兼容ec2类型

/meta-data/public-hostname

该字段含义同hostname一致。

兼容ec2类型

/meta-data/instance-type

查询弹性云服务器的规格名称。

兼容ec2类型

/meta-data/local-ipv4

查询弹性云服务器的固定ip地址。

多网卡情况下,只显示主网卡的地址。

兼容ec2类型

/meta-data/placement/availability-zone

查询弹性云服务器的az信息。

兼容ec2类型

/meta-data/public-ipv4

查询弹性云服务器弹性公网ip地址。

多网卡情况下,只显示主网卡的弹性公网ip地址。

兼容ec2类型

/meta-data/public-keys/0/openssh-key

查询弹性云服务器的公钥。

兼容ec2类型

/user-data

查询弹性云服务器的自定义数据。

兼容ec2类型

/meta-data/security-groups

查询弹性云服务器所使用的安全组名称。

表2 metadata关键字段

参数

参数类型

描述

uuid

string

弹性云服务器的id。

availability_zone

string

弹性云服务器所在可用区。

meta

dict

元数据信息,包括镜像名称、镜像id、vpc id等信息。

hostname

string

弹性云服务器主机名。

请参考以下链接为弹性云服务器去掉后缀.novalocal:

弹性云服务器的主机名带后缀.novalocal

enterprise_project_id

string

查询弹性云服务器的企业项目id信息。

前提条件

  • 已登录弹性云服务器
  • 请确保安全组出方向规则满足如下要求,否则访问元数据请求失败:
    • 协议:tcp
    • 端口范围:80
    • 远端地址:169.254.0.0/16

    如果您使用的是默认安全组出方向规则,则已经包括了如上要求,可以正常访问元数据。默认安全组出方向规则请参见默认安全组和规则

metadata(openstack元数据api)

用于查询弹性云服务器的元数据。

  • uri

    /169.254.169.254/openstack/latest/meta_data.json

  • 方法

    支持get请求。

  • 示例:

    linux操作系统:以使用curl工具为例,介绍查询弹性云服务器元数据的方法。

    curl http://169.254.169.254/openstack/latest/meta_data.json

    windows操作系统:以使用invoke-restmethod工具为例,介绍查询弹性云服务器元数据的方法。

    invoke-restmethod http://169.254.169.254/openstack/latest/meta_data.json | convertto-json

    {
        "random_seed": "reoccvirs dnwlydgixjhup 00poeusadbfkbpbyqtmpnwpoeb43k9z 96tyreknks ilyddrny4kkgonpevbcc05hg1tcdblapfjwgjs1okqetlcofuhkml3k0fto 5kxedu3gnugwyzxjdvb9hqwu e1jztajjjqsahnu g/tawabtvyslbklat8fmgax1mtggarucn/wzdcy19dgiokpe7f8iltsq4ww3vclk5vyb/h0x 4r7ivhrpmyx/bi1yhm3dc4rrynatjdov5guosbo3oaeqkmkwq/no0n8qw5ya4l8zuw4tmav4mosrysoob35v0bvajc6p 50dtbwnex5a2mliehtp3vsprmvk4lrf7clz2j2tgim14oovbw7larwmv9cz532zhki/c8tlhrzlmotxh/wl36zfw10deureugmxth7ignmrmqkv6 mii78jm/kmppgadk3vwyf/gcelofjd2hghmuucembwynvijltejubpwhjmniha/nvlesxjdxqbcoss/jfe ycmufyxovj l8onktzkmtcnzw3ra0hikchghqk3bietov/kvx5ddf081xrea qyom6cvyfjteoz1zlrryoo9bj65eg6jjd8dj1ucvsdqry1pijgze/mzsw6aaacvhamjl7u7ymvdykza6z65xtvujz0vo=",
        "uuid": "ca9e8b7c-f2be-4b6d-a639-f10b4d994d04",
        "availability_zone": "lt-test-1c",
        "enterprise_project_id" : "0",
        "hostname": "ecs-ddd4.novalocal",
        "launch_index": 0,
        "instance_type": "s3.medium.2",
        "meta": {
            "metering.image_id": "3a64bd37-955e-40cd-ab9e-129db56bc05d",
            "metering.imagetype": "gold",
            "metering.resourcespeccode": "s3.medium.2.linux",
            "admin_pass": "",
            "metering.cloudservicetype": "hws.service.type.ec2", 
            "image_name": "centos 7.6 64bit",
            "metering.resourcetype": "1", 
            "vpc_id": "3b6c201f-aeb3-4bce-b841-64756e66cb49",
            "os_bit": "64",
            "cascaded.instance_extrainfo": "pcibridge:1",
            "os_type": "linux",
            "charging_mode": "0"
            "__support_agent_list": "hss,ces"
        },
        "region_id": "xxx",
        "project_id": "6e8b0c94265645f39c5abbe63c4113c6",
        "name": "ecs-ddd4"
    }

user data(openstack元数据api)

用于查询弹性云服务器的自定义数据。该值仅在创建弹性云服务器时指定,不支持修改。

  • uri

    /169.254.169.254/openstack/latest/user_data

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/openstack/latest/user_data

    windows操作系统:

    invoke-restmethod http://169.254.169.254/openstack/latest/user_data

    icagicagdqoiqsbjbg91zcbkb2vzig5vdcbrbm93ihdoesbpdcbtb3zlcybpbibqdxn0ihn1y2ggysbkaxjly3rpb24gyw5kigf0ihn1y2ggysbzcgvlzc4ulkl0igzlzwxzigfuigltchvsc2lvbi4ulnroaxmgaxmgdghlihbsywnlihrvigdvig5vdy4gqnv0ihrozsbza3kga25vd3mgdghlihjlyxnvbnmgyw5kihrozsbwyxr0zxjucybizwhpbmqgywxsignsb3vkcywgyw5kihlvdsb3awxsigtub3csihrvbywgd2hlbib5b3ugbglmdcb5b3vyc2vsziboawdoigvub3vnacb0bybzzwugymv5b25kighvcml6b25zliincg0klvjpy2hhcmqgqmfjaa==
    如果创建弹性云服务器时未注入自定义数据,此时,该接口的查询结果是404,如图1所示。
    图1 404 not found

network data(openstack元数据api)

查询弹性云服务器的网络信息,支持查询云服务器挂载的全部网卡的信息,包括网卡所在子网的dns地址、网络带宽、网卡id、网卡私有ip地址、网卡弹性公网ip地址、网卡的mac地址。

  • uri

    /openstack/latest/network_data.json

  • 方法

    支持get请求

  • 示例

    instance_max_bandwidth、instance_min_bandwidth的单位是mbps,如果取值为-1,说明对带宽大小无限制。

    linux操作系统:

    curl http://169.254.169.254/openstack/latest/network_data.json

    windows操作系统:

    invoke-restmethod http://169.254.169.254/openstack/latest/network_data.json | convertto-json

    {
        "services": [{
            "type": "dns",
            "address": "xxx.xx.x.x"
        },
        {
            "type": "dns",
            "address": "100.125.21.250"
        }],
        "qos":{
            "instance_min_bandwidth": 100,
            "instance_max_bandwidth": 500
        },
        "networks": [{
            "network_id": "67dc10ce-441f-4592-9a80-cc709f6436e7",
            "type": "ipv4_dhcp",
            "link": "tap68a9272d-71",
            "id": "network0"
        }],
        "links": [{
            "vif_id": "68a9272d-7152-4ae7-a138-3ef53af669e7",
            "public_ipv4": "100.100.xx.xx",
            "ethernet_mac_address": "fa:16:3e:f7:c1:47",
            "mtu": null,
            "local_ipv4": "192.169.10.10",
            "type": "cascading",
            "id": "tap68a9272d-71"
        }]
    }

security key(openstack元数据api)

获取临时的ak、sk。

  • 您如果需要在弹性云服务器获取临时的ak、sk,需要在iam对弹性云服务器进行云服务委托授权,并在相应的弹性云服务器的详情页面“管理信息 > 委托”栏目中添加委托。

    详细操作请参考委托其他云服务管理资源

  • 临时的ak、sk有效期24个小时。临时的ak、sk过期时间的响应参数为utc时间格式,北京时间为utc 8小时。建议您根据业务需要,在过期时间到期前重新获取ak、sk。
  • 使用临时ak、sk时,需要在消息的header中增加'x-security-token':{securitytoken}。其中,securitytoken就是调用接口返回的值。
  • uri

    /openstack/latest/securitykey

  • 方法

    支持get请求

  • 示例

    linux操作系统:

    curl http://169.254.169.254/openstack/latest/securitykey

    windows操作系统:

    invoke-restmethod http://169.254.169.254/openstack/latest/securitykey

instance action(openstack元数据api)

用于查询竞价实例关机提示。

如果您的竞价实例即将被中断,该接口会返回预计关机的时间。

  • uri

    /openstack/latest/spot/instance-action

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/openstack/latest/spot/instance-action

    windows操作系统:

    invoke-restmethod http://169.254.169.254/openstack/latest/spot/instance-action

    {"action":"terminate","timestamp":"2023-06-01 09:15:00"}

user data(ec2-兼容的api)

用于查询弹性云服务器的自定义。该值仅在创建弹性云服务器时指定,不支持修改。

  • uri

    /169.254.169.254/latest/user-data

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/user-data

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/user-data

    icagicagdqoiqsbjbg91zcbkb2vzig5vdcbrbm93ihdoesbpdcbtb3zlcybpbibqdxn0ihn1y2ggysbkaxjly3rpb24gyw5kigf0ihn1y2ggysbzcgvlzc4ulkl0igzlzwxzigfuigltchvsc2lvbi4ulnroaxmgaxmgdghlihbsywnlihrvigdvig5vdy4gqnv0ihrozsbza3kga25vd3mgdghlihjlyxnvbnmgyw5kihrozsbwyxr0zxjucybizwhpbmqgywxsignsb3vkcywgyw5kihlvdsb3awxsigtub3csihrvbywgd2hlbib5b3ugbglmdcb5b3vyc2vsziboawdoigvub3vnacb0bybzzwugymv5b25kighvcml6b25zliincg0klvjpy2hhcmqgqmfjaa==

hostname(ec2-兼容的api)

用于查询弹性云服务器的主机名称,后面会追加.novalocal后缀。

  • uri

    /169.254.169.254/latest/meta-data/hostname

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/meta-data/hostname

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/meta-data/hostname

    vm-test.novalocal

instance type(ec2-兼容的api)

用于查询弹性云服务器的规格名称。

  • uri

    /169.254.169.254/latest/meta-data/instance-type

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/meta-data/instance-type

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/meta-data/instance-type

    s3.medium.2

local ipv4(ec2-兼容的api)

用于查询弹性云服务器的固定ip地址。多网卡情况下,只显示主网卡的地址。

  • uri

    /169.254.169.254/latest/meta-data/local-ipv4

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/meta-data/local-ipv4

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/meta-data/local-ipv4

    192.1.1.2

availability zone(ec2-兼容的api)

用于查询弹性云服务器的az信息。

  • uri

    /169.254.169.254/latest/meta-data/placement/availability-zone

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/meta-data/placement/availability-zone

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/meta-data/placement/availability-zone

    az1.dc1

public ipv4(ec2-兼容的api)

用于查询弹性云服务器弹性公网ip地址。多网卡情况下,只显示主网卡的弹性公网ip地址。

  • uri

    /169.254.169.254/latest/meta-data/public-ipv4

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/meta-data/public-ipv4

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/meta-data/public-ipv4

    46.1.1.2

public keys(ec2-兼容的api)

用于查询弹性云服务器的公钥。

  • uri

    /169.254.169.254/latest/meta-data/public-keys/0/openssh-key

  • 方法

    支持get请求。

  • 示例

    linux操作系统:

    curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

    windows操作系统:

    invoke-restmethod http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

    ssh-rsa aaaab3nzac1yc2eaaaadaqabaaabaqdi5fw5k8fgzajn1zjwlov3 wmp 6cyvssiic/hioggsnyu/ad0yqm8vvo0kwlun1rfbdo quzkyvr/opujqsw4srh4qstkf/ efowtjplfvd1wcbzzs/wrenxiwr00kkczhsjro763 wycwkieb4ekrxaqoqvofgvjlbulxajh4ekoktvntmxavpp9amy2slgsjntmb9arfziaiblqynq7uiflnn3vclzpeiwrqtzjyop6cpuxnl0lvptvble8sutebsjzwll6k4i y0lf3ryqnmqgc21yw4dzu kwk8fvt2mgwkcwizd8gq/ ujzrjfymfuobiklobfuuenijuhab generated-by-nova

相关文档

网站地图