在 Google Cloud 或非 Google Cloud 环境中使用 IP 地址或主机名设置 IAP TCP 转发

本页面介绍了如何设置和使用 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 InterconnectCloud 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 文档中的授予单个角色

控制台

  1. 前往“应用内购”页面 然后选择一个项目(如果尚未选择)。

  2. SSH 和 TCP 资源标签页中,点击创建目标组

  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. 前往“应用内购”页面 然后点击 SSH 和 TCP 资源标签页。

    • 如需查看目标组的详细信息,请点击目标组的名称。

    • 如需修改目标群组,请选择目标群组,然后点击 铅笔图标以打开修改目标组面板。您还可以 从此面板中删除目标组。

    • 如需移除目标群组,请选择目标群组,然后点击 垃圾桶图标

gcloud CLI

如需详细了解如何使用 gcloud CLI 管理目标群组,请参阅 目标组 gcloud 命令

配置隧道权限

如需创建隧道,您必须拥有 iap.tunnelDestGroups.accessViaIAP 权限 相关目标组上的您可以通过 iap.tunnelResourceAccessor 角色。

如需针对目标组配置权限,您必须拥有 iap.tunnelDestGroups.setIamPolicy 权限,您可以通过 iap.admin 角色授予此权限。

控制台

  1. 前往 IAP 页面

  2. SSH 和 TCP 资源标签页上,选择其目标群组。 您要配置权限。

  3. 在随即打开的面板中,点击添加主账号,然后输入用户的电子邮件地址。

  4. 分配角色部分,选择要分配给主账号的角色。

  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 指定要使用的 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