在 Google Cloud 或非 Google Cloud 環境中,使用 IP 位址或主機名稱設定 IAP TCP 轉送

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

總覽

您可以使用 Google Cloud CLI 和資源私人 IP 位址或主機名稱建立資源的通道。如果您有透過 Cloud Interconnect 或 VPN 與Google Cloud 連線的非 Google Cloud 外部資源,可以使用 IAP TCP 轉送功能與這些資源連線。

事前準備

如果您需要建立通道,連線至 Google Cloud以外的資源,則必須設定混合式連線。您必須使用混合式連線,才能將外部非Google Cloud 資源連結至Google Cloud。詳情請參閱 Cloud InterconnectCloud VPN 說明文件。

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

如要設定雲端路由器,以便宣告 IAP-TCP IP 範圍 35.235.240.0/20,請按照「宣告自訂 IP 範圍」中的操作說明進行。

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

建立通道目的地群組

設定隧道時,您會指定用於權限檢查的目標群組。通道目的地群組代表具有相同通道存取限制的資源。您可以建立任意數目的目的地群組,每個群組可包含任意數量的相符 IP 範圍或 FQDN。目的地群組可重疊,提供更大的彈性。

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

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

控制台

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

  2. 在「SSH and TCP resources」分頁中,按一下「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 CLI

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 CLI

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

設定通道權限

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

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

控制台

  1. 前往 IAP 頁面

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

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

  4. 在「Assign roles」(指派角色) 專區中,選取要指派給主體的角色。

  5. 按一下 [儲存]

gcloud CLI

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

瞭解通道用法

您可以使用三個 gcloud CLI 指令來處理 IAP-TCP:start-iap-tunnelsshscp

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

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

您指定的 IP 位址必須是目的地的私人 IP 位址。您無法使用 IAP-TCP 搭配公開 IP 位址。如果您使用 FQDN,則必須解析為目的地的私人 IP 位址。請注意,名稱解析是在您指定的 VPC 網路內完成,而不是在用戶端網路中完成。舉例來說,如果您嘗試建立通往 vm.corp.company.com 的通道,將 vm.corp.company.com 轉換為 IP 位址的步驟會在 VPC 網路的背景中執行。

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

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

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 指令的參數,如以下範例所示:

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:8022172.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' \
    --listen-on-stdin \
    --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' 
--listen-on-stdin
--region=us-central1
--dest-group=destination-group-name
--network=default --verbosity=warning

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