設定 IAP TCP 轉送

本頁面說明如何在 Google Cloud 或非Google Cloud 環境中,設定及使用 Identity-Aware Proxy (IAP) TCP 轉送功能,並搭配 IP 位址或主機名稱。

總覽

您可以使用 Google Cloud CLI,透過資源的私人 IP 位址或主機名稱建立資源通道。如果您在非Google Cloud 環境中擁有外部資源,並透過 Cloud Interconnect 或 VPN 連線至 Google Cloud ,即可搭配使用 IAP TCP 轉送功能。

事前準備

如要連線至 Google Cloud以外的資源,您必須設定混合式連線。如要將外部非Google Cloud 資源連線至Google Cloud,必須使用混合式連線。詳情請參閱 Cloud InterconnectCloud VPN 說明文件。

您的 Cloud Router 必須通告 IAP-TCP IP 範圍 35.235.240.0/20,目的地才能透過 Cloud VPN 或 Cloud Interconnect 將回應流量傳回,而非透過網際網路。如果沒有這項設定,您就無法建立通道,連線至 Google Cloud 專案外部的資源。

如要設定 Cloud Router 通告 IAP-TCP IP 範圍 35.235.240.0/20,請按照「通告自訂 IP 範圍」中的操作說明進行操作。

下列程序提供使用 Google Cloud CLI 完成工作的範例。如要瞭解如何使用 API 與目的地群組互動,請參閱 REST 資源:projects.iap_tunnel.locations.destGroups

建立通道目的地群組

設定通道時,請指定要用於權限檢查的通道目的地群組。通道目的地群組代表具有相同通道存取限制的資源。您可以建立任意數量的目的地群組,每個群組可包含任意數量的相符 IP 範圍或完整網域名稱 (FQDN)。目的地群組可以重疊,使用上更靈活。

建立目的地群組時,您必須指定區域。為獲得最佳結果,指定的區域必須與目的地資源的位置相符。舉例來說,如果資源是透過 VPN 連線,您就必須使用 VPN 閘道的區域。

如要建立目的地群組,您必須具備 iap.tunnelDestGroups.create 權限,這項權限可透過 iap.tunnelDestGroupEditor 角色授予。如要授予單一角色,請參閱 IAM 說明文件中的「授予單一角色」。

控制台

  1. 前往 IAP 頁面,然後選取專案 (如果尚未選取)。

  2. 在「SSH and TCP resources」(SSH 和 TCP 資源) 分頁標籤上,按一下「Create destination group」(建立目的地群組)

  3. 輸入群組名稱。群組名稱只能包含小寫字母 (a-z) 和破折號 (-)。

  4. 從下拉式清單中,選取要建立目的地群組的區域。

  5. 在「IP 位址」部分,按一下「新增資料列」,然後輸入資源的 IP 位址或 FQDN。

    IP 範圍由以半形逗號分隔的範圍組成,並使用 CIDR 標記法,例如 10.1.2.0/24,172.0.0.0/8

    FQDN 清單是以逗號分隔的清單,其中包含主機名稱,例如 *.internal.company.com。您可以在 FQDN 項目中使用萬用字元。

  6. 按一下「建立到達網頁群組」

gcloud

gcloud iap tcp dest-groups create YOUR_GROUP_NAME \
  --region=REGION \
  --ip-range-list=IP_RANGE_LIST \
  --fqdn-list=FQDN_LIST

更改下列內容:

  • YOUR_GROUP_NAME:群組名稱。群組名稱只能包含小寫字母 (a-z) 和破折號 (-)。
  • REGION:要建立目的地群組的區域,例如 us-central1
  • IP_RANGE_LIST:選用。IP 範圍清單,由以半形逗號分隔的範圍組成,並使用 CIDR 標記法,例如 10.1.2.0/24,172.0.0.0/8
  • FQDN_LIST:選用。FQDN 清單是以逗號分隔的清單,其中包含主機名稱,例如 *.internal.company.com。如果 FQDN 項目有萬用字元前置字元,則會比對出結尾為指定字元的任何主機名稱。否則必須完全相符。如果要求符合任何 IP 範圍或 FQDN,系統就會將其視為相符。

如果不確定現有群組,請執行下列指令列出群組:

gcloud iap tcp dest-groups list \
  --region=REGION

管理通道目的地群組

您可以查看目的地群組的詳細資料、修改目的地群組,以及移除目的地群組。

控制台

  1. 前往 IAP 頁面,然後按一下「SSH and TCP resources」(SSH 和 TCP 資源) 分頁標籤。

    • 如要查看目的地群組的詳細資料,請按一下目的地群組名稱。

    • 如要修改目的地群組,請選取目的地群組,然後按一下鉛筆圖示開啟「編輯目的地群組」面板。您也可以從這個面板刪除目的地群組。

    • 如要移除目的地群組,請選取目的地群組,然後按一下垃圾桶圖示。

gcloud

如要瞭解如何使用 gcloud CLI 管理目的地群組,請參閱目的地群組 gcloud 指令。

設定通道權限

如要建立通道,您必須對相關目的地群組擁有 iap.tunnelDestGroups.accessViaIAP 權限。您可以透過 iap.tunnelResourceAccessor 角色授予權限。

如要設定目的地群組的權限,您必須具備 iap.tunnelDestGroups.setIamPolicy 權限,這項權限可透過 iap.admin 角色授予。

控制台

  1. 前往 IAP 頁面

  2. 在「SSH and TCP resources」(SSH 和 TCP 資源) 分頁中,選取要設定權限的目的地群組。

  3. 在開啟的面板中,按一下「新增主體」,然後輸入使用者的電子郵件地址。

  4. 在「指派角色」部分,選取要指派給主體的角色。

  5. 按一下 [儲存]

gcloud

gcloud iap tcp dest-groups add-iam-policy-binding \
  --member=MEMBER \
  --role=ROLE \
  --dest-group=GROUP_NAME \
  --region=REGION

更改下列內容:

  • MEMBER:使用者的電子郵件地址,例如 user:exampleuser@company.com

  • ROLE:必要的 IAP 角色, roles/iap.tunnelResourceAccessor

  • GROUP_NAME:目的地群組名稱。

  • REGION:區域名稱,例如 us-central1

瞭解通道用量

使用 IAP-TCP 時,您可以運用三種 gcloud CLI 指令:start-iap-tunnelsshscp

IAP-TCP 指令已更新,支援以 IP 和 FQDN 為基礎的通道。如要切換至 IP 位址或 FQDN,請在使用指令時執行下列操作:

  • 請指定 IP 位址或 FQDN,而非執行個體名稱。
  • 使用 --region,而不要使用 --zone
  • 使用 --dest-group 指定要使用的目的地群組。
  • 使用 --network 指定要使用的虛擬私有雲網路名稱。

您指定的 IP 位址必須是目的地的私人 IP 位址。 您無法將 IAP-TCP 與公開 IP 位址搭配使用。如果使用 FQDN,則必須解析為目的地的私人 IP 位址。請注意,名稱解析是在您指定的虛擬私有雲網路內完成,而非在用戶端網路中完成。舉例來說,如果您嘗試建立通往 vm.corp.company.com 的通道,系統會在虛擬私有雲網路的環境中,將 vm.corp.company.com 轉換為 IP 位址。

指定的區域必須與目標群組的區域相符。

您指定的網路必須與可存取目的地的虛擬私有雲網路名稱相符。一般網路名稱為 default。您可以在 Google Cloud 控制台的虛擬私有雲網路頁面上查看網路名稱清單,也可以執行下列指令來擷取網路名稱清單:

gcloud compute networks list --format='value(name)'

範例

以下範例使用 172.16.1.2 這個 IP 位址。每個指令也可以使用 FQDN (例如 example.internal.company.com) 取代 IP 位址。

SSH 範例

如要啟動 172.16.1.2 的 SSH 工作階段,請執行下列指令:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

DESTINATION_GROUP_NAME 替換為目的地群組名稱。

請注意,系統會隱含 --plain,因此使用 IP 位址時,不會嘗試自動管理及推送 SSH 金鑰。

如果收到 Permission denied (publickey) 錯誤,表示指令找不到包含 SSH 金鑰的檔案。如要解決這個問題,請將包含 SSH 私密金鑰的檔案路徑新增為 SSH 指令的參數,如下列範例所示:

gcloud compute ssh 172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap \
    -- -i ~/.ssh/google_compute_engine

DESTINATION_GROUP_NAME 替換為目的地群組名稱。

如要以特定使用者身分登入,請使用 USER@IP 格式,而非只指定 IP:

gcloud compute ssh user@172.16.1.2 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

如果帳戶受到密碼保護,請輸入密碼。如果帳戶受到私密或公開安全殼層金鑰組保護,您必須使用上述 -- -i 旗標指定金鑰組。

通道範例

如要建立連往其他 TCP 通訊埠的通道,請使用 start-iap-tunnel 指令。如要從 localhost:8022 建立通往通訊埠 172.16.1.2:8085 的通道,請執行下列指令:

gcloud compute start-iap-tunnel 172.16.1.2 8085 \
    --local-host-port=localhost:8022 \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default

請注意,在本範例中,目的地電腦必須監聽通訊埠 8085

建立通道後,您可以使用 PuTTY 等工具建立連線。

SCP 範例

如要使用 SCP 將檔案複製到 172.16.1.2,請執行下列指令:

gcloud compute scp file.txt 172.16.1.2:~/ \
    --region=us-central1 \
    --dest-group=DESTINATION_GROUP_NAME \
    --network=default \
    --tunnel-through-iap

請注意,系統會隱含 --plain,因此使用 IP 位址時,不會嘗試自動管理及推送 SSH 金鑰。

SSH ProxyCommand 範例

如要將指令做為 ProxyCommand 使用,一律透過管道連線至 172.16.1.2,請在 ~/.ssh/config 設定或同等項目中新增項目,如下列範例所示:

Host example
ProxyCommand gcloud compute start-iap-tunnel 172.16.1.2 '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning
  

執行下列指令時,ProxyCommand 會生效:ssh example

您也可以設定 ProxyCommand 來處理多個主機名稱,如下列範例所示:

Host *.internal.company.com
ProxyCommand gcloud compute start-iap-tunnel '%h' '%p' --region=us-central1 --dest-group=DESTINATION_GROUP_NAME --network=default --verbosity=warning

執行下列指令時,ProxyCommand 會生效:ssh example.internal.company.com