使用 Identity-Aware Proxy 連線至 Linux VM

本文說明如何使用 Identity-Aware Proxy (IAP) TCP 轉送,透過內部 IP 位址連線至虛擬機器 (VM) 執行個體。

IAP TCP 轉送功能可讓您建立加密通道,將 SSH 連線轉送至 VM。連線至使用 IAP 的 VM 時,IAP 會先將 SSH 連線包裝在 HTTPS 中,再將連線轉送至 VM。接著,IAP 會檢查您是否具備必要的 IAM 權限,如果具備,就會授予 VM 存取權。

如需連線至沒有外部 IP 位址的 VM,且無法使用 IAP,請參閱「僅限內部 VM 的連線選項」中列出的其他方法。

事前準備

  • 建立防火牆規則,允許來自 IAP 的連線。
  • 如果尚未設定驗證,請先完成設定。驗證程序會確認您的身分,以便授予 Google Cloud 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,您可以選取下列其中一個選項,向 Compute Engine 進行驗證:

    請根據您打算如何使用本頁範例,選取對應的分頁標籤:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證機制。

    gcloud

    1. 安裝 Google Cloud CLI。 安裝完成後, 請執行下列指令,初始化 Google Cloud CLI:

      gcloud init

      如果採用外部識別資訊提供者 (IdP),必須先 使用聯合身分登入 gcloud CLI。

  • 設定預設區域和可用區。

支援的作業系統

Compute Engine 提供的所有公開 Linux 映像檔都支援這些連線方法。如果是 Fedora CoreOS 映像檔,您必須先設定 SSH 存取權,才能使用這些方法。

連線至 VM

如要連線至 VM,請完成下列其中一個分頁中的步驟。

控制台

如要使用瀏覽器中的 SSH,透過 VM 的內部 IP 位址建立 SSH 連線通道,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 在虛擬機器執行個體清單中,按一下您要連線的執行個體那一列的 SSH。

gcloud

使用 gcloud compute ssh 指令搭配 --tunnel-through-iap 旗標,透過 VM 的內部 IP 位址建立 SSH 連線通道:

    在 Google Cloud 控制台啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。

  1. 執行下列指令,連線至 VM:

    gcloud compute ssh INSTANCE_NAME \
        --project=PROJECT_ID \
        --zone=ZONE \
        --tunnel-through-iap

    更改下列內容:

    • INSTANCE_NAME:要連線 的 VM 名稱。
    • PROJECT_ID:VM 所在專案的 ID。
    • ZONE:VM 所在的可用區名稱。

IAP Desktop

如要使用 IAP Desktop 連線至 VM,請按照下列步驟操作:

  1. 如果尚未安裝 IAP Desktop,請在工作站上安裝。

  2. 開啟 IAP Desktop。「Add projects」(新增專案) 視窗隨即開啟。

  3. 看到提示訊息後,請使用有權存取專案 (內含您要連線的 VM) 的 Google 帳戶登入。

  4. 在「Add projects」(新增專案) 視窗中,輸入專案 ID 或專案名稱,其中包含您要連線的 VM。

  5. 在「Project Explorer」視窗中,再次在 VM 名稱上按一下滑鼠右鍵,然後選取「Connect」(連線),連線至 VM。

OpenSSH 用戶端

透過 IAP 通道使用 SSH,連線至沒有外部 IP 位址的 VM。您可以自行編寫 SSH 設定檔 (~/.ssh/config),讓 VS Code 或 OpenSSH 用戶端等工具直接連線。

  1. 執行 gcloud compute ssh 指令,至少連線至 VM 一次,產生並傳播安全殼層金鑰:

    gcloud compute ssh INSTANCE_NAME \
        --project=PROJECT_ID \
        --zone=ZONE \
        --tunnel-through-iap

    更改下列內容:

    • INSTANCE_NAME:要連線 的 VM 名稱。
    • PROJECT_ID:VM 所在專案的 ID。
    • ZONE:VM 所在的可用區。

    連線成功後,請結束 SSH 工作階段。

  2. 在本機工作站上開啟或建立 SSH 設定檔。這個檔案通常位於 Linux 和 macOS 的 ~/.ssh/config,或 Windows 的 %USERPROFILE%\.ssh\config。

  3. 在 SSH 設定檔中加入下列區塊,為 VM 附加設定項目:

    Host INSTANCE_NAME
        HostName INSTANCE_NAME
        IdentityFile PATH_TO_PRIVATE_KEY
        ProxyCommand gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project=PROJECT_ID --zone=ZONE --verbosity=warning
        User USERNAME

    更改下列內容:

    • INSTANCE_NAME:要 連線的 VM 名稱。
    • PATH_TO_PRIVATE_KEY:私密金鑰檔案的路徑,通常是 ~/.ssh/google_compute_engine。
    • PROJECT_ID:VM 所在專案的 ID。
    • ZONE:VM 所在的可用區。
    • USERNAME:VM 上的使用者名稱,例如 Google Cloud OS 登入使用者名稱或中繼資料使用者名稱。
  4. 在本機終端機或 SSH 用戶端執行下列指令,連線至 VM:

    ssh INSTANCE_NAME

PuTTY 應用程式

如要使用 PuTTY 透過 VM 的內部 IP 位址建立 SSH 連線通道,請按照下列步驟操作:

  1. 如果您尚未新增安全殼層金鑰,請將安全殼層金鑰新增至 VM。
  2. 如果工作站尚未安裝 PuTTY 應用程式,請 下載 PuTTY 套件檔案。
  3. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面,找到要連線的 VM 名稱。

    前往 VM 執行個體

  4. 開啟 PuTTY 應用程式,連線設定視窗隨即開啟。
  5. 在「主機名稱 (或 IP 位址)」欄位中,輸入與安全殼層金鑰相關聯的使用者名稱,以及要連線的 VM 名稱。請使用下列格式:

    USERNAME@INSTANCE_NAME

    更改下列內容:

    • USERNAME: 您的使用者名稱。如果您在中繼資料中管理安全殼層金鑰, 使用者名稱就是您建立安全殼層金鑰時指定的使用者名稱。 如果是 OS 登入帳戶,使用者名稱會定義在 Google 個人資料中,例如 cloudysanfrancisco_example_com 或 cloudysanfrancisco。
    • INSTANCE_NAME:VM 的名稱。
  6. 在「Category」(類別) 選單中,依序前往「Connection」(連線)>「SSH」>「Auth」(驗證)>「Credentials」(憑證) (如果 PuTTY 版本早於 0.78,則依序前往「Connection」(連線)>「SSH」>「Auth」(驗證))。
  7. 在「Private key file for authentication」欄位中,按一下「Browse」,然後選取與您新增至 VM 的公開金鑰相對應的私人安全殼層金鑰檔案 (.ppk)。
  8. 在「Category」選單中,依序前往 「Connection」>「Proxy」。
  9. 在「Proxy type」(Proxy 類型) 部分,選取「Local」(本機)。
  10. 在「Telnet command, or local proxy command」欄位中,輸入下列指令:

    gcloud.cmd compute start-iap-tunnel INSTANCE_NAME PORT_NUMBER --listen-on-stdin --project=PROJECT_ID --zone=ZONE

    更改下列內容:

    • INSTANCE_NAME:INSTANCE_NAME:要連線的 VM 名稱。
    • PORT_NUMBER:sshd daemon 執行的通訊埠。PORT_NUMBER 預設為 22。
    • PROJECT_ID:託管您要連線的 VM 的專案。
    • ZONE:VM 所在的可用區。
  11. 點選「開啟」,連線至 VM。

疑難排解

如要瞭解如何診斷及解決 SSH 連線失敗的問題,請參閱「排解 SSH 問題」。

後續步驟