選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

存取 EC2 執行個體的執行個體中繼資料

焦點模式
存取 EC2 執行個體的執行個體中繼資料 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

您可以從執行個體本身內部或 EC2 主控台、API、 SDK 或 AWS CLI,存取 EC2 執行個體中繼資料。若要從主控台或命令列取得執行個體目前的執行個體中繼資料設定,請參閱 查詢現有執行個體的執行個體中繼資料選項

您也可以修改具有 EBS 根磁碟區之執行個體的使用者資料。執行個體必須處於停止狀態。如需主控台操作指示,請參閱更新執行個體使用者資料。如需使用 的 Linux 範例 AWS CLI,請參閱 modify-instance-attribute。如需使用 Tools for Windows PowerShell 的 Windows 範例,請參閱 使用者資料與 Tools for Windows PowerShell

注意

您無須為用來擷取執行個體中繼資料和使用者資料的 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 地址,管理與外部應用程式的連線。

以下所有項目都被視為執行個體中繼資料,但存取方法各有不同。選擇代表要存取之執行個體中繼資料類型的標籤,以查看更多資訊。

Metadata

執行個體中繼資料屬性分為數種類別。對於每個執行個體中繼資料類別的說明,請參閱 執行個體中繼資料分類

若要從執行中的執行個體存取中繼資料屬性,請從下列 IPv4 或 IPv6 URI 取得資料。這些 IP 位址是連結本機位址且僅在執行個體中有效。如需詳細資訊,請參閱Link-local 地址

IPv4

http://169.254.169.254/latest/meta-data/

IPv6

http://[fd00:ec2::254]/latest/meta-data/
Dynamic data

若要從執行中的執行個體擷取動態資料,請使用下列其中一個 URI。

IPv4

http://169.254.169.254/latest/dynamic/

IPv6

http://[fd00:ec2::254]/latest/dynamic/
範例:使用 cURL 存取

下列範例使用 cURL 擷取高層級的執行個體身分類別。

IMDSV2

[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/ rsa2048 pkcs7 document signature dsa2048

IMDSv1

[ec2-user ~]$ curl http://169.254.169.254/latest/dynamic/instance-identity/ rsa2048 pkcs7 document signature dsa2048
範例:使用 PowerShell 存取

下列範例使用 PowerShell 擷取高層級的執行個體身分類別。

IMDSV2

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/dynamic/instance-identity/ document rsa2048 pkcs7 signature

IMDSv1

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/dynamic/instance-identity/ document rsa2048 pkcs7 signature

如需動態資料的詳細資訊及如何擷取它的範例,請參閱Amazon EC2 執行個體的執行個體身分文件

User data

若要從執行個體擷取使用者資料,請使用下列其中一個 URI。若要使用 IPv6 地址擷取使用者資料,您必須先啟用並確保該執行個體是 Nitro 型執行個體,且位於支援 IPv6 的子網路中。

IPv4

http://169.254.169.254/latest/user-data

IPv6

http://[fd00:ec2::254]/latest/user-data

使用者資料的請求會直接傳回資料 (內容類型 application/octet-stream)。如果執行個體沒有任何使用者資料,則請求會傳回 404 - Not Found

範例:使用 cURL 存取以擷取逗號分隔文字

下列範例使用 cURL 擷取指定為逗號分隔文字的使用者資料。

IMDSV2

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

IMDSv1

curl http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
範例:使用 PowerShell 存取以擷取逗號分隔文字

下列範例使用 PowerShell 擷取指定為逗號分隔文字的使用者資料。

IMDSV2

[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

IMDSv1

Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} ` -Method PUT -Uri http://169.254.169.254/latest/api/token} -Method GET -uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
範例:使用 cURL 存取以擷取指令碼

下列範例使用 cURL 擷取指定為指令碼的使用者資料。

IMDSV2

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data #!/bin/bash yum update -y service httpd start chkconfig httpd on

IMDSv1

curl http://169.254.169.254/latest/user-data #!/bin/bash yum update -y service httpd start chkconfig httpd on
範例:使用 PowerShell 存取以擷取指令碼

下列範例使用 PowerShell 擷取指定為指令碼的使用者資料。

IMDSV2

[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

IMDSv1

Invoke-RestMethod -uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

執行個體中繼資料屬性分為數種類別。對於每個執行個體中繼資料類別的說明,請參閱 執行個體中繼資料分類

若要從執行中的執行個體存取中繼資料屬性,請從下列 IPv4 或 IPv6 URI 取得資料。這些 IP 位址是連結本機位址且僅在執行個體中有效。如需詳細資訊,請參閱Link-local 地址

IPv4

http://169.254.169.254/latest/meta-data/

IPv6

http://[fd00:ec2::254]/latest/meta-data/

查詢現有執行個體的執行個體中繼資料選項

您可以使用下列其中一種方法,查詢現有執行個體的執行個體中繼資料選項。

Console
若要查詢現有執行個體的執行個體中繼資料選項,請使用主控台
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取執行個體。

  4. 選擇動作執行個體設定修改執行個體中繼資料選項

  5. 在「修改執行個體中繼資料選項」對話方塊中,檢閱目前執行個體中繼資料選項。

AWS CLI
使用 查詢現有執行個體的執行個體中繼資料選項 AWS CLI

使用 describe-instances 命令。

aws ec2 describe-instances \ --instance-id i-1234567898abcdef0 \ --query 'Reservations[].Instances[].MetadataOptions'
PowerShell
若要查詢現有執行個體的執行個體中繼資料選項,請使用 Tools for PowerShell

使用 Get-EC2Instance Cmdlet。

(Get-EC2Instance ` -InstanceId i-1234567898abcdef0).Instances.MetadataOptions
若要查詢現有執行個體的執行個體中繼資料選項,請使用主控台
  1. https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

  2. 在導覽窗格中,選擇 Instances (執行個體)。

  3. 選取執行個體。

  4. 選擇動作執行個體設定修改執行個體中繼資料選項

  5. 在「修改執行個體中繼資料選項」對話方塊中,檢閱目前執行個體中繼資料選項。

回應及錯誤訊息

所有執行個體中繼資料都會以文字傳回 (HTTP 內容類型 text/plain)。

特定中繼資料資源的請求會傳回適當的值。若資源無法使用,則會傳回 404 - Not Found HTTP 錯誤碼。

一般中繼資料資源的請求 (URI 的結尾為 /) 會傳回可用資源的清單,或是 404 - Not Found HTTP 錯誤碼 (若沒有該資源的話)。清單項目會位於不同列,以換行字元 (ASCII 10) 終止。

如果 IMDSv1 請求未收到回應,則可能需要 IMDSv2。

對於使用 IMDSv2 提出的請求,可以傳回下列 HTTP 錯誤代碼:

  • 400 - Missing or Invalid ParametersPUT 請求無效。

  • 401 - UnauthorizedGET 請求使用的字符無效。建議動作會產生新字符。

  • 403 - Forbidden – 不允許請求,或 IMDS 已關閉。

  • 404 - Not Found – 資源無法使用,或沒有此類資源。

  • 503:請求無法完成。重試 請求。

如果 IMDS 傳回錯誤,curl 會在輸出中列印錯誤訊息,並傳回成功狀態碼。錯誤訊息會儲存在 TOKEN 變數中,進而造成使用字符的 curl 命令失敗。如果您使用 -f 選項呼叫 curl,則會在 HTTP 伺服器出現錯誤時傳回錯誤狀態碼。如果您啟用錯誤處理,Shell 可能會攔截錯誤並停止指令碼。

查詢調節

我們會根據每個執行個體來調整對 IMDS 的查詢,並且我們會限制從執行個體到 IMDS 的同時連線數。

如果您使用 IMDS 擷取 AWS 安全登入資料,請避免在每次交易期間或同時從大量執行緒或程序中查詢登入資料,因為這可能會導致限流。相反的,我們建議您快取登入資料,直到其接近到期時間為止。如需有關 IAM 角色以及與該角色相關聯的安全憑證的詳細資訊,請參閱 從執行個體中繼資料中擷取安全登入資料

若您在存取 IMDS 時遭到限流,請使用指數退避策略重試您的查詢。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。