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

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

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

如果您想要將執行個體設定為只接受執行個體中繼資料服務第 2 版 (IMDSv2) 呼叫,建議您使用下列工具和轉換路徑。

轉換至 IMDSv2 的工具

下列工具可協助您識別、監控和管理軟體從 IMDSv1 到 IMDSv2 的轉換。如需如何使用這些工具的指示,請參閱 需要 IMDSv2 的建議路徑

AWS 軟體

最新版本的 AWS CLI 和 AWS SDKs 支援 IMDSv2。若要使用 IMDSv2,請更新您的 EC2 執行個體以使用最新版本。如需支援 IMDSv2 的最低 AWS SDK 版本,請參閱 使用支援的 AWS 開發套件

所有 Amazon Linux 2 和 Amazon Linux 2023 軟體套件都支援 IMDSv2。Amazon Linux 2023 預設會停用 IMDSv1。

IMDS Packet Analyzer

IMDS Packet Analyzer 是一種開放原始碼工具,可在執行個體的開機階段和執行時間操作期間識別和記錄 IMDSv1 呼叫。透過分析這些日誌,您可以精確識別在執行個體上進行 IMDSv1 呼叫的軟體,並判斷哪些項目需要更新,才能僅在執行個體上支援 IMDSv2。您可以從命令列執行 IMDS Packet Analyzer,或將其安裝為服務。如需詳細資訊,請參閱 GitHub 上的 AWS ImdsPacketAnalyzer

CloudWatch

CloudWatch 提供下列兩個指標來監控您的執行個體:

MetadataNoToken – IMDSv2 使用字符後端工作階段,而 IMDSv1 不使用。MetadataNoToken 指標會追蹤對使用 IMDSv1 的執行個體中繼資料服務 (IMDS) 的呼叫數量。透過追蹤此指標至零,您可以決定是否要升級所有軟體以使用 IMDSv2 及升級時間。

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

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

啟動 APIs

新執行個體:使用 RunInstances API 啟動需要使用 IMDSv2 的新執行個體。如需詳細資訊,請參閱設定新執行個體的執行個體中繼資料選項

現有執行個體:使用 ModifyInstanceMetadataOptions API 要求在現有執行個體上使用 IMDSv2。如需詳細資訊,請參閱修改現有執行個體的執行個體中繼資料選項

Amazon EC2 Auto Scaling 群組啟動的新執行個體:若要要求在 Amazon EC2 Auto Scaling 群組啟動的所有新執行個體上使用 IMDSv2,Amazon EC2 Auto Scaling 群組可以使用啟動範本或啟動組態。當您建立啟動範本建立啟動組態時,必須設定 MetadataOptions 參數以要求使用 IMDSv2。Amazon EC2 Auto Scaling 群組會使用新的啟動範本或啟動組態啟動新的執行個體,但現有的執行個體不會受到影響。

Amazon EC2 Auto Scaling 群組中的現有執行個體:使用 ModifyInstanceMetadataOptions API 要求在現有執行個體上使用 IMDSv2,或終止執行個體,Amazon EC2 Auto Scaling 群組將使用新啟動範本或啟動組態中定義的執行個體中繼資料選項設定來啟動新的替換執行個體。

AMI

設定為 ImdsSupport 參數的 AMIs 預設v2.0會啟動需要 IMDSv2 的執行個體。Amazon Linux 2023 已使用 設定ImdsSupport = v2.0

新 AMIs:在建立新的 AMI v2.0時,使用 register-image CLI 命令將 ImdsSupport 參數設定為 。

現有 AMIs:使用 modify-image-attribute CLI 命令,在修改現有 AMI v2.0時將 ImdsSupport 參數設定為 。

如需詳細資訊,請參閱設定 AMI

IAM 政策和 SCP

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

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

  • 無法使用 ModifyInstanceMetadataOptions API 修改執行中的執行個體來重新啟用 IMDSv1。

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

  • ec2:MetadataHttpEndpoint

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpTokens

如果 API 或 CLI 呼叫中的參數不符合包含條件金鑰的政策中指定的狀態,則 API 或 CLI 呼叫會失敗並顯示 UnauthorizedOperation 回應。

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

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

宣告政策

使用宣告式政策 ( 的功能 AWS Organizations) 集中設定並強制執行 IMDSv2 作為整個組織的預設 IMDS 版本。如需範例政策,請參閱AWS Organizations 《 使用者指南》中支援的宣告政策區段中的執行個體中繼資料預設值索引標籤。

步驟 1:識別具有 IMDSv2=選用和稽核 IMDSv1 使用情況的執行個體

若要評估 IMDSv2 遷移範圍,請識別設定為允許 IMDSv1 或 IMDSv2 的執行個體,並稽核 IMDSv1 呼叫。

  1. 識別設定為允許 IMDSv1 或 IMDSv2 的執行個體:

    Amazon EC2 console
    1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    2. 在導覽窗格中,選擇執行個體

    3. 若要只查看設定為允許 IMDSv1 或 IMDSv2 的執行個體,請新增篩選條件 IMDSv2 = 選用

    4. 或者,若要查看所有執行個體的 IMDSv2 是否為選用必要,請開啟偏好設定視窗 (齒輪圖示),開啟 IMDSv2,然後選擇確認。這會將 IMDSv2 資料欄新增至執行個體資料表。

    AWS CLI

    使用 describe-instances 命令並依 篩選metadata-options.http-tokens = optional,如下所示:

    aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text
  2. 在每個執行個體上稽核 IMDSv1 呼叫:

    使用 CloudWatch 指標 MetadataNoToken。此指標會顯示對執行個體上 IMDS 的 IMDSv1 呼叫次數。如需詳細資訊,請參閱執行個體指標

  3. 在進行 IMDSv1 呼叫的執行個體上識別軟體:

    使用開放原始碼 IMDS Packet Analyzer 來識別和記錄執行個體開機階段和執行時間操作期間的 IMDSv1 呼叫。使用此資訊來識別要更新的軟體,讓您的執行個體準備好僅使用 IMDSv2。您可以從命令列執行 IMDS Packet Analyzer,或將其安裝為服務。

步驟 2:將軟體更新至 IMDSv2

將執行個體上使用角色登入資料的所有 SDKs、CLIs 和軟體更新為 IMDSv2-compatible版本。如需更新 CLI 的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》中的安裝或更新至 AWS CLI的最新版本

步驟 3:執行個體需要 IMDSv2

透過 MetadataNoToken 指標確認零 IMDSv1 呼叫後,請將您現有的執行個體設定為需要 IMDSv2。此外,將所有新執行個體設定為需要 IMDSv2。換句話說,在所有現有和新的執行個體上停用 IMDSv1。

  1. 將現有執行個體設定為需要 IMDSv2:

    Amazon EC2 console
    1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

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

    3. 選取執行個體。

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

    5. 針對 IMDSv2,請選擇必要

    6. 選擇儲存

    AWS CLI

    使用 modify-instance-metadata-options CLI 命令來指定僅使用 IMDSv2。

    注意

    您可以在執行中的執行個體上修改此設定。變更會立即生效,而不需要重新啟動執行個體。

    如需詳細資訊,請參閱需要使用 IMDSv2

  2. 在停用 IMDSv1 後監控問題:

    1. 使用 MetadataNoTokenRejected CloudWatch 指標追蹤 IMDSv1 呼叫嘗試和拒絕的次數。

    2. 如果MetadataNoTokenRejected指標在遇到軟體問題的執行個體上記錄 IMDSv1 呼叫,這表示軟體需要更新才能使用 IMDSv2。

  3. 設定新執行個體以要求 IMDSv2:

    Amazon EC2 console
    1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    2. 依照步驟啟動執行個體

    3. 展開進階詳細資訊,對於中繼資料版本僅選擇 V2 (需要金鑰)

    4. Summary (摘要) 面板中,檢閱您的執行個體組態,然後選擇 Launch instance (啟動執行個體)。

      如需詳細資訊,請參閱啟動時設定執行個體

    AWS CLI

    AWS CLI:使用 run-instances 命令並指定需要 IMDSv2。

步驟 4:將 IMDSv2=必要設為預設值

您可以在帳戶或組織層級將 IMDSv2=必要設定為預設組態。這可確保所有新啟動的執行個體都會自動設定為需要 IMDSv2。

  1. 設定帳戶層級預設值:

    Amazon EC2 console
    1. 前往 https://console.aws.amazon.com/ec2/ 開啟 Amazon EC2 主控台。

    2. 在 EC2 儀表板的帳戶屬性下,選擇資料保護和安全性

    3. IMDS 預設值下,選擇管理。

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

    5. 對於中繼資料版本,選擇僅 V2 (需要金鑰)

    6. 選擇更新

    AWS CLI

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

    如需詳細資訊,請參閱將 IMDSv2 設定為帳戶的預設值

  2. 或者,使用宣告政策設定組織層級預設值:

    使用宣告政策將 IMDSv2 的組織預設值設定為必要。如需範例政策,請參閱AWS Organizations 《 使用者指南》中支援的宣告政策區段中的執行個體中繼資料預設值索引標籤。

步驟 5:強制執行個體要求 IMDSv2

使用下列 IAM 或 SCP 條件金鑰來強制執行 IMDSv2 用量:

  • ec2:MetadataHttpTokens

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpEndpoint

這些條件金鑰控制 RunInstancesModifyInstanceMetadataOptions APIs和對應 CLIs。如果已建立政策,而且 API 呼叫中的參數與使用條件金鑰之政策中指定的狀態不相符,則 API 或 CLI 會失敗並顯示 UnauthorizedOperation 回應。

如需 IAM 政策的範例,請參閱使用執行個體中繼資料