本頁面說明如何在 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 Interconnect 或 Cloud 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 說明文件中的「授予單一角色」。
控制台
前往 IAP 頁面,然後選取專案 (如果尚未選取)。
在「SSH and TCP resources」(SSH 和 TCP 資源) 分頁標籤上,按一下「Create destination group」(建立目的地群組)。
輸入群組名稱。群組名稱只能包含小寫字母 (a-z) 和破折號 (-)。
從下拉式清單中,選取要建立目的地群組的區域。
在「IP 位址」部分,按一下「新增資料列」,然後輸入資源的 IP 位址或 FQDN。
IP 範圍由以半形逗號分隔的範圍組成,並使用 CIDR 標記法,例如
10.1.2.0/24,172.0.0.0/8。FQDN 清單是以逗號分隔的清單,其中包含主機名稱,例如
*.internal.company.com。您可以在 FQDN 項目中使用萬用字元。按一下「建立到達網頁群組」。
gcloud
gcloud iap tcp dest-groups createYOUR_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
管理通道目的地群組
您可以查看目的地群組的詳細資料、修改目的地群組,以及移除目的地群組。
控制台
前往 IAP 頁面,然後按一下「SSH and TCP resources」(SSH 和 TCP 資源) 分頁標籤。
如要查看目的地群組的詳細資料,請按一下目的地群組名稱。
如要修改目的地群組,請選取目的地群組,然後按一下鉛筆圖示開啟「編輯目的地群組」面板。您也可以從這個面板刪除目的地群組。
如要移除目的地群組,請選取目的地群組,然後按一下垃圾桶圖示。
gcloud
如要瞭解如何使用 gcloud CLI 管理目的地群組,請參閱目的地群組 gcloud 指令。
設定通道權限
如要建立通道,您必須對相關目的地群組擁有 iap.tunnelDestGroups.accessViaIAP 權限。您可以透過 iap.tunnelResourceAccessor 角色授予權限。
如要設定目的地群組的權限,您必須具備 iap.tunnelDestGroups.setIamPolicy 權限,這項權限可透過 iap.admin 角色授予。
控制台
前往 IAP 頁面。
在「SSH and TCP resources」(SSH 和 TCP 資源) 分頁中,選取要設定權限的目的地群組。
在開啟的面板中,按一下「新增主體」,然後輸入使用者的電子郵件地址。
在「指派角色」部分,選取要指派給主體的角色。
按一下 [儲存]。
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-tunnel、ssh 和 scp。
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