在 Lightsail 上存取和設定執行個體中繼資料服務 (IMDS) - Amazon Lightsail

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

在 Lightsail 上存取和設定執行個體中繼資料服務 (IMDS)

您可以使用下列任一種方法,從執行中的執行個體存取執行個體中繼資料:

  • 執行個體中繼資料服務第 1 版 (IMDSv1) – 請求/回應方法

  • 執行個體中繼資料服務第 2 版 (IMDSv2) – 工作階段導向方法

    重要

    並非所有執行個體藍 Lightsail 支援 ImDSv2。使用 MetadataNoToken 執行個體指標追蹤對於正在使用 IMDSv1 的執行個體中繼資料服務所發出的呼叫次數。如需詳細資訊,請參閱檢視執行個體指標

依預設,您可以使用 IMDSv1 或 IMDSv2,或兩者。執行個體中繼資料服務會依據任何指定請求中是否存在 IMDSv2 特有的 PUTGET 標頭來區分 IMDSv1 和 IMDSv2 請求。如需詳細資訊,請參閱 透過 EC2 執行個體中繼資料服務的增強功能,提高開放式防火牆、反向代理伺服器及 SSRF (伺服器端請求偽造) 弱點的防禦能力

您可以在每個執行個體上設定執行個體中繼資料服務,此類本機程式碼或使用者必須使用 IMDSv2。當您指定必須使用該 IMDSv2 時,IMDSv1 則無法繼續運作。如需詳細資訊,請參閱《Amazon Elastic Compute Cloud 使用者指南》中的設定執行個體中繼資料選項

若要擷取執行個體中繼資料,請參閱《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》中的擷取執行個體中繼資料

注意

本節中的範例使用執行個體中繼資料服務的 IPv4 地址:169.254.169.254。如果您要從 IPv6 地址上的執行個體擷取執行個體中繼資料,請先確保您已啟用並改用 IPv6 地址:fd00:ec2::254。執行個體中繼資料服務的 IPv6 地址與 IMDSv2 命令相容。

執行個體中繼資料服務第 2 版 的運作方式

IMDSv2 會使用工作階段導向請求。使用工作階段導向請求,您就能建立定義工作階段持續期間的工作階段字符,此期間最短 1 秒,最長可達 6 小時。在指定持續期間,您可以將相同的工作階段字符用於後續請求。在指定持續期間到期之後,您必須建立新的工作階段字符,才能使用未來請求。

重要

從 Amazon 2023 啟動的 Lightsail 執行個體預設會設定 ImDSv2。

下列範例使用 Linux 和 PowerShell 殼層指令碼和 ImDSv2 來擷取頂層執行個體中繼資料項目。這些範例會執行下列操作:

  • 使用 PUT 請求,建立持續六小時 (21,600 秒) 的工作階段字符

  • 將工作階段字符標頭存放到名為 TOKEN (在 Linux 上) 或 token (在 Windows 上) 的變數中

  • 使用字符請求最上層中繼資料項目

首先執行下列命令:

  • 在 Linux 上:

    • 首先,使用下列命令產生字符。

      [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" -v http://169.254.169.254/latest/meta-data/
  • 在 Windows 上:

    • 首先,使用下列命令產生字符。

      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/

建立字符後,您可以重複使用直至其到期為止。在下列範例中,每個命令會取得用於啟動執行個體的藍圖 (Amazon Machine Image (AMI) ID。上一個範例中的字符會被重複使用。其會存放在 $TOKEN (在 Linux 上) 或 $token (在 Windows 上) 中。

  • 在 Linux 上:

    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id
  • 在 Windows 上:

    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 請求啟動針對執行個體中繼資料服務的工作階段。PUT 請求會傳回一個字符,其必須包含在執行個體中繼資料服務的後續 GET 請求中。使用 IMDSv2 時,需要該字符才能存取中繼資料。

  • 字符 – 在針對執行個體中繼資料服務的所有 GET 請求中包含該字符。字符使用方式設定為 required 時,不包含有效字符或字符已到期的請求會收到 401 - Unauthorized HTTP 錯誤碼。如需變更 Token 使用需求的相關資訊,請參閱《AWS CLI 命令參考update-instance-metadata-options中的〈〉。

    • 字符是執行個體特定金鑰。字符在其他執行個體上無效,而且如果您嘗試在產生字符的執行個體外部使用該字符,則會遭到拒絕。

    • PUT 請求必須包含指定字符存留時間 (TTL) 的標頭,時間會以秒數表示。可將 TTL 指定為最多六小時 (21,600 秒)。字符會代表邏輯工作階段。TTL 會指定字符有效的時間長度,也就是工作階段的持續期間。

    • 在字符到期後,若要繼續存取執行個體中繼資料,您必須使用另一個 PUT 請求建立新的工作階段。

    • 您可以選擇重複使用字符或使用每個請求來建立新字符。對於少量請求,您每次需要存取執行個體中繼資料服務時,就能更輕鬆地產生和立即使用字符。但為了提升效率,您可以為字符指定更長的存留期間,並重複使用該字符,而不用在每次需請求執行個體中繼資料時寫入 PUT 請求。並行字符數量沒有實際限額,每個都代表它自己的工作階段。但 IMDS2 仍會受到正常執行個體中繼資料服務連線和調節限額的限制。如需詳細資訊,請參閱《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》中的查詢限流

HTTP GETHEAD 方法可在 IMDSv2 執行個體中繼資料請求中使用。如果 PUT 請求中包含 X-Forwarded-For 標頭,則會遭到拒絕。

依預設,PUT 請求在 IP 通訊協定等級的 1 回應跳轉限額 (存留時間)。如果需要更大的跳轉限額,您可以使用 update-instance-metadata-options 命令調整跳轉限額。例如,您可以需要較大的跳轉限額,才能與執行個體上執行之容器服務回溯相容。若要取得更多資訊,請參閱《指AWS CLI 令參考》update-instance-metadata-options中的。

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

可選擇使用 Instance Metadata Service Version 2 (IMDSv2)。Instance Metadata Service Version 1 (IMDSv1) 將持續無限期受到支援。如果您選擇使用 IMDSv2 進行移轉,我們建議您使用下列工具和轉換路徑。

協助轉換至 IMDSv2 的工具

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

  • AWS 軟體:最新版本的 AWS 開發套件和 AWS CLI 支援的 ImDSv2。若要使用 IMDSv2,請確定您的執行個體具有最新版本的 AWS SDK 和. AWS CLI若要取得有關更新的資訊 AWS CLI,請參閱《使用指南》 AWS CLI中的〈安裝、更新和解除安裝AWS Command Line Interface 〉。所有 Amazon Linux 2 軟體套件都支援 IMDSv2。

  • 執行個體指標:IMDSv2 使用字符支援的工作階段,而 IMDSv1 不使用。MetadataNoToken 執行個體指標會追蹤針對正在使用 IMDSv1 的執行個體中繼資料服務所發出的呼叫次數。透過追蹤此指標至零,您可以決定是否要升級所有軟體以使用 IMDSv2 及升級時間。如需詳細資訊,請參閱在 Amazon Lightsail 中檢視執行個體指標

  • Lightsail API 作業和命 AWS CLI 令的更新:對於現有的執行個體,您可以使用update-instance-metadata-options AWS CLI 命令 (或 UpdateInstanceMetadataOptionsAPI 作業) 來要求使用 ImDSv2。下列是範例命令。確保用實例的名稱替換InstanceName為實例的名稱,並使RegionName用 AWS 區域 您的實例所在的名稱。

    aws lightsail update-instance-metadata-options --region RegionName --instance-name InstanceName --http-tokens required

建議路徑需要 IMDSv2 存取

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

步驟 1:開始時

將在執行個體上使用角色認證的 AWS SDK AWS CLI、和軟體更新為 IMDSv2 相容版本。若要取得有關更新的資訊 AWS CLI,請參閱《使用指南》 AWS CLI中的〈升級到最新版本AWS Command Line Interface

然後,使用 IMDSv2 要求變更直接存取執行個體中繼資料的軟體 (換句話說,不使用 AWS SDK)。

步驟 2:轉換期間

使用執行個體指標 MetadataNoToken 追蹤您的轉換進度。此指標會顯示對您執行個體上正在使用 IMDSv1 的執行個體中繼資料服務的呼叫次數。如需詳細資訊,請參閱檢視執行個體指標

步驟 3:所有執行個體上一切都準備就緒時

當執行個體指標 MetadataNoToken 記錄的 IMDSv1 用量為零時,即表示所有執行個體上一切都已準備就緒。在此階段,您可以要求透過指update-instance-metadata-options令使用 IMDSv2。您可以對執行中的執行個體進行這些變更,您也不需要重新啟動執行個體。

更新現有執行個體的執行個體中繼資料選項只能透過 Lightsail API 或. AWS CLI目前無法在 Lightsail 主控台中使用此功能。如需詳細資訊,請參閱update-instance-metadata-options

其他 IMDS 文件

可在《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》與《適用於 Windows 執行個體的 Amazon Elastic Compute Cloud 使用者指南》中找到以下 IMDS 文件:

注意

在 Amazon EC2 中,執行個體藍圖稱為 Amazon Machine Image (AMI)。