轉換為使用 執行個體中繼資料服務第 2 版 - Amazon Elastic Compute Cloud

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

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

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

協助轉換至 IMDSv2 的工具

如果您的軟體使用 IMDSv1,請使用下列工作,以協助將您的軟體重新設定為使用 IMDSv2。

AWS 軟體

最新版本的 AWS CLI 和 AWS 開發套件支援 IMDSv2。若要使用 IMDSv2,請確定 EC2 執行個體有最新版本的 CLI 及開發套件。如需有關更新 CLI 的資訊,請參閱 AWS Command Line Interface 使用者指南中的安裝、更新和解除安裝 AWS CLI

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

如需支援 IMDSv2 的最低 AWS SDK 版本,請參閱。使用支援的 AWS 開發套件

IMDS Packet Analyzer

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

CloudWatch

IMDSv2 會使用權杖後端工作階段,而 IMDSv1 不會。此MetadataNoToken CloudWatch 測量結果會追蹤使用 IMDSv1 之「執行處理中繼資料服務」(IMDS) 的呼叫次數。透過追蹤此指標至零,您可以決定是否要升級所有軟體以使用 IMDSv2 及升級時間。

停用 IMDSv1 之後,您可以使用MetadataNoTokenRejected CloudWatch 量度追蹤 IMDSv1 呼叫嘗試和拒絕的次數。透過追蹤此指標,您可以確定是否需要更新軟體以使用 IMDSv2。

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

EC2 API 和 CLI 的更新

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

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

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

使用預設情況下設定 IMDSv2 的 AMI

當您啟動執行個體時,您可以自動將其設定為預設使用 IMDSv2 (HttpTokens 參數設為 required),方法是透過 AMI 來加以啟動,該 AMI 的 ImdsSupport 參數設定為 v2.0。您可以在使用註冊映像 CLI 命令註冊 AMI v2.0 時將ImdsSupport參數設定為,也可以使用 CLI 命令修改現有 AMI。modify-image-attribute如需詳細資訊,請參閱 設定 AMI

IAM 政策和 SCP

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

  • 除非執行個體設定為使用 ImDSv2,否則無法使用 RunInstancesAPI 啟動執行個體。

  • 無法使用 ModifyInstanceMetadataOptionsAPI 修改執行中的執行個體,以重新啟用 IMDSv1。

IAM 政策或 SCP 必須包含下列 IAM 條件索引鍵:

  • ec2:MetadataHttpEndpoint

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpTokens

如果 API 或 CLI 呼叫中的參數與包含條件索引鍵之政策中指定的狀態不相符,則 API 或 CLI 呼叫會失敗並顯示 UnauthorizedOperation 回應。

此外,您可以選擇另外一個保護層,以強制執行從 IMDSv1 變更為 IMDSv2 的作業。在存取管理層相對於透過 EC2 角色登入資料呼叫的 API,您可以在 IAM 政策或 AWS Organizations 服務控制政策 (SCP) 中使用新的條件金鑰。具體而言,在 IAM 政策中使用數值為 2.0 的條件索引鍵 ec2:RoleDelivery,從 IMDSv1 取得之 EC2 角色憑證產生的 API 呼叫都會收到 UnauthorizedOperation 回應。也能利用 SCP 要求的條件進行更廣泛範圍的作業。這可確保透過 IMDSv1 提供的登入資料無法確實用於呼叫 API,因為與指定條件不相符的任何 API 呼叫,將會收到 UnauthorizedOperation 錯誤。

如需 IAM 政策的範例,請參閱使用執行個體中繼資料。如需 SCP 的詳細資訊,請參閱《AWS Organizations 使用者指南》中的服務控制政策

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

步驟 1:開始時

將開發套件、CLI 以及在其 EC2 執行個體上使用角色憑證的軟體更新為 IMDSv2 相容版本。如需有關更新 CLI 的資訊,請參閱 AWS Command Line Interface 使用者指南中的升級至最新版本的 AWS CLI

之後,使用 IMDSv2 請求變更可直接存取執行個體中繼資料的軟體 (換言之,就是未使用軟體開發套件的軟體)。您可以使用 IMDS Packet Analyzer,識別需要變更以使用 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 主控台:在啟動執行個體精靈中,將 Metadata accessible (可存取中繼資料) 設定為 Enabled (已啟用),並將 Metadata version (中繼資料版本) 設定為 V2 only (token required) (僅 V2 (需要權杖))。如需詳細資訊,請參閱 啟動時設定執行個體

    • AWS CLI:使用執行個體 CLI 命令,並指定 IMDSv2 為必要項目。

  • 現有執行個體

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

    • Amazon EC2 主控台:在執行個體頁面,選取您的執行個體,選擇動作執行個體設定修改執行個體中繼資料選項,針對 IMDSv2,選擇必要。如需詳細資訊,請參閱 需要使用 IMDSv2

    • AWS CLI:使用 modify-instance-metadata-optionsCLI 命令可指定僅使用 IMDSv2。

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

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

您可以檢查是否有任何執行個體尚未設定為需要使用 IMDSv2,換句話說,IMDSv2 仍設定為 optional。如果任何執行個體仍被設定為 optional,您可以重複上述步驟 3,修改執行個體中繼資料選項以使得 IMDSv2 變為 required

篩選執行個體:

  • Amazon EC2 主控台:在執行個體頁面中,使用 IMDSv2 = 選用 篩選條件來篩選執行個體。如需有關篩選的詳細資訊,請參閱 使用主控台篩選資源。您也可以檢視 IMDSv2 對於每個執行個體是必要還是選用:在偏好設定視窗中,打開 IMDSv2,將 IMDSv2 資料欄新增至執行個體表格。

  • AWS CLI:使用 describe-instances 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:MetadataHttpEndpoint IAM 條件金鑰可用來控制和 ModifyInstanceMetadataOptionsAPI RunInstances和對應 CLI 的使用。如果已建立政策,而且 API 呼叫中的參數與使用條件金鑰之政策中指定的狀態不相符,則 API 或 CLI 會失敗並顯示 UnauthorizedOperation 回應。如需 IAM 政策的範例,請參閱使用執行個體中繼資料

此外,停用 IMDSv1 之後,您可以使用MetadataNoTokenRejected CloudWatch 量度追蹤 IMDSv1 呼叫嘗試和拒絕的次數。如果停用 IMDSv1 之後,您的軟體無法正常運作,且MetadataNoTokenRejected測量結果記錄了 IMDSv1 呼叫,很可能需要更新此軟體才能使用 IMDSv2。