全部產品
Search
文件中心

:通過中繼資料服務從ECS執行個體內部擷取執行個體屬性等資訊

更新時間:Aug 03, 2024

ECS執行個體中繼資料是指執行個體ID、VPC資訊、網卡資訊等執行個體屬性資訊,支援在ECS執行個體內部通過訪問中繼資料服務(Metadata Service)擷取。通過該擷取方式,您無需登入控制台或調用API,在執行個體內部即可訪問執行個體資訊,可以更便捷、安全地配置或管理正在啟動並執行執行個體或執行個體上的程式。例如,運行在ECS執行個體中的應用程式,可以通過訪問執行個體中繼資料服務訪問綁定到執行個體上的RAM角色身份憑證(STS),以在不寫入程式碼憑證的情況下訪問授權資源(如OSS、KMS、其他ECS等)。

使用限制

  • ECS執行個體的網路類型為Virtual Private Cloud。

  • 僅支援在執行個體內部訪問中繼資料服務器來訪問執行個體中繼資料,且執行個體需處於運行中狀態。

  • 單一實例高頻訪問中繼資料服務器擷取中繼資料時,可能會導致限流。

    在高頻訪問情境下,建議緩衝已擷取的執行個體中繼資料。以RAM臨時安全憑證為例,擷取到憑證後建議將其緩衝,並在憑證接近到期時間前重新擷取新的憑證,以避免因頻繁訪問執行個體中繼資料服務器而導致的訪問限流。

擷取執行個體中繼資料

通過訪問中繼資料服務(Metadata Service)來擷取執行個體中繼資料,例如執行個體ID、VPC資訊、網卡資訊等。

操作步驟

說明
  • 如果執行個體或執行個體中繼資料中包含了敏感性資料,建議您採取適當的措施來保護敏感性資料,例如存取控制、資料加密等。

  • 訪問中繼資料服務器擷取執行個體中繼資料有加固模式和普通模式兩種。兩種模式的說明,請參見中繼資料服務器訪問模式

加固模式

重要

請確保執行個體的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>:需替換為具體要查詢的執行個體中繼資料,可查閱執行個體中繼資料列表

普通模式

重要

普通模式請求是通過IP地址鑒權,如果您的ECS執行個體上存在錯誤配置的反向 Proxy、未修補的SSRF漏洞等,可能導致與執行個體綁定的RAM角色STS臨時訪問憑證泄露。

  • 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

中繼資料服務器訪問模式

預設情況下,執行個體中繼資料服務器可同時通過普通模式和加固模式訪問。為了進一步增強安全性,您可以設定執行個體中繼資料服務器訪問模式為僅加固模式

訪問模式說明

對比項

普通模式

加固模式

互動方式

請求/響應

會話

鑒權方式

同VPC內源IP地址鑒權

同VPC內源IP地址鑒權+中繼資料服務器訪問憑證鑒權

該訪問憑證具有以下特點:

  • 短時效性:訪問憑證有效期間,且最長為6小時,超過有效期間後將失效,需要重新擷取。

  • 綁定執行個體:僅適用於一台執行個體,如果將憑證複製到其他執行個體使用,會被拒絕訪問。

  • 不接受代理訪問:請求中包含標題X-Forwarded-For,中繼資料服務器會拒絕簽發訪問憑證。

查看方法

無需任何訪問憑證即可通過命令直接存取endpoint

需要先擷取中繼資料服務器訪問憑證進行鑒權,再訪問endpoint,提高了中繼資料訪問的安全性

安全層級

較低

請求通過IP地址鑒權,意味著攻擊者可以偽造請求的源IP地址,繞過IP地址鑒權,進行SSRF攻擊,造成執行個體中繼資料資訊泄露風險。

較高

訪問中繼資料之前,必須先擷取有效中繼資料訪問憑證進行身分識別驗證和授權,該訪問憑證只能在ECS執行個體內部產生,在特定的ECS執行個體上使用,且具有時效性,攻擊者難以通過猜測或偽造的方式產生,可以防範大多數SSRF攻擊。

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

設定訪問模式

新建立執行個體

  • 控制台方式

    在建立ECS執行個體過程中,預設支援通過普通模式或加固模式訪問執行個體中繼資料。

    image

  • API介面方式

    通過API介面RunInstancesCreateInstance建立執行個體時,通過HttpTokens參數設定執行個體中繼資料服務器訪問模式。該參數取值範圍:

    • optional:預設不強制使用加固模式,支援通過普通模式或加固模式訪問執行個體中繼資料。

    • required:強制使用加固模式,即僅加固模式。設定該取值後,無法通過普通模式訪問執行個體中繼資料。

已有執行個體

  • 控制台方式

    1. 在執行個體列表頁,找到待操作的執行個體,在操作列,選擇icon1 > 執行個體設定 > 修改執行個體中繼資料訪問資訊

      image.png

    2. 開啟是否啟用執行個體中繼資料訪問通道,並設定執行個體中繼資料訪問模式

      • 普通:支援通過普通模式或加固模式查看執行個體中繼資料。

      • 僅加固模式(推薦):僅支援通過加固模式查看執行個體中繼資料,普通模式無法訪問執行個體中繼資料。

  • API介面方式

    通過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]/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地址。

  • 執行個體主網卡掛載的Elastic IP Addressv4地址。

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/