本頁面說明如何設定及使用 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 Interconnect 或 Cloud 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 說明文件中的「授予單一角色」一節。
控制台
前往 IAP 頁面,然後選取專案 (如果尚未選取專案)。
在「SSH and TCP resources」分頁中,按一下「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 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
管理隧道目的地群組
您可以查看目的地群組的詳細資料、修改目的地群組,以及移除目的地群組。
控制台
前往 IAP 頁面,然後按一下「SSH and TCP resources」(SSH 和 TCP 資源) 分頁標籤。
如要查看目的地群組的詳細資料,請按一下目的地群組名稱。
如要修改目的地群組,請選取目的地群組,然後按一下鉛筆圖示,開啟「修改目的地群組」面板。您也可以在這個面板中刪除目標群組。
如要移除目的地群組,請選取目的地群組,然後按一下垃圾桶圖示。
gcloud CLI
如要進一步瞭解如何使用 gcloud CLI 管理目的地群組,請參閱目的地群組 gcloud 指令。
設定通道權限
如要建立隧道,您必須在相關目的地群組中擁有 iap.tunnelDestGroups.accessViaIAP
權限。您可以透過 iap.tunnelResourceAccessor
角色授予權限。
如要設定目的地群組的權限,您必須具備 iap.tunnelDestGroups.setIamPolicy
權限,可透過 iap.admin
角色授予。
控制台
前往 IAP 頁面。
在「SSH 和 TCP 資源」分頁中,選取要設定權限的目標群組。
在開啟的面板中,按一下「新增主體」,然後輸入使用者的電子郵件地址。
在「Assign roles」(指派角色) 專區中,選取要指派給主體的角色。
按一下 [儲存]。
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-tunnel、ssh 和 scp。
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: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' \ --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