本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以從執行個體本身內部或 EC2 主控台、API、 SDK 或 AWS CLI,存取 EC2 執行個體中繼資料。若要從主控台或命令列取得執行個體目前的執行個體中繼資料設定,請參閱 查詢現有執行個體的執行個體中繼資料選項。
您也可以修改具有 EBS 根磁碟區之執行個體的使用者資料。執行個體必須處於停止狀態。如需主控台操作指示,請參閱更新執行個體使用者資料。如需使用 的 Linux 範例 AWS CLI,請參閱 modify-instance-attribute
注意
您無須為用來擷取執行個體中繼資料和使用者資料的 HTTP 請求支付費用。
執行個體中繼資料存取考量
若要避免執行個體中繼資料擷取的問題,請考慮下列事項。
- 命令格式
-
命令格式不同,取決於您使用的是執行個體中繼資料服務第 1 版 (IMDSv1) 還是執行個體中繼資料服務第 2 版 (IMDSv2)。根據預設,您可以同時使用兩個版本的執行個體中繼資料服務。欲要求使用 IMDSv2,請參閱 使用執行個體中繼資料服務存取執行個體中繼資料。
- 如果需要 IMDSv2,則 IMDSv1 將無法運作
-
如果您使用 IMDSv1 且未收到回應,則可能需要 IMDSv2。若要檢查是否需要 IMDSv2,請選取執行個體以檢視其詳細資訊。IMDSv2 值表示必要 (您必須使用 IMDSv2) 或選用 (您可以使用 IMDSv2 或 IMDSv1)。
- (IMDSv2) 使用 /latest/api/token 擷取字符
-
向任何版本特定的路徑發出
PUT
請求 (例如/2021-03-23/api/token
),將導致中繼資料服務傳回 403 Forbidden 錯誤。這是預期行為。 - 中繼資料版本
-
為避免每次 Amazon EC2 發佈新的執行個體中繼資料建置時都必須更新您的程式碼,我們建議您在路徑中使用
latest
,而不是版本編號。 - IPv6 支援
-
若要使用 IPv6 地址擷取執行個體中繼資料,請確定啟用及使用 IMDS 的 IPv6 地址
[fd00:ec2::254]
,而不是 IPv4 地址169.254.169.254
。執行個體必須是在支援 IPv6 的子網路中啟動的 Nitro 型執行個體。 - (Windows) 使用 Windows Sysprep 建立自訂 AMIs
-
若要在您從自訂 Windows AMI 啟動執行個體確保 IMDS 正常運作,AMI 必須是使用 Windows Sysprep 建立的標準化映像。否則,IMDS 將無法運作。如需詳細資訊,請參閱使用 Windows Sysprep 建立 Amazon EC2 AMI。
- 在容器環境中,請考慮重新設定或將跳轉限制增加到 2
-
根據預設 AWS SDKs 會使用 IMDSv2 呼叫。如果 IMDSv2 呼叫未收到回應,有些 AWS SDKs會重試呼叫,如果仍然失敗,請使用 IMDSv1。這可能會導致延遲,特別是在容器環境中。對於需要 IMDSv2 AWS SDKs,如果跳轉限制在容器環境中為 1,則呼叫可能完全不會收到回應,因為前往容器會被視為額外的網路跳轉。
若要緩解容器環境中的這些問題,請考慮將組態變更為將設定 (例如 AWS 區域) 直接傳遞至容器,或考慮將跳轉限制增加至 2。如需跳轉限制影響的相關資訊,請參閱針對開放防火牆、反向代理和 SSRF 漏洞新增深度防禦,以及 EC2 執行個體中繼資料服務的增強
功能。如需變更跳轉限制的資訊,請參閱 變更 PUT 回應跳轉限制。 - 每秒封包數 (PPS) 的限制
使用連結本機位址的服務有每秒 1024 個封包 (PPS) 限制。此限制包括 Route 53 Resolver DNS 查詢、執行個體中繼資料服務 (IMDS) 請求、Amazon Time Service Network Time Protocol (NTP) 請求和 Windows Licensing Service (適用於 Microsoft Windows 型執行個體)
請求的彙總。
使用者資料存取的其他考量
-
使用者資料被視為不透明資料:您指定的內容在擷取時會依原樣傳回。由執行個體自行解讀使用者資料並對其採取行動。
-
使用者資料必須為 base64 編碼形式。根據您使用的工具或 SDK,可能會自動為您執行 Base64 編碼。例如:
Amazon EC2 主控台可為您執行 base64 編碼,或是接受 base64 編碼輸入。
AWS CLI 第 2 版預設會為您執行二進位參數的 base64 編碼。第 1 AWS CLI 版會為您執行
--user-data
參數的 base64 編碼。會為您 AWS SDK for Python (Boto3) 執行
UserData
參數的 base64 編碼。
-
使用者資料在 base64 編碼之前限制為 16 KB (原始形式)。長度為 n 的字串在 base64 編碼之後的大小為 ceil(n/3)*4。
-
使用者資料在擷取時必須以 base64 解碼。如果您使用執行個體中繼資料或主控台擷取資料,將會自動為您解碼資料。
-
若您停止執行個體,請修改其使用者資料,然後啟動執行個體,則更新後的使用者資料便不會在您啟動執行個體時自動執行。您可以透過 Windows 執行個體設定組態,使更新後的使用者資料指令碼在您啟動執行個體,或是每一次重新開機或啟動執行個體時執行一次。
-
使用者資料是執行個體屬性。如果您從執行個體建立 AMI,執行個體使用者資料不會包含在 AMI 中。
從 EC2 執行個體存取執行個體中繼資料
因為您的執行個體中繼資料可從您執行中的執行個體取得,您無須使用 Amazon EC2 主控台或 AWS CLI。若您正在撰寫要從您的執行個體執行的指令碼,這將會很有幫助。例如,您可以存取從執行個體中繼資料存取您執行個體的本機 IP 地址,管理與外部應用程式的連線。
以下所有項目都被視為執行個體中繼資料,但存取方法各有不同。選擇代表要存取之執行個體中繼資料類型的標籤,以查看更多資訊。
執行個體中繼資料屬性分為數種類別。對於每個執行個體中繼資料類別的說明,請參閱 執行個體中繼資料分類。
若要從執行中的執行個體存取中繼資料屬性,請從下列 IPv4 或 IPv6 URI 取得資料。這些 IP 位址是連結本機位址且僅在執行個體中有效。如需詳細資訊,請參閱Link-local 地址。
IPv4
http://169.254.169.254/latest/meta-data/
IPv6
http://[fd00:ec2::254]/latest/meta-data/
查詢現有執行個體的執行個體中繼資料選項
您可以使用下列其中一種方法,查詢現有執行個體的執行個體中繼資料選項。
若要查詢現有執行個體的執行個體中繼資料選項,請使用主控台
在 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在導覽窗格中,選擇 Instances (執行個體)。
-
選取執行個體。
-
選擇動作、執行個體設定、修改執行個體中繼資料選項。
-
在「修改執行個體中繼資料選項」對話方塊中,檢閱目前執行個體中繼資料選項。
回應及錯誤訊息
所有執行個體中繼資料都會以文字傳回 (HTTP 內容類型 text/plain
)。
特定中繼資料資源的請求會傳回適當的值。若資源無法使用,則會傳回 404 -
Not Found
HTTP 錯誤碼。
一般中繼資料資源的請求 (URI 的結尾為 /) 會傳回可用資源的清單,或是 404 - Not Found
HTTP 錯誤碼 (若沒有該資源的話)。清單項目會位於不同列,以換行字元 (ASCII 10) 終止。
如果 IMDSv1 請求未收到回應,則可能需要 IMDSv2。
對於使用 IMDSv2 提出的請求,可以傳回下列 HTTP 錯誤代碼:
-
400 - Missing or Invalid Parameters
–PUT
請求無效。 -
401 - Unauthorized
–GET
請求使用的字符無效。建議動作會產生新字符。 -
403 - Forbidden
– 不允許請求,或 IMDS 已關閉。 -
404 - Not Found
– 資源無法使用,或沒有此類資源。 -
503
:請求無法完成。重試 請求。
如果 IMDS 傳回錯誤,curl 會在輸出中列印錯誤訊息,並傳回成功狀態碼。錯誤訊息會儲存在 TOKEN
變數中,進而造成使用字符的 curl 命令失敗。如果您使用 -f 選項呼叫 curl,則會在 HTTP 伺服器出現錯誤時傳回錯誤狀態碼。如果您啟用錯誤處理,Shell 可能會攔截錯誤並停止指令碼。
查詢調節
我們會根據每個執行個體來調整對 IMDS 的查詢,並且我們會限制從執行個體到 IMDS 的同時連線數。
如果您使用 IMDS 擷取 AWS 安全登入資料,請避免在每次交易期間或同時從大量執行緒或程序中查詢登入資料,因為這可能會導致限流。相反的,我們建議您快取登入資料,直到其接近到期時間為止。如需有關 IAM 角色以及與該角色相關聯的安全憑證的詳細資訊,請參閱 從執行個體中繼資料中擷取安全登入資料。
若您在存取 IMDS 時遭到限流,請使用指數退避策略重試您的查詢。