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

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

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

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

轉換至 IMDSv2 的工具

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

AWS 軟體

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

所有 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。

對於每個 EC2 執行個體,這些指標是互斥的。啟用 IMDSv1 時 MetadataNoToken (httpTokens = optional),只會發出 。當 IMDSv1 停用時 MetadataNoTokenRejected (httpTokens = required), 只會發出。如需何時使用這些指標,請參閱 需要 IMDSv2 的建議路徑

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

啟動 APIs

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

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

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

Auto Scaling 群組中的現有執行個體:使用 ModifyInstanceMetadataOptions API 要求在現有執行個體上使用 IMDSv2,或終止執行個體,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

帳戶層級控制項

您可以在帳戶層級設定所有執行個體中繼資料選項的預設值。當您啟動執行個體時,會自動套用預設值。如需詳細資訊,請參閱將 IMDSv2 設定為帳戶的預設值

您也可以強制執行在帳戶層級使用 IMDSv2 的需求。啟用 IMDSv2 強制執行時:

  • 新執行個體:設定為在啟用 IMDSv1 的情況下啟動的執行個體將無法啟動

  • 停用 IMDSv1 的現有執行個體:將防止嘗試在現有執行個體上啟用 IMDSv1。

  • 已啟用 IMDSv1 的現有執行個體:已啟用 IMDSv1 的現有執行個體不會受到影響。

如需詳細資訊,請參閱在帳戶層級強制執行 IMDSv2

IAM 政策和 SCP

您可以使用 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 政策中使用數值為 2.0 的條件索引鍵 ec2:RoleDelivery,從 IMDSv1 取得之 EC2 角色憑證產生的 API 呼叫都會收到 UnauthorizedOperation 回應。也能利用 SCP 要求的條件進行更廣泛範圍的作業。這可確保透過 IMDSv1 提供的登入資料無法確實用於呼叫 API,因為與指定條件不相符的任何 API 呼叫,將會收到 UnauthorizedOperation 錯誤。

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

宣告政策

使用宣告政策 ( 的功能 AWS Organizations) 在整個組織中集中設定 IMDS 帳戶預設值,包括 IMDSv2 強制執行。如需範例政策,請參閱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. 在導覽窗格中,選擇 Dashboard (儀表板)

    3. 帳戶屬性卡片的設定下,選擇資料保護和安全性

    4. IMDS 預設值下,選擇管理

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

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

    7. 選擇更新

    AWS CLI

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

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

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

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

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

確認任何執行個體上沒有 IMDSv1 的相依性後,建議您在所有新執行個體上強制執行 IMDSv2。

使用下列其中一個選項來強制執行 IMDSv2:

  1. 使用帳戶屬性強制執行 IMDSv2

    您可以在每個帳戶層級強制使用 IMDSv2 AWS 區域。強制執行時,執行個體只能在設定為需要 IMDSv2 時啟動。無論執行個體或 AMI 的設定方式為何,此強制執行都適用。如需詳細資訊,請參閱在帳戶層級強制執行 IMDSv2。若要在組織層級套用此設定,請設定宣告政策。如需範例政策,請參閱AWS Organizations 《 使用者指南》中支援的宣告政策一節中的執行個體中繼資料索引標籤。

    若要防止強制撤銷,您應該使用 IAM 政策來防止存取 ModifyInstanceMetadataDefaults API。如需詳細資訊,請參閱使用 IAM 政策

    注意

    此設定不會變更現有執行個體的 IMDS 版本,但會封鎖在目前已停用 IMDSv1 的現有執行個體上啟用 IMDSv1。

    警告

    如果已啟用 IMDSv2 強制執行httpTokens,且在啟動時執行個體組態、帳戶設定或 AMI 組態required中未設定為 ,則執行個體啟動將會失敗。如需故障診斷資訊,請參閱啟動IMDSv1-enabled的執行個體失敗

  2. 或者,使用以下 IAM 或 SCP 條件金鑰強制執行 IMDSv2:

    • ec2:MetadataHttpTokens

    • ec2:MetadataHttpPutResponseHopLimit

    • ec2:MetadataHttpEndpoint

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

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