华为云服务器元数据获取_云淘科技

操作场景

弹性云服务器元数据包含了弹性云服务器在云平台的基本信息,例如云服务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

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

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

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

OpenStack类型

/network_data.json

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

OpenStack类型

/securitykey

获取临时的AK、SK。

对弹性云服务器获取临时的AK、SK,需要在IAM上对op_svc_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

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

协议:ANY
端口范围:ANY
远端地址:0.0.0.0/0

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更新时间早于失效时间6个小时,6个小时内新旧临时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

相关链接

Linux操作系统云服务器无法获取元数据怎么办?

父主题: 使用实例自定义数据和元数据

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家