設定新執行個體的執行個體中繼資料選項 - Amazon Elastic Compute Cloud

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

設定新執行個體的執行個體中繼資料選項

您可以為新執行個體設定下列執行個體中繼資料選項。

需要使用 IMDSv2

您可以使用下列方法來要求在新執行個體上使用 IMDSv2。

將 IMDSv2 設定為 帳戶的預設值

您可以在帳戶層級為每個執行個體中繼資料服務 (IMDS) 設定預設版本 AWS 區域。這表示當您啟動新的執行個體時,執行個體中繼資料版本會自動設定為帳戶層級預設值。不過,您可以在啟動時或啟動後手動覆寫該值。如需帳戶層級設定和手動覆寫如何影響執行個體的詳細資訊,請參閱 執行個體中繼資料選項的優先順序

注意

設定帳戶層級預設值不會重設現有的執行個體。例如,如果您將帳戶層級預設值設定為 IMDSv2,則設為 IMDSv1 的任何現有執行個體都不會受到影響。如果您想要變更現有執行個體上的值,則必須自行手動變更執行個體上的值。

您可以將執行個體中繼資料版本的帳戶預設值設定為 IMDSv2,以便需要使用 IMDSv2 啟動帳戶中的所有執行個體,並停用 IMDSv1。使用此帳戶預設值時,當您啟動執行個體時,下列是執行個體的預設值:

  • 主控台:中繼資料版本僅設定為 V2 (需要金鑰),且中繼資料回應跳轉限制設定為 2

  • AWS CLI: HttpTokens 設定為 required,而 HttpPutResponseHopLimit 設定為 2

注意

將帳戶預設為 IMDSv2 之前,請確定您的執行個體不依賴 IMDSv1。如需詳細資訊,請參閱需要 的建議路徑 IMDSv2

Console
將 IMDSv2 設定為指定區域的 帳戶預設值
  1. 在 EC2 開啟 Amazon https://console.aws.amazon.com/ec2/ 主控台。

  2. 若要變更 AWS 區域,請使用頁面右上角的區域選取器。

  3. 在導覽窗格中,選擇 EC2 Dashboard

  4. 帳户屬性下,選擇資料保護和安全性

  5. IMDS 預設值旁邊,選擇管理

  6. 管理 IMDS 預設頁面上,執行下列動作:

    1. 針對執行個體中繼資料服務,選擇已啟用

    2. 針對 Metadata version (中繼資料版本),選擇 V2 only (token required) (僅限 V2 (需要權杖))。

    3. 對於中繼資料回應跳轉限制,如果您的執行個體將託管容器,請指定 2。否則,請選取無偏好設定。未指定偏好設定時,如果 AMI 需要 IMDSv2,則在啟動時,該值預設為 2;否則預設為 1

    4. 選擇更新

AWS CLI
將 IMDSv2 設定為指定區域的 帳戶預設值

使用 modify-instance-metadata-defaults 命令,並指定要在其中修改 IMDS 帳戶層級設定的區域。2 如果您的執行個體將託管容器,請包含--http-tokens設定為 required--http-put-response-hop-limit設定為 。否則,請指定 -1以表示沒有偏好設定。指定 -1(無偏好設定) 時,2如果 AMI 需要 IMDSv2,則啟動時值預設為 ;否則預設為 1

aws ec2 modify-instance-metadata-defaults \ --region us-east-1 \ --http-tokens required \ --http-put-response-hop-limit 2

預期的輸出結果

{ "Return": true }
檢視指定區域執行個體中繼資料選項的預設帳戶設定

使用 get-instance-metadata-defaults 命令並指定 區域。

aws ec2 get-instance-metadata-defaults --region us-east-1

範例輸出

{ "AccountLevel": { "HttpTokens": "required", "HttpPutResponseHopLimit": 2 } }
將 IMDSv2 設定為所有區域的 帳戶預設值

使用 modify-instance-metadata-defaults 命令來修改所有區域的 IMDS 帳戶層級設定。2 如果您的執行個體將託管容器,請包含--http-tokens設定為 required--http-put-response-hop-limit設定為 。否則,請指定 -1以表示沒有偏好設定。指定 -1(無偏好設定) 時,2如果 AMI 需要 IMDSv2,則啟動時值預設為 ;否則預設為 1

echo -e "Region \t Modified" ; \ echo -e "-------------- \t ---------" ; \ for region in $( aws ec2 describe-regions \ --region us-east-1 \ --query "Regions[*].[RegionName]" \ --output text ); do (output=$( aws ec2 modify-instance-metadata-defaults \ --region $region \ --http-tokens required \ --http-put-response-hop-limit 2 \ --output text) echo -e "$region \t $output" ); done

預期的輸出結果

Region Modified -------------- --------- ap-south-1 True eu-north-1 True eu-west-3 True ...
檢視所有 區域的執行個體中繼資料選項的預設帳戶設定

使用 get-instance-metadata-defaults 命令。

echo -e "Region \t Level Hops HttpTokens" ; \ echo -e "-------------- \t ------------ ---- ----------" ; \ for region in $( aws ec2 describe-regions \ --region us-east-1 \ --query "Regions[*].[RegionName]" \ --output text ); do (output=$( aws ec2 get-instance-metadata-defaults \ --region $region \ --output text) echo -e "$region \t $output" ); done

預期的輸出結果

Region Level Hops HttpTokens -------------- ------------ ---- ---------- ap-south-1 ACCOUNTLEVEL 2 required eu-north-1 ACCOUNTLEVEL 2 required eu-west-3 ACCOUNTLEVEL 2 required ...
PowerShell
將 IMDSv2 設定為指定區域的 帳戶預設值

使用 Edit-EC2InstanceMetadataDefault 命令,並指定要在其中修改 IMDS 帳戶層級設定的 區域。2 如果您的執行個體將託管容器,請包含-HttpToken設定為 required-HttpPutResponseHopLimit設定為 。否則,請指定 -1以表示沒有偏好設定。指定 -1(無偏好設定) 時,2如果 AMI 需要 IMDSv2,則啟動時值預設為 ;否則預設為 1

Edit-EC2InstanceMetadataDefault ` -Region us-east-1 ` -HttpToken required ` -HttpPutResponseHopLimit 2

預期的輸出結果

True
檢視指定區域的執行個體中繼資料選項的預設帳戶設定

使用 Get-EC2InstanceMetadataDefault 命令並指定 區域。

Get-EC2InstanceMetadataDefault -Region us-east-1 | Format-List

範例輸出

HttpEndpoint : HttpPutResponseHopLimit : 2 HttpTokens : required InstanceMetadataTags :
將 IMDSv2 設定為所有區域的 帳戶預設值

使用 Edit-EC2InstanceMetadataDefault Cmdlet 修改所有區域的 IMDS 帳戶層級設定。2 如果您的執行個體將託管容器,請包含-HttpToken設為 required-HttpPutResponseHopLimit設為 。否則,請指定 -1以表示沒有偏好設定。指定 -1(無偏好設定) 時,2如果 AMI 需要 IMDSv2,則啟動時值預設為 ;否則預設為 1

(Get-EC2Region).RegionName | ` ForEach-Object { [PSCustomObject]@{ Region = $_ Modified = (Edit-EC2InstanceMetadataDefault ` -Region $_ ` -HttpToken required ` -HttpPutResponseHopLimit 2) } } | ` Format-Table Region, Modified -AutoSize

預期的輸出結果

Region Modified ------ -------- ap-south-1 True eu-north-1 True eu-west-3 True ...
檢視所有 區域的執行個體中繼資料選項的預設帳戶設定

使用 Get-EC2InstanceMetadataDefault Cmdlet。

(Get-EC2Region).RegionName | ` ForEach-Object { [PSCustomObject]@{ Region = $_ HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit HttpTokens = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens } } | ` Format-Table -AutoSize

範例輸出

Region HttpPutResponseHopLimit HttpTokens ------ ----------------------- ---------- ap-south-1 2 required eu-north-1 2 required eu-west-3 2 required ...

啟動時設定執行個體

啟動執行個體時,您可以透過設定下列欄位,將執行個體設定為要求使用 IMDSv2:

  • Amazon EC2 主控台:僅將中繼資料版本設定為 V2 (需要金鑰)

  • AWS CLI:將 HttpTokens 設為 required

當您指定需要 IMDSv2 時,也必須將可存取的中繼資料設定為已啟用 (主控台) 或 ()HttpEndpoint,以啟用執行個體中繼資料服務 enabled(IMDS) 端點AWS CLI。

在容器環境中,當需要 IMDSv2 時,我們建議將跳轉限制設定為 2。如需詳細資訊,請參閱執行個體中繼資料存取考量事項

Console
要求在新執行個體上使用 IMDSv2
  • 在 Amazon EC2 主控台中啟動新執行個體時,請展開進階詳細資訊,然後執行下列動作:

    • 針對 Metadata accessible (可存取中繼資料),選擇 Enabled (已啟用)。

    • 針對 Metadata version (中繼資料版本),選擇 V2 only (token required) (僅限 V2 (需要權杖))。

    • (容器環境) 對於中繼資料回應跳轉限制,請選擇 2

    如需詳細資訊,請參閱進階詳細資訊

AWS CLI
要求在新執行個體上使用 IMDSv2

下列 run-instances 範例會啟動 c6i.large 設定為 --metadata-optionsHttpTokens=required 執行個體。當您為 HttpTokens 指定值時,您也必須將 HttpEndpoint 設定為 enabled。由於安全權杖標頭required已針對中繼資料擷取請求設定為 ,因此在請求執行個體中繼資料時,需要執行個體使用 IMDSv2。

在容器環境中,當需要 IMDSv2 時,我們建議2使用 將跳轉限制設定為 HttpPutResponseHopLimit=2

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c6i.large \ ... --metadata-options "HttpEndpoint=enabled,HttpTokens=required,HttpPutResponseHopLimit=2"
PowerShell
要求在新執行個體上使用 IMDSv2

下列 New-EC2Instance Cmdlet 範例會啟動c6i.large執行個體enabled,並將 MetadataOptions_HttpTokens 參數MetadataOptions_HttpEndpoint設定為 required。當您為 HttpTokens 指定值時,您也必須將 HttpEndpoint 設定為 enabled。由於安全權杖標頭required已針對中繼資料擷取請求設定為 ,因此在請求執行個體中繼資料時,需要執行個體使用 IMDSv2。

New-EC2Instance ` -ImageId ami-0abcdef1234567890 ` -InstanceType c6i.large ` -MetadataOptions_HttpEndpoint enabled ` -MetadataOptions_HttpTokens required
AWS CloudFormation

若要使用 指定執行個體的中繼資料選項 AWS CloudFormation,請參閱 AWS CloudFormation 使用者指南中的 AWS::EC2::LaunchTemplate MetadataOptions Word屬性。

設定 AMI

當您註冊新的 AMI 或修改現有的 AMI 時,您可以將 imds-support 參數設定為 v2.0。從此 AMI 啟動的執行個體只會將中繼資料版本設定為 V2 (需要金鑰) (主控台) 或HttpTokens設定為 required(AWS CLI) 。透過這些設定,執行個體要求在請求執行個體中繼資料時使用 IMDSv2。

請注意,當您將 imds-support 設定為 時v2.0,從此 AMI 啟動的執行個體也會將中繼資料回應跳轉限制 (主控台) 或 http-put-response-hop-limit(AWS CLI) 設定為 2

重要

除非您的 AMI 軟體支援 IMDSv2,否則請勿使用此參數。將值設為 v2.0 後,將無法復原。「重設」您 AMI 的唯一方法是從基礎快照建立新的 AMI。

若要設定新的 AMI for IMDSv2

使用下列其中一種方法來設定新的 AMI for IMDSv2。

AWS CLI

下列註冊影像範例會使用 AMI 根磁碟區的指定快照,將 EBS 註冊為裝置 /dev/xvdav2.0 指定 imds-support 參數,以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時需要使用 IMDSv2。

aws ec2 register-image \ --name my-image \ --root-device-name /dev/xvda \ --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} \ --architecture x86_64 \ --imds-support v2.0
PowerShell

下列 Register-EC2Image Cmdlet 範例使用 AMI 根磁碟區的指定快照註冊 EBS,作為裝置 /dev/xvdav2.0 指定 ImdsSupport 參數,以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時需要使用 IMDSv2。

Register-EC2Image ` -Name 'my-image' ` -RootDeviceName /dev/xvda ` -BlockDeviceMapping ( New-Object ` -TypeName Amazon.EC2.Model.BlockDeviceMapping ` -Property @{ DeviceName = '/dev/xvda'; EBS = (New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice -Property @{ SnapshotId = 'snap-0123456789example' VolumeType = 'gp3' } ) } ) ` -Architecture X86_64 ` -ImdsSupport v2.0
若要設定現有的 AMI for IMDSv2

使用下列其中一種方法來設定現有的 AMI for IMDSv2。

AWS CLI

下列 modify-image-attribute 範例只會修改現有的 AMI for IMDSv2。v2.0 指定 imds-support 參數,以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時需要使用 IMDSv2。

aws ec2 modify-image-attribute \ --image-id ami-0123456789example \ --imds-support v2.0
PowerShell

下列 Edit-EC2ImageAttribute Cmdlet 範例只會修改現有的 AMI for IMDSv2。v2.0 指定 imds-support 參數,以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時需要使用 IMDSv2。

Edit-EC2ImageAttribute ` -ImageId ami-0abcdef1234567890 ` -ImdsSupport 'v2.0'

使用 IAM 政策

您可以建立 IAM 政策,以防止使用者啟動新的執行個體,除非他們要求在新的執行個體上使用 IMDSv2。

使用 IMDSv2 政策強制在所有新執行個體上使用 IAM

為了確保使用者在請求執行個體中繼資料時只能啟動需要使用 IMDSv2 的執行個體,您可以指定必須符合需要 IMDSv2 的條件,才能啟動執行個體。如需 IAM 政策範例,請參閱 使用執行個體中繼資料

啟用 IMDS IPv4 和 IPv6 端點

IMDS 在執行個體上有兩個端點:IPv4 (169.254.169.254) 和 IPv6 ([fd00:ec2::254])。當您啟用 IMDS 時,Word IPv4端點會自動啟用。即使您在僅限 IPv6IPv6 子網路中啟動執行個體,Word 端點仍會保持停用狀態。若要啟用 IPv6 端點,您需要明確地執行此操作。當您啟用 IPv6 端點時,IPv4 端點會保持啟用狀態。

您可以在執行個體啟動時或之後啟用 IPv6 端點。

啟用 IPv6 端點的要求

使用下列任一方法啟動已啟用 IMDS IPv6端點的執行個體。

Console
在執行個體啟動時啟用 IMDS IPv6
  • 在 Amazon EC2 主控台中啟動執行個體,並在進階詳細資訊下指定下列項目:

    • 針對中繼資料 IPv6 端點,選擇已啟用

如需詳細資訊,請參閱進階詳細資訊

AWS CLI
在執行個體啟動時啟用 IMDS IPv6

下列執行執行個體範例會在 IPv6 啟用 IMDS 端點時啟動c6i.large執行個體。若要啟用 IPv6 端點,請針對 --metadata-options 參數指定 HttpProtocolIpv6=enabled。當您為 HttpProtocolIpv6 指定值時,您也必須將 HttpEndpoint 設定為 enabled

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c6i.large \ ... --metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
PowerShell
在執行個體啟動時啟用 IMDS IPv6

下列 New-EC2Instance Cmdlet 範例會在 IPv6 啟用 IMDS 端點時啟動c6i.large執行個體。若要啟用 IPv6 端點,請指定 MetadataOptions_HttpProtocolIpv6enabled。當您為 MetadataOptions_HttpProtocolIpv6 指定值時,您也必須將 MetadataOptions_HttpEndpoint 設定為 enabled

New-EC2Instance ` -ImageId ami-0abcdef1234567890 ` -InstanceType c6i.large ` -MetadataOptions_HttpEndpoint enabled ` -MetadataOptions_HttpProtocolIpv6 enabled

關閉對執行個體中繼資料的存取

您可以在啟動執行個體時停用 IMDS,以關閉對執行個體中繼資料的存取。您可以稍後重新啟用 IMDS 來開啟存取權。如需詳細資訊,請參閱開啟對執行個體中繼資料的存取

重要

您可以選擇在啟動時或啟動後停用 IMDS。如果您在啟動時停用 IMDS,則可能無法使用下列功能:

  • 您可能沒有執行個體的 SSH 存取權。public-keys/0/openssh-key作為執行個體公有 SSH 金鑰的 ,將無法存取,因為金鑰通常是從 EC2 執行個體中繼資料提供和存取。

  • EC2 使用者資料將無法使用,且無法在執行個體啟動時執行。EC2 使用者資料託管在 IMDS 上。如果您停用 IMDS,您可以有效地關閉對使用者資料的存取。

若要存取此功能,您可以在啟動後重新啟用 IMDS。

Console
啟動時關閉對執行個體中繼資料的存取
  • 在 Amazon EC2 主控台中啟動執行個體,並在進階詳細資訊下指定下列項目:

    • 針對 Metadata accessible (可存取中繼資料),選擇 Disabled (已停用)。

如需詳細資訊,請參閱進階詳細資訊

AWS CLI
啟動時關閉對執行個體中繼資料的存取

--metadata-options 設為 HttpEndpoint=disabled 來啟動執行個體。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c6i.large \ ... --metadata-options "HttpEndpoint=disabled"
PowerShell
啟動時關閉對執行個體中繼資料的存取

下列 New-EC2Instance Cmdlet 範例會啟動執行個體,並將 MetadataOptions_HttpEndpoint 設定為 disabled

New-EC2Instance ` -ImageId ami-0abcdef1234567890 ` -InstanceType c6i.large ` -MetadataOptions_HttpEndpoint disabled
AWS CloudFormation

若要為使用 的執行個體指定中繼資料選項 AWS CloudFormation,請參閱 AWS CloudFormation 使用者指南中的 AWS::EC2::LaunchTemplate MetadataOptions Word屬性。

允許存取執行個體中繼資料中的標籤

根據預設,執行個體標籤無法存取執行個體中繼資料。對於每個執行個體,您必須明確允許存取。如果允許存取,執行個體標籤金鑰必須符合特定字元限制,否則執行個體啟動會失敗。如需詳細資訊,請參閱允許存取執行個體中繼資料中的標籤