使用執行個體中繼資料服務來存取執行個體 - Amazon Elastic Compute Cloud

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

使用執行個體中繼資料服務來存取執行個體

您可以使用以下其中一個方法,從執行中的執行個體存取執行個體中繼資料:

  • 執行個體中繼資料服務版本 2 (IMDSv2)-工作階段導向方法

    如需範例,請參閱 範例:IMDSv2

  • 執行個體中繼資料服務版本 1 (IMDSv1) — 請求/回應方法

    如需範例,請參閱 範例:IMDSv1

依預設,您可以使用IMDSv1或IMDSv2或兩者。

您可以在每個執行個體上設定執行個體中繼資料服務 (IMDS),以便本機程式碼或使用者必須使用IMDSv2。當您指定IMDSv2必須使用時,IMDSv1不再有效。如需如何設定要使用的執行個體的詳細資訊IMDSv2,請參閱設定執行處理中繼資料服務選

PUT或標GET頭是唯一的IMDSv2。如果這些標頭存在於請求中,則該請求的目的IMDSv2。如果沒有標頭存在,則假定該請求的目的IMDSv1。

如需詳細檢閱IMDSv2,請參閱透過EC2執行個體中繼資料服務的增強功能,為開放式防火牆、反向 Proxy 和SSRF弱點新增深入防禦。

執行個體中繼資料服務第 2 版 的運作方式

IMDSv2 會使用工作階段導向請求。使用工作階段導向請求,您就能建立定義工作階段持續期間的工作階段字符,此期間最短 1 秒,最長可達 6 小時。在指定持續期間,您可以將相同的工作階段字符用於後續請求。在指定持續期間到期之後,您必須建立新的工作階段字符,才能使用未來請求。

注意

本節中的範例使用「執行處理中繼資料服務」(IMDS) 的IPv4位址:169.254.169.254。如果您要透過該IPv6位址擷取EC2執行個體的執行個體中繼資料,請務必啟用並使用IPv6位址:[fd00:ec2::254]。的IPv6位址與IMDSv2指令相容。IMDS此IPv6位址只能在建置於 AWS 硝基系統IPv6支持的子網(雙堆棧或IPv6僅)。

下列範例使用 shell 指令碼,並擷IMDSv2取頂層執行個體中繼資料項目。每個例子:

  • 使用 PUT 請求,建立持續 6 小時 (21,600 秒) 的工作階段字符

  • 將工作階段權杖標頭儲存在名為 TOKEN (Linux 執行個體) 或 token (Windows 執行個體) 的變數中

  • 使用字符請求上層中繼資料項目

您可以執行兩個單獨的命令,或將它們合併。

單獨命令

首先,使用以下命令產生字符。

[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`

然後,使用字符產生使用下列命令的頂層中繼資料項目。

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/

組合命令

您可以存放字符並組合命令。下面的例子結合了上述兩個命令,並將會話令牌頭存儲在一個名為的變量TOKEN。

注意

如果在建立字符時發生錯誤,變數中會存放錯誤消息而非有效字符,命令也不會發揮作用。

[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/meta-data/

建立字符之後,您可以重複使用直到到期為止。在下列範例命令 (取得AMI用來啟動執行個體的 ID) 中,會重複使用儲存$TOKEN在上一個範例中的權杖。

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
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/meta-data/

建立字符之後,您可以重複使用直到到期為止。在下列範例命令 (取得AMI用來啟動執行個體的 ID) 中,會重複使用儲存$token在上一個範例中的權杖。

PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} ` -Method GET -uri http://169.254.169.254/latest/meta-data/ami-id

當您使用IMDSv2要求執行個體中繼資料時,要求必須包含下列項目:

  1. 使用 PUT 請求,在執行個體中繼資料服務中起始工作階段。PUT 請求會傳回一個字符,其必須包含在執行個體中繼資料服務的後續 GET 請求中。使用訪問元數據需要令牌IMDSv2。

  2. 在所有GET要求中包含權杖IMDS。當 Token 用法設為時required,沒有有效令牌或具有過期令牌的請求會收到401 - UnauthorizedHTTP錯誤代碼。

    • 字符是執行個體特定金鑰。該令牌在其他實EC2例上無效,如果您嘗試在生成它的實例之外使用它,則將被拒絕。

    • PUT請求必須包含一個標題,用於指定令牌的活時間(TTL),以秒為單位,最多六個小時(21,600 秒)。字符會代表邏輯工作階段。會TTL指定權杖有效的時間長度,因此指定工作階段的持續時間。

    • 在字符到期之後,若要繼續存取執行個體中繼資料,您必須使用另一個 PUT 建立新的工作階段。

    • 您可以選擇重複使用字符或使用每個請求來建立新字符。對於少數請求,每次需要訪問時都可能更容易生成並立即使用令牌IMDS。但為了提升效率,您可以為該字符指定時間更長的持續期間,然後再重複使用該字符,而不需要在每次要請求執行個體中繼資料時寫入 PUT。並行字符數量沒有實際限額,每個都代表它自己的工作階段。IMDSv2但是,仍然受到正常IMDS連接和節流限制的限制。如需詳細資訊,請參閱查詢調節

HTTPGETHEAD方法是允許在IMDSv2實例元數據請求。 PUT如果要求包含 X 轉寄用於標頭,則會遭到拒絕。

依預設,PUT 請求在 IP 通訊協定等級的 1 回應跳轉限額 (存留時間)。如果您需要更大的躍點限制,您可以使用 modify-instance-metadata-options AWS CLI 指令。例如,您可以需要更大的跳轉限制,才能與執行個體上執行之容器服務回溯相容。如需詳細資訊,請參閱修改現有執行個體的執行個體中繼資料選項

轉換為使用 執行個體中繼資料服務第 2 版

移轉至時IMDSv2,建議您使用下列工具和轉移路徑。

幫助過渡到的工具 IMDSv2

如果您的軟體使用IMDSv1,請使用下列工具來協助重新設定要使用IMDSv2的軟體。

AWS 軟體

最新版本的 AWS CLI 以及 AWS SDKs支持IMDSv2。若要使用IMDSv2,請確定您的EC2執行個體具有CLI和的最新版本SDKs。如需有關更新的資訊CLI,請參閱安裝、更新和解除安裝 AWS CLI 中的 AWS Command Line Interface 用戶指南

所有 Amazon Linux 2 和 Amazon 2023 軟體套件都支援IMDSv2。在 Amazon 2023 中,默認情況下IMDSv1處於禁用狀態。

對於最小 AWS SDK支援的版本IMDSv2,請參閱使用支持 AWS SDK

IMDS封包分析器

IMDS封包分析器是一種開放原始碼工具,可識別並記錄執行個體開機階段的IMDSv1呼叫。這有助於識別在EC2執行個體上IMDSv1撥打呼叫的軟體,讓您準確找出需要更新的項目,讓您的執行個體IMDSv2只能使用。您可以從命令列執行IMDS封包分析器,或將其安裝為服務。如需詳細資訊,請參閱上的IMDS封包分析器GitHub

CloudWatch

IMDSv2使用令牌支持的會話,而IMDSv1不使用。此指MetadataNoToken CloudWatch 標會追蹤正在使用之「執行處理中繼資料服務」(IMDS) 的呼叫次數IMDSv1。透過將此指標追蹤為零,您可以判斷是否已升級所有軟體以及何時升級為使用IMDSv2。

停用後IMDSv1,您可以使用MetadataNoTokenRejected CloudWatch 指標追蹤嘗試IMDSv1通話和拒絕的次數。通過跟踪此指標,您可以確定是否需要更新軟件才能使IMDSv2用。

如需詳細資訊,請參閱執行個體指標

EC2APIs和的更新 CLIs

對於新執行個體,您可以使RunInstancesAPI用啟動需要使用的新執行個體IMDSv2。如需詳細資訊,請參閱設定新執行個體的執行個體中繼資料選項

對於現有執行個體,您可ModifyInstanceMetadataOptionsAPI以使用來要求使用IMDSv2。如需詳細資訊,請參閱修改現有執行個體的執行個體中繼資料選項

若要要求IMDSv2在 Auto Scaling 群組啟動的所有新執行個體上使用,Auto Scaling 群組可以使用啟動範本或啟動設定。當您建立啟動範本建立啟動組態時,您必須設定要求使用的MetadataOptions參數IMDSv2。Auto Scaling 群組會使用新啟動範本或啟動組態來啟動新執行個體,但現有的執行個體不受影響。對於 Auto Scaling 群組中的現有執行個體,您可以使用ModifyInstanceMetadataOptionsAPI來要求對現有執行個體使用,或終止執行個體,Auto Scaling 群組會使用新啟動範本或啟動設定中定義的執行個體中繼資料選項設定來啟動新的取代執行個體。IMDSv2

使用默AMI認配置 IMDSv2

當您啟動執行個體時,您可以透IMDSv2過將HttpTokens參數設定為設定為的啟動執行個體來啟動執行個體,以自動將其設AMI定為預設使用 (ImdsSupport參數設定為required) v2.0。當您AMI使用寄存器影像CLI指令註冊v2.0時,您可以將ImdsSupport參數設定為,也可以使用指令修改現有AMI的參數。modify-image-attributeCLI如需詳細資訊,請參閱配置 AMI

IAM政策和 SCPs

您可以使用IAM策略或 AWS Organizations 服務控制策略(SCP)來控制用戶,如下所示:

IAM策略或SCP必須包含下列IAM條件金鑰:

  • ec2:MetadataHttpEndpoint

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpTokens

如果API或CLI呼叫中的參數與包含條件索引鍵的原則中指定的狀態不符,API或CLI呼叫會因UnauthorizedOperation回應而失敗。

此外,您可以選擇額外的保護層來強制執行從IMDSv1到的變更IMDSv2。在存取管理層相對於透過EC2角色認證APIs呼叫,您可以在IAM原則或中使用新的條件金鑰 AWS Organizations 服務控制策略(SCPs)。具體來說,使用IAM原則中值為ec2:RoleDelivery的條件索引鍵,使用從2.0中取得的EC2角色認證進行的API呼叫IMDSv1將會收到UnauthorizedOperation回應。同樣的事情可以更廣泛地實現與所要求的條件. SCP 這可確保透過傳送的認證實際上IMDSv1無法用於呼叫,APIs因為任何API不符合指定條件的呼叫都會收到錯UnauthorizedOperation誤訊息。

如需IAM原則範例,請參閱使用執行個體中繼資料。如需詳細資訊SCPs,請參閱中的服務控制原則 AWS Organizations 用戶指南

使用上述工具,我們建議您遵循此路徑以轉換至IMDSv2。

步驟 1:開始時

將EC2執行SDKs個體上使用 Role 認證的CLIs、和您的軟體更新為相容的版本IMDSv2。如需有關更新的資訊CLI,請參閱升級到最新版本的 AWS CLI 中的 AWS Command Line Interface 用戶指南

然後,使用IMDSv2請求更改直接訪問實例元數據的軟件(換句話說,不使用 aSDK)。您可以使用IMDS封包分析器來識別您需要變更才能使用要IMDSv2求的軟體。

步驟 2:追蹤轉換進度

使用指標追蹤您的轉換進 CloudWatch 度MetadataNoToken。此量度顯示執行個體IMDS上的IMDSv1呼叫次數。如需詳細資訊,請參閱執行個體指標

步驟 3:當IMDSv1使用率為零時

當 CloudWatch 指標MetadataNoToken記錄零IMDSv1使用量時,您的執行個體就可以完全轉換為使用IMDSv2。在這個階段,您可以執行下列操作:

  • 帳戶預設

    您可以將設IMDSv2定為必要作為帳戶預設值。啟動執行個體時,執行個體組態會自動設定為帳戶預設值。

    若要設定帳戶預設值,請執行下列動作:

    • Amazon EC2 主控台:在EC2儀表板上的帳戶屬性資料保護和安全性下,針對IMDS預設值,將執行個體中繼資料服務設定為 [啟用],將中繼資料版本設定為 [僅限 V2] (需要權杖) 如需詳細資訊,請參閱設IMDSv2為帳戶的預設值

    • AWS CLI:使用命modify-instance-metadata-defaultsCLI令並指定--http-tokens required--http-put-response-hop-limit 2

  • 新執行個體

    啟動新執行個體時,您可以執行下列操作:

    • Amazon EC2 主控台:在啟動執行個體精靈中,將可存取的中繼資料設定為已啟用,將中繼資料版本設定為僅 V2 (需要權杖) 如需詳細資訊,請參閱啟動時設定執行個體

    • AWS CLI:使用運行實例CLI命令並指定必要的命IMDSv2令。

  • 現有執行個體

    針對現有執行個體,可以執行以下操作:

    • Amazon EC2 主控台:在 [執行個體] 頁面上,選取執行個體,選擇 [動作]、[執行個體設定]、[修改執行個體中繼資料選項] IMDSv2,然後選擇 [ 如需詳細資訊,請參閱需要使用 IMDSv2

    • AWS CLI:使用指modify-instance-metadata-optionsCLI令來指定IMDSv2只要使用。

    您可以在執行中的執行個體上修改執行個體中繼資料選項,不需要在修改執行個體中繼資料選項後重新啟動執行個體。

步驟 4:檢查您的執行個體是否已轉換為 IMDSv2

您可以檢查是否有任何實例尚未配置為要求使用IMDSv2,換句話說,IMDSv2仍將其配置為optional。如果仍將任何執行個體設定為optional,您可以重複上述步驟 3,修改要建立IMDSv2required的執行個體中繼資料選項。

篩選執行個體:

  • Amazon EC2 主控台:在「執行個體」頁面上,使用 IMDSv2= 選用篩選器篩選執行個體。如需有關篩選的詳細資訊,請參閱 使用主控台篩選資源。您也可以檢視每個實例的必要或選用性:在「偏好設定」視窗中,開啟以將IMDSv2欄新增IMDSv2至「實」表格。IMDSv2

  • AWS CLI:使用描述實例CLI命令並篩選依據metadata-options.http-tokens = optional,如下所示:

    aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text

步驟 5:將所有執行個體轉換為時 IMDSv2

ec2:MetadataHttpTokensec2:MetadataHttpPutResponseHopLimit、與ec2:MetadataHttpEndpointIAM條件鍵可用來控制RunInstances與與對應的使用CLIs。ModifyInstanceMetadataOptionsAPIs如果建立原則,且API呼叫中的參數與使用條件索引鍵的原則中指定的狀態不符,API或CLI呼叫會UnauthorizedOperation因回應而失敗。如需IAM原則範例,請參閱使用執行個體中繼資料

此外,停用後IMDSv1,您可以使用MetadataNoTokenRejected CloudWatch 指標來追蹤IMDSv1呼叫嘗試和拒絕的次數。如果在禁用後IMDSv1,您的軟件無法正常工作並且MetadataNoTokenRejected度量記錄IMDSv1調用,則可能需要更新此軟件才能使用IMDSv2。

使用支持 AWS SDK

若要使用IMDSv2,您的EC2執行個體必須使用 AWS SDK支援使用IMDSv2. 所有的最新版本 AWS SDKs支持使用IMDSv2.

重要

我們建議您隨時掌握最新SDK版本,以隨時掌握最新功能、安全性更新和基礎相依性。我們不建議您繼續使用不受支援的SDK版本,並由您自行決定。如需詳細資訊,請參閱 AWS SDKs和工具維護政策 AWS SDKs和工具參考指南

以下是支援使用的最低版本IMDSv2:

範例:IMDSv2

在 Amazon 執行EC2個體上執行下列範例,以擷取的執行個體中繼資料IMDSv2。

在視窗執行個體上,您可以使用視窗 PowerShell ,也可以安裝 c URL 或 wget。如果您在 Windows 執行個體上安裝協力廠商工具,請務必仔細閱讀隨附的文件,因為呼叫和輸出可能與此處所述不同。

取得執行個體中繼資料的可用版本

此範例會取得執行個體中繼資料的可用版本。每個版本會參照在發佈新執行個體中繼資料類別時的執行個體中繼資料建置。執行個體中繼資料建置版本與 Amazon EC2 API 版本不相關。若您有依存於先前版本中結構和資訊的指令碼,您也可以取得先前版本。

cURL
[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/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest
PowerShell
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/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest

取得上層中繼資料項目

此範例會取得最上層的中繼資料項目。有關響應中物件的更多內容,敬請參閱執行個體中繼資料分類

請注意,只有在您允許存取的情況下,標籤才會包含在此輸出中。如需詳細資訊,請參閱允許存取執行個體中繼資料中的標籤

cURL
[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/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/
PowerShell
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/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/

取得中繼資料項目的值

這些範例會取得上述範例中取得的某些頂層中繼資料項目的值。這些要求會使用前一個範例中使用命令建立的已儲存 Token。令牌不得過期。

cURL
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
PowerShell
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

取得可用公有金鑰清單

此範例會取得可用公有金鑰的清單。

cURL
[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/meta-data/public-keys/ 0=my-public-key
PowerShell
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/meta-data/public-keys/ 0=my-public-key

顯示可使用公有金鑰 0 的格式

此範例會顯示可使用公有金鑰 0 的格式。

cURL
[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/meta-data/public-keys/0/ openssh-key
PowerShell
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/meta-data/public-keys/0/openssh-key openssh-key

取得公開金鑰 0 (以開放SSH金鑰格式)

此範例會取得公開金鑰 0 (採用 Open SSH 金鑰格式)。

cURL
[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/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
PowerShell
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/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

取得執行個體的子網 ID

此範例會取得執行個體的子網 ID。

cURL
[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/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7
PowerShell
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/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

取得執行個體的執行個體標籤

如果已開啟執行個體中繼資料中執行個體標籤的存取權,您可以從執行個體中繼資料取得執行個體的標籤。如需詳細資訊,請參閱從執行個體中繼資料擷取標籤

範例:IMDSv1

在 Amazon 執行EC2個體上執行下列範例,以擷取的執行個體中繼資料IMDSv1。

在視窗執行個體上,您可以使用視窗 PowerShell ,也可以安裝 c URL 或 wget。如果您在 Windows 執行個體上安裝協力廠商工具,請務必仔細閱讀隨附的文件,因為呼叫和輸出可能與此處所述不同。

取得執行個體中繼資料的可用版本

此範例會取得執行個體中繼資料的可用版本。每個版本會參照在發佈新執行個體中繼資料類別時的執行個體中繼資料建置。執行個體中繼資料建置版本與 Amazon EC2 API 版本不相關。若您有依存於先前版本中結構和資訊的指令碼,您也可以取得先前版本。

cURL
[ec2-user ~]$ curl http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest

取得上層中繼資料項目

此範例會取得最上層的中繼資料項目。有關響應中物件的更多內容,敬請參閱執行個體中繼資料分類

請注意,只有在您允許存取的情況下,標籤才會包含在此輸出中。如需詳細資訊,請參閱允許存取執行個體中繼資料中的標籤

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/

取得中繼資料項目的值

這些範例會取得上一個範例中取得的某些頂層中繼資料項目的值。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

取得可用公有金鑰清單

此範例會取得可用公有金鑰的清單。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key

顯示可使用公有金鑰 0 的格式

此範例會顯示可使用公有金鑰 0 的格式。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/ openssh-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key openssh-key

取得公開金鑰 0 (以開放SSH金鑰格式)

此範例會取得公開金鑰 0 (採用 Open SSH 金鑰格式)。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

取得執行個體的子網 ID

此範例會取得執行個體的子網 ID。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

取得執行個體的執行個體標籤

如果已開啟執行個體中繼資料中執行個體標籤的存取權,您可以從執行個體中繼資料取得執行個體的標籤。如需詳細資訊,請參閱從執行個體中繼資料擷取標籤