本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用以下其中一個方法,從執行中的執行個體存取執行個體中繼資料:
依預設,您可以使用IMDSv1或IMDSv2,或兩者。
您可以在每個執行個體上設定執行個體中繼資料服務 (IMDS),以便本機程式碼或使用者必須使用IMDSv2。當您指定IMDSv2必須使用時,IMDSv1不再有效。如需如何設定要使用的執行個體的詳細資訊IMDSv2,請參閱設定執行處理中繼資料服務選。
PUT
或標GET
頭是唯一的IMDSv2。如果這些標頭存在於請求中,則該請求的目的是IMDSv2。如果沒有標頭存在,則假定該請求的目的IMDSv1。
如需詳細檢閱IMDSv2,請參閱透過EC2執行個體中繼資料服務的增強功能,為開放式防火牆、反向 Proxy 和SSRF弱點新增深入防禦。
IMDSv2 會使用工作階段導向請求。使用工作階段導向請求,您就能建立定義工作階段持續期間的工作階段字符,此期間最短 1 秒,最長可達 6 小時。在指定持續期間,您可以將相同的工作階段字符用於後續請求。在指定持續期間到期之後,您必須建立新的工作階段字符,才能使用未來請求。
本節中的範例使用「執行處理中繼資料服務」(IMDS) 的IPv4位址:169.254.169.254
。如果您要透過該IPv6位址擷取EC2執行個體的執行個體中繼資料,請務必啟用並使用IPv6位址:[fd00:ec2::254]
。的IPv6位址與IMDSv2指令相容。IMDS該IPv6地址只能在 AWS Nitro 系統上構建的實例和IPv6支持的子網(雙堆棧或IPv6僅)中訪問。
下列範例使用 shell 指令碼,並擷IMDSv2取頂層執行個體中繼資料項目。每個例子:
您可以執行兩個單獨的命令,或將它們合併。
單獨命令
首先,使用以下命令產生字符。
[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要求執行個體中繼資料時,要求必須包含下列項目:
-
使用 PUT
請求,在執行個體中繼資料服務中起始工作階段。PUT
請求會傳回一個字符,其必須包含在執行個體中繼資料服務的後續 GET
請求中。使用訪問元數據需要令牌IMDSv2。
-
在所有GET
要求中包含權杖IMDS。當 Token 用法設為時required
,沒有有效令牌或具有過期令牌的請求會收到401 - Unauthorized
HTTP錯誤代碼。
-
字符是執行個體特定金鑰。該令牌在其他實EC2例上無效,如果您嘗試在生成它的實例之外使用它,則將被拒絕。
-
PUT
請求必須包含一個標題,用於指定令牌的活時間(TTL),以秒為單位,最多六個小時(21,600 秒)。字符會代表邏輯工作階段。會TTL指定權杖有效的時間長度,因此指定工作階段的持續時間。
-
在字符到期之後,若要繼續存取執行個體中繼資料,您必須使用另一個 PUT
建立新的工作階段。
-
您可以選擇重複使用字符或使用每個請求來建立新字符。對於少數請求,每次需要訪問時都可能更容易生成並立即使用令牌IMDS。但為了提升效率,您可以為該字符指定時間更長的持續期間,然後再重複使用該字符,而不需要在每次要請求執行個體中繼資料時寫入 PUT
。並行字符數量沒有實際限額,每個都代表它自己的工作階段。IMDSv2但是,仍然受到正常IMDS連接和節流限制的限制。如需詳細資訊,請參閱查詢調節。
HTTPGET
和HEAD
方法是允許在IMDSv2實例元數據請求。 PUT
如果要求包含 X 轉寄用於標頭,則會遭到拒絕。
依預設,PUT
請求在 IP 通訊協定等級的 1
回應跳轉限額 (存留時間)。如果您需要更大的躍點限制,可以使用modify-instance-metadata-options AWS CLI 指令對其進行調整。例如,您可以需要更大的跳轉限制,才能與執行個體上執行之容器服務回溯相容。如需詳細資訊,請參閱修改現有執行個體的執行個體中繼資料選項。
移轉至時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條件金鑰:
如果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
使用上述工具,我們建議您遵循此路徑以轉換至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。在這個階段,您可以執行下列操作:
步驟 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:MetadataHttpTokens
ec2:MetadataHttpPutResponseHopLimit
、與ec2:MetadataHttpEndpoint
IAM條件鍵可用來控制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.
以下是支援使用的最低版本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 的格式。
- 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 (採用 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。
- 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
如果已開啟執行個體中繼資料中執行個體標籤的存取權,您可以從執行個體中繼資料取得執行個體的標籤。如需詳細資訊,請參閱從執行個體中繼資料擷取標籤。
在 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 的格式。
- 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 (採用 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。
- 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
如果已開啟執行個體中繼資料中執行個體標籤的存取權,您可以從執行個體中繼資料取得執行個體的標籤。如需詳細資訊,請參閱從執行個體中繼資料擷取標籤。