本页面介绍了如何通过 IP 地址或主机名功能设置和使用 Identity-Aware Proxy (IAP) TCP 转发。
如需将 IAP TCP 转发与 IP 地址或主机名功能搭配使用,您必须拥有 Chrome Enterprise Premium 许可。
概览
您可以在 Google Cloud CLI 中使用资源专用 IP 地址或主机名创建通向资源的隧道。如果您通过 Cloud Interconnect 或 VPN 将非 Google Cloud 中的外部资源连接到 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 范围中的说明操作。
以下过程提供了有关如何完成任务的 gcloud 示例。如需了解如何使用 API 与目标群组进行交互,请参阅 REST 资源:projects.iap_tunnel.locations.destGroups
创建隧道目标组
配置隧道时,请指定用于权限检查的目标组。隧道目标组表示具有相同隧道访问限制的资源。您可以创建任意数量的目标组,每个目标组具有任意数量的匹配的 IP 范围或 FQDN。目标组可以重叠以提高灵活性。
创建目标群组时,您必须指定区域。为获得最佳结果,您指定的区域应与目标资源的位置匹配。例如,如果资源通过 VPN 连接,则应使用 VPN 网关所在的区域。
如需创建目标群组,您必须拥有 iap.tunnelDestGroups.create
权限(可通过 iap.tunnelDestGroupEditor
角色授予该权限)。如需授予单个角色,请参阅 IAM 文档中的授予单个角色。
控制台
转到“IAP”页面,然后选择一个项目(如果尚未选择)。
在 SSH 和 TCP 资源标签页上,点击创建目标组。
输入群组名称。组名称只能包含小写字母 (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 和 TCP 资源标签页。
如需查看目标群组的详细信息,请点击目标群组的名称。
如需修改目标组,请选择目标组,然后点击铅笔图标以打开修改目标组面板。您还可以从此面板中删除目标组。
如需移除目标组,请选择目标组,然后点击垃圾桶图标。
gcloud CLI
如需详细了解如何使用 gcloud CLI 管理目标群组,请参阅目标群组 gcloud 命令。
配置隧道权限
如需创建隧道,您必须拥有相关目标组的 iap.tunnelDestGroups.accessViaIAP
权限。您可以通过 iap.tunnelResourceAccessor
角色授予权限。
如需配置对目标群组的权限,您必须拥有 iap.tunnelDestGroups.setIamPolicy
权限(可通过 iap.admin
角色授予该权限)。
控制台
前往“IAP”页面。
在 SSH 和 TCP 资源标签页上,选择要为其配置权限的目标组。
在打开的面板中,点击添加主账号,然后输入用户的电子邮件地址。
在分配角色部分中,选择要分配给主账号的角色。
点击保存。
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
。
了解隧道使用情况
使用 IAP-TCP 时,您可以使用以下三个 gcloud CLI 命令:start-iap-tunnel、ssh 和 scp。
IAP-TCP 命令已更新,以支持基于 IP 和 FQDN 的隧道。如需切换到 IP 地址或 FQDN,请在使用以下命令时执行以下操作:
- 请指定 IP 地址或 FQDN,而非实例名称。
- 使用
--region
,而不要使用--zone
。 - 使用
--dest-group
指定要使用的目标群组。 - 使用
--network
指定要使用的 VPC 网络的名称。
您指定的 IP 地址必须是目标的专用 IP 地址。您不能将 IAP-TCP 与公共 IP 地址搭配使用。如果使用 FQDN,它必须解析为目标的专用 IP 地址。请注意,名称解析在您指定的 VPC 网络中完成,而不是从客户端网络完成。例如,如果您尝试创建通向 vm.corp.company.com
的隧道,则将 vm.corp.company.com
转换为 IP 地址的步骤发生在 VPC 网络上下文中。
您指定的地区必须与目标组的区域一致。
您指定的网络必须与有权访问目标的 VPC 网络的名称一致。典型的网络名称为 default
。您可以在 Google Cloud 控制台的“VPC 网络”页面上查看网络名称列表,也可以通过运行以下命令来检索网络名称列表:
gcloud compute networks list --format='value(name)'
示例
以下示例使用了一个示例 IP 地址 172.16.1.2
。每个命令还可以使用 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
如果账号受密码保护,您必须输入密码。如果帐号受 SSH 私钥或公钥对保护,您必须使用上述 -- -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 示例
如需将该命令用作始终通过隧道连接到 172.16.1.2
的 ProxyCommand,请在 ~/.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