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地址鑒權+中繼資料服務器訪問憑證鑒權 該訪問憑證具有以下特點:
|
查看方法 | 無需任何訪問憑證即可通過命令直接存取endpoint | 需要先擷取中繼資料服務器訪問憑證進行鑒權,再訪問endpoint,提高了中繼資料訪問的安全性 |
安全層級 | 較低 請求通過IP地址鑒權,意味著攻擊者可以偽造請求的源IP地址,繞過IP地址鑒權,進行SSRF攻擊,造成執行個體中繼資料資訊泄露風險。 | 較高 訪問中繼資料之前,必須先擷取有效中繼資料訪問憑證進行身分識別驗證和授權,該訪問憑證只能在ECS執行個體內部產生,在特定的ECS執行個體上使用,且具有時效性,攻擊者難以通過猜測或偽造的方式產生,可以防範大多數SSRF攻擊。 |
cloud-init版本限制 | 無 | 需確保執行個體的cloud-init版本為23.2.2。 重要
|
設定訪問模式
新建立執行個體
控制台方式
在建立ECS執行個體過程中,預設支援通過普通模式或加固模式訪問執行個體中繼資料。
API介面方式
通過API介面RunInstances或CreateInstance建立執行個體時,通過
HttpTokens
參數設定執行個體中繼資料服務器訪問模式。該參數取值範圍:optional
:預設不強制使用加固模式,支援通過普通模式或加固模式訪問執行個體中繼資料。required
:強制使用加固模式,即僅加固模式。設定該取值後,無法通過普通模式訪問執行個體中繼資料。
已有執行個體
控制台方式
在執行個體列表頁,找到待操作的執行個體,在操作列,選擇 > 執行個體設定 > 修改執行個體中繼資料訪問資訊。
開啟是否啟用執行個體中繼資料訪問通道,並設定執行個體中繼資料訪問模式。
普通:支援通過普通模式或加固模式查看執行個體中繼資料。
僅加固模式(推薦):僅支援通過加固模式查看執行個體中繼資料,普通模式無法訪問執行個體中繼資料。
API介面方式
通過API介面ModifyInstanceMetadataOptions修改中繼資料資訊時,通過
HttpTokens
參數設定執行個體中繼資料訪問模式。該參數取值範圍:optional
:預設不強制使用加固模式,支援通過普通模式或加固模式訪問執行個體中繼資料。required
:強制使用加固模式,即僅加固模式。設定該取值後,普通模式無法訪問執行個體中繼資料。
限制RAM使用者僅能通過加固模式擷取執行個體中繼資料
阿里雲帳號可以通過以下權限原則,實現所有RAM使用者(子帳號)在通過API介面RunInstances、CreateInstance建立執行個體或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/ | 雲端硬碟序號。 | bp131n0q38u3a4zi**** |
disks/[disk-serial]/id | 雲端硬碟ID。 | d-bp131n0q38u3a4zi**** |
disks/[disk-serial]/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角色,則 |
|
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 |