運行於ECS執行個體的應用,可通過中繼資料服務動態查詢執行個體ID、IP等執行個體中繼資料資訊,避免寫入程式碼。為防範SSRF攻擊導致中繼資料泄露,建議通過加固模式訪問中繼資料(需先擷取存取權杖),並配置執行個體僅允許加固模式訪問,以有效規避普通模式下的安全風險。
擷取執行個體中繼資料
執行個體中繼資料是執行個體自身屬性的集合,包含執行個體ID、網路環境、憑證等關鍵屬性。
方式一:加固模式(推薦)
通過加固模式訪問中繼資料時,需先擷取臨時存取權杖(Token),然後攜帶令牌擷取中繼資料。
Linux
登入執行個體。
擷取臨時令牌(Token)。
TOKEN=`curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds:21600"`參數X-aliyun-ecs-metadata-token-ttl-seconds: 令牌有效期間,取值範圍:1~21600(秒)
攜帶令牌(Token)擷取中繼資料。
curl -H "X-aliyun-ecs-metadata-token: $TOKEN" http://100.100.100.200/latest/meta-data/instance-id命令末尾的
instance-id代表擷取執行個體ID,可替換為其他需要擷取的中繼資料項。例如mac(擷取MAC地址)或hostname(擷取主機名稱)。成功執行後,終端將僅輸出執行個體ID字串,例如:
i-bp1******
Windows
登入執行個體。
擷取臨時令牌(Token)。
$token = Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://100.100.100.200/latest/api/token參數X-aliyun-ecs-metadata-token-ttl-seconds: 令牌有效期間,取值範圍1~21600(秒)。
攜帶令牌(Token)擷取中繼資料。
Invoke-RestMethod -Headers @{"X-aliyun-ecs-metadata-token" = $token} -Method GET -Uri http://100.100.100.200/latest/meta-data/instance-id命令末尾的
instance-id代表擷取執行個體ID,可替換為其他需要擷取的中繼資料項。例如mac(擷取MAC地址)或hostname(擷取主機名稱)。成功執行後,終端將僅輸出執行個體ID字串,例如:
i-bp1******
方式二:普通模式
普通模式是一種不安全的訪問方式,不推薦使用。
Linux:
# 直接發送GET請求擷取執行個體ID curl http://100.100.100.200/latest/meta-data/instance-idWindows:
# 直接發送GET請求擷取執行個體ID。 Invoke-RestMethod -Uri http://100.100.100.200/latest/meta-data/instance-id -Method Get
開啟僅允許加固模式訪問中繼資料
為防範嚴重安全風險,建議為ECS執行個體啟用僅加固模式,啟用後,僅能通過加固模式訪問中繼資料,任何普通模式訪問都會報錯(403 - Forbidden)。預設情況下,ECS執行個體支援無令牌訪問中繼資料(普通模式),存在被伺服器端請求偽造 (SSRF) 攻擊的嚴重風險。
典型攻擊情境:利用應用程式從外部URL下載圖片的功能,構造惡意請求,誘使伺服器代替其訪問內部中繼資料服務,竊取執行個體綁定的RAM角色的臨時訪問憑證,若該角色許可權過高,攻擊者便可能獲得雲資源控制許可權,甚至接管整個雲帳號。
建立新執行個體時啟用僅加固模式
控制台
在自訂購買執行個體時,將調整為僅加固模式。
使用自訂鏡像建立執行個體時,若無僅加固模式選項,需對鏡像進行升級。
CLI
在通過RunInstances或CreateInstance建立執行個體時,可通過配置HttpEndpoint=enabled和HttpTokens=required設定執行個體的中繼資料訪問模式為僅加固模式。命令樣本如下:
執行該命令後,會建立一台僅加固模式的Linux執行個體。
aliyun ecs RunInstances \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--ImageId 'aliyun_3_x64_20G_alibase_20250629.vhd' \
--InstanceType 'ecs.g7.large' \
--VSwitchId 'vsw-bp1******trg' \
--SecurityGroupId 'sg-bp1******dgl' \
--SystemDisk.Size 40 \
--SystemDisk.Category cloud_essd \
--HttpEndpoint enabled \
--HttpTokens requiredAPI
在通過RunInstances或CreateInstance建立執行個體時,通過配置HttpEndpoint=enabled和HttpTokens=required設定執行個體的中繼資料存取原則為僅加固模式。
將已有執行個體升級到僅加固模式
適用範圍
Windows執行個體:不支援開啟僅加固模式。強行開啟將導致執行個體初始化異常,並影響主機名稱修改、KMS啟用等多項關鍵功能。
Linux執行個體:支援升級,但在操作前必須完成下文所述的依賴項排查與改造。
步驟一:排查並升級代碼及依賴項
在切換到僅加固模式之前,執行個體及其中部署的應用,必須確保滿足以下要求:
確保Cloud-init版本不低於23.2.2:可登入執行個體並執行
cloud-init --version命令查看目前的版本。若版本過低,切換僅加固模式後將導致執行個體啟動異常,請先升級Cloud-init版本到23.2.2或更高版本。所有應用代碼/指令碼已通過方式一:加固模式訪問執行個體中繼資料。
重要若應用代碼依賴Credentials庫擷取STS Token配置SDK,需將Credentials依賴升級至支援加固模式的版本。
升級完成後,可如何檢測ECS執行個體是否存在普通模式的中繼資料訪問?,在確定不存在普通模式訪問後,開啟執行個體的僅加固模式。
步驟二:切換到僅加固模式
控制台
進入ECS控制台-執行個體,選擇地區與資源群組。
在操作列單擊。
開啟是否啟用執行個體中繼資料訪問通道開關,並設定執行個體中繼資料訪問模式為僅加固模式,然後單擊確定。

CLI
調用ModifyInstanceMetadataOptions,設定HttpEndpoint=enabled、HttpTokens=required切換執行個體中繼資料訪問模式為僅加固模式。命令樣本:
aliyun ecs ModifyInstanceMetadataOptions \
--region cn-hangzhou \
--RegionId 'cn-hangzhou' \
--InstanceId 'i-bp1******ke' \
--HttpEndpoint enabled \
--HttpTokens requiredAPI
調用ModifyInstanceMetadataOptions,設定HttpEndpoint=enabled、HttpTokens=required切換執行個體中繼資料訪問模式為僅加固模式。
切換完成後,建議持續監控執行個體的中繼資料訪問情況和應用運行狀態,確保業務平穩運行,避免因遺漏改造的應用而導致服務中斷。若出現異常,建議先切換回普通模式和加固模式,優先恢複業務,然後重新進一步步驟一:排查並升級代碼及依賴項。
執行個體中繼資料明細
執行個體中繼資料採用類似目錄結構的層級方式進行組織,支援逐級訪問。當訪問一個中繼資料目錄時,將返回其包含的下一級中繼資料條目或子目錄。例如訪問meta-data/instance/,會顯示instance-name和instance-type等資訊。
分類 | 中繼資料 | 說明 | 樣本 |
執行個體基本資料 |
| 執行個體ID。 |
|
| 執行個體名稱。 |
| |
| 執行個體的主機名稱。 |
| |
| 執行個體規格。 |
| |
| 執行個體所對應的序號。 |
| |
| 執行個體所屬地區ID。 |
| |
| 執行個體所屬可用性區域。 |
| |
| 執行個體擁有者的阿里雲帳號ID。 |
| |
| 用於擷取執行個體的指定標籤值,其中 使用此功能,需先調用ModifyInstanceMetadataOptions介面,將執行個體的 |
| |
鏡像資訊 |
| 建立執行個體時所使用的鏡像ID。 |
|
| 雲市場鏡像的商品碼。 |
| |
| 雲市場鏡像的計費方式。 |
| |
| 鏡像庫地址,主要為yum源或者apt源,供Linux執行個體的包管理軟體擷取更新。 |
| |
基礎網路設定 |
| 網路類型,只支援VPC類型執行個體。 |
|
| 執行個體所屬VPC ID。 |
| |
| 執行個體所屬VPC CIDR段。 |
| |
| 執行個體所屬虛擬交換器ID。 |
| |
| 執行個體所屬虛擬交換器CIDR段。 |
| |
| 執行個體規格的出方向內網最大頻寬。單位:Kbit/s。 |
| |
| 執行個體的DNS配置。 |
| |
| NTP伺服器位址。 |
| |
主網卡IP地址 |
| 執行個體的MAC地址,如果執行個體存在多個網卡,則只顯示eth0上的MAC地址。 |
|
| 執行個體主網卡的私網IPv4地址。 |
| |
| 執行個體主網卡的公網IPv4地址。 |
| |
| 擷取執行個體的固定公網IPv4地址或主網卡掛載的Elastic IP Addressv4地址。 |
| |
彈性網卡詳細資料 |
| 網卡的標識ID。 [mac]參數需要替換為執行個體的MAC地址(可通過中繼資料mac擷取),下同。 |
|
| 網卡所屬的VPC ID。 |
| |
| 網卡所屬的虛擬交換器ID。 |
| |
| 網卡主私人IP地址。 |
| |
| 網卡分配的私網IPv4地址清單。 |
| |
| 網卡分配的私網IPv4首碼列表。 |
| |
| 網卡對應的子網路遮罩。 |
| |
| 網卡對應的IPv4網關地址。 |
| |
| 網卡所屬的虛擬交換器IPv4 CIDR段。 |
| |
| 網卡所屬的VPC IPv4 CIDR段。 |
| |
| 網卡分配的IPv6地址清單,僅支援已配置了IPv6的VPC類型執行個體。 |
| |
| 網卡分配的IPv6首碼列表。 |
| |
| 網卡所屬的VPC的IPv6網關地址。 |
| |
| 網卡所屬的虛擬交換器IPv6 CIDR段,僅支援已配置了IPv6的VPC類型執行個體。 |
| |
| 網卡所屬的VPC IPv6 CIDR段,僅支援已配置了IPv6的VPC類型執行個體。 |
| |
雲端硬碟資訊 |
| 雲端硬碟序號。 |
|
| 雲端硬碟ID。 |
| |
| 雲端硬碟名稱。 |
| |
安全與憑證 |
| 公有密鑰。僅在執行個體啟動時提供了公有密鑰的情況下可用。 |
|
| 與執行個體關聯的RAM角色的臨時安全憑證。[role-name]需替換為角色名稱。憑證在Expiration欄位指定時間後失效,需重新調用介面擷取。 | | |
執行個體進階屬性 |
| ECS虛擬化方案,支援Virt 1.0和Virt 2.0。 |
|
| 內部Build號。 |
| |
| 搶佔式執行個體的作業系統設定的停機釋放時間,時區標準為UTC+0,格式為yyyy-MM-ddThh:mm:ssZ。 |
| |
Windows特定配置 |
| Windows執行個體的KMS啟用伺服器。 |
|
| Windows執行個體的補救伺服器。 |
| |
| Windows執行個體的更新狀態監控伺服器。 |
|
常見問題
什麼是SSRF攻擊?僅加固模式防禦SSRF攻擊原理是什嗎?
SSRF(Server-Side Request Forgery,服務端請求偽造)是一種安全性漏洞,攻擊者通過誘導伺服器發起任意網路請求,從而訪問受保護的內部系統(如中繼資料服務、資料庫等)。例如,攻擊者提交包含
http://100.100.100.200/latest/meta-data/的URL,誘使應用抓取並返回中繼資料中的敏感資訊,造成中繼資料泄露。預設情況下,ECS執行個體支援無令牌訪問中繼資料(普通模式)。開啟僅加固模式後,會強制啟用令牌驗證機制:用戶端必須先發送PUT請求擷取臨時令牌,並在後續GET請求中攜帶該令牌。由於SSRF攻擊難以發起PUT請求,無法擷取令牌,從而有效阻斷訪問,提升中繼資料安全。
加固模式下,使用命令無法訪問執行個體中繼資料,如何處理?
常見錯誤命令如下:
執行個體中繼資料訪問憑證的有效期間超出範圍(400 - Missing or Invalid Parameters)
執行個體中繼資料訪問憑證有效期間範圍為1秒~21600秒,超過這個限制,會報錯400 - Missing or Invalid Parameters。
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-aliyun-ecs-metadata-token-ttl-seconds: 21700"請求中存在X-Forwarded-For標題(403 - Forbidden)
curl -X PUT "http://100.100.100.200/latest/api/token" -H "X-Forwarded-For: www.ba****.com"指定的執行個體中繼資料訪問憑證無效(401 - Unauthorized)
curl -H "X-aliyun-ecs-metadata-token: aaa" -v http://100.100.100.200/latest/meta-data/
高頻訪問中繼資料服務被限流怎麼辦?
中繼資料服務存在訪問頻率限制。最佳實務是在應用啟動時擷取一次基本不變的中繼資料項(如instance-id),然後將其緩衝在本地記憶體或檔案中,並設定合理的緩衝到期時間。
將執行個體中繼資料訪問模式修改為僅加固模式後,應用無法正常工作如何排查?
可能是執行個體中應用或指令碼中仍在使用舊的普通模式。請按照升級到僅加固模式徹底排查並升級依賴普通模式的應用。
能否從本地主機訪問這個中繼資料地址?
不能。
100.100.100.200是一個本地地址,僅在ECS執行個體內部的虛擬網路介面上有效。任何從執行個體外部發往該地址的請求都無法路由,這是保障中繼資料安全的基礎設計之一。使自訂鏡像建立執行個體時,不支援選擇僅加固模式,如何解決?
當使用自訂Linux鏡像建立ECS執行個體時,若發現無法選擇或啟用僅加固模式,這通常意味著該鏡像尚未滿足支援此安全特性的必要條件。需參考以下流程對鏡像進行升級:
建立臨時執行個體:使用需升級的自訂鏡像,建立一個用於診斷改造的臨時ECS執行個體。
改造臨時執行個體:在第一步建立的臨時執行個體上,參考將已有執行個體升級到僅加固模式完成以下改造:
升級 Cloud-init:將其升級到 23.2.2 或更高版本。
改造應用/指令碼:修改所有依賴“普通模式”的應用或指令碼,使其適配“加固模式”。
建立新鏡像並修改屬性:改造完成後,基於這台執行個體建立新版自訂鏡像。然後調用ModifyImageAttribute調整鏡像屬性
Features.ImdsSupport=v2。釋放資源:新鏡像製作完成後,及時釋放用於診斷和改造的臨時執行個體,以節省成本。
Credentials工具支援加固模式的版本
低版本的Credentials不支援通過加固模式訪問中繼資料,在切換到僅加固模式時,會導致其無法通過普通模式擷取中繼資料中的STS Token初始化SDK,造成業務異常。
在切換前,請升級Credentials依賴至支援加固模式的版本,具體版本要求如下:
Java:credentials-java版本 >=
0.3.10。Node.js:credentials版本 >=
2.3.1。PHP:credentials版本 >=
1.2.0。Python:alibabacloud_credentials版本 >=
0.3.6。Go:credentials-go版本 >=
1.3.10。
如何檢測ECS執行個體是否存在普通模式的中繼資料訪問?
在排查執行個體中依賴普通模式的應用代碼時,可通過以下兩種方式,檢測並定位到具體進程,以便後續進行改造升級。
方式一:通過CloudMonitor確認是否存在普通模式訪問
在CloudMonitor控制台,通過查看ECS中繼資料監控,可以快速確認近期執行個體是否存在普通模式的訪問。
在左側導覽列選擇頁面,搜尋並進入ECS中繼資料監控頁面。
查看目標執行個體的普通模式訪問成功次數指標。
若該指標值不為0,證明執行個體存在普通模式對中繼資料的訪問,需要進一步找到依賴該模式的應用,並將其升級至加固模式。
方式二:通過雲助手外掛程式定位具體進程
使用雲助手外掛程式,可以輔助在執行個體內部,精準定位在使用普通模式訪問中繼資料的進程。
適用作業系統
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3 Pro
Anolis OS 8
CentOS Stream 8/9
CentOS 8
Ubuntu: 20/24
Debian:10,11,12
Fedora 35+
AlmaLinux 8/9
Rocky Linux 8/9
Red Hat Enterprise Linux 8/9
Red Hat中需要自行下載rpm包安裝雲助手Agent。
SUSE 15.1/15.2/15.3/15.4/15.5/15.6
OpenSuse 15.2/15.3/15.4/15.5/15.6
操作步驟
安裝並啟用雲助手外掛程式
登入ECS執行個體,執行以下命令安裝並啟動監控服務,啟用後會佔用部分執行個體效能。
# 部署監控服務 sudo acs-plugin-manager --exec --plugin ACS-ECS-ImdsPacketAnalyzer # 查看監控服務狀態 sudo systemctl status imds_tracer_tool
定位問題進程 運行命令,查看哪些進程仍在以普通模式訪問中繼資料。日誌會顯示相關進程的PID。
cat /var/log/imds/imds-trace.* | grep WARNING
分析並改造 根據日誌中的PID,找到對應的應用程式或指令碼,並對其進行升級改造,通過加固模式訪問中繼資料。