本页面介绍了如何设置和使用 Identity-Aware Proxy (IAP) 使用 IP 地址或主机名功能的 TCP 转发。
将 IAP TCP 转发与 IP 地址或主机名搭配使用 功能,您必须拥有 Chrome Enterprise Premium 许可。
概览
您可以使用 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 地址范围中的说明操作。
以下过程提供了有关如何完成任务的 gcloud 示例。如需了解如何使用 API 与目标组进行交互,请参阅 REST 资源:projects.iap_tunnel.locations.destGroups
创建隧道目标组
配置隧道时,您需要指定要用于权限检查的目标组。隧道目标群组代表具有相同隧道访问权限限制的资源。您可以创建任意数量的目标组,每个组包含任意数量的匹配 IP 地址范围或 FQDN。目标群组 可以重叠以提高灵活性
创建目标组时,您必须指定区域。为了获得最佳结果,您指定的区域应与目标资源的位置一致。例如,如果资源通过 VPN 连接,您应使用 VPN 网关所在的区域。
如需创建目标组,您必须拥有 iap.tunnelDestGroups.create
权限,您可以通过 iap.tunnelDestGroupEditor
角色授予此权限。如需授予单个角色,请参阅 IAM 文档中的授予单个角色。
控制台
前往“应用内购”页面 然后选择一个项目(如果尚未选择)。
在 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
管理隧道目标组
您可以查看目标群组的详细信息、修改目标群组以及将其移除。
控制台
前往“应用内购”页面 然后点击 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
。
了解隧道使用情况
在工作时,您可以使用三个 gcloud CLI 命令 (使用 IAP-TCP):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