【问题标题】:GCP open firewall only to cloud shellGCP 仅对云外壳开放防火墙
【发布时间】:2019-07-14 01:59:04
【问题描述】:

GCP 中是否有办法明确允许仅来自云外壳的防火墙规则。所有 GCP 演示和视频都添加了允许 22 到 0.0.0.0/0 的规则,以便从云 shell ssh 到实例。

但是,有没有一种方法可以限制仅来自云 shell 的访问 - 使用云 shell 的 IP 范围或服务帐户?

【问题讨论】:

  • 您的实例有公网 IP 地址还是只有私有 IP 地址?
  • 让我们说两者......另外 - 我认为 Cloud Shell 只能用于公共 IP 地址?
  • 我在询问您要从 Cloud Shell 连接到的虚拟机。您无法控制 Cloud Shell 的寻址(公共/私有)。如果您的虚拟机只有一个私有 IP 地址,我知道如何配置安全解决方案。
  • 当然 - 愿意分享您的安全解决方案吗?
  • 我的回答支持具有公共 IP 或仅具有私有 IP 地址的 VM 实例。我只需要找到 IAP 的网络块来发布两者的答案。 cloud.google.com/iap/docs/using-tcp-forwarding

标签: google-cloud-platform google-compute-engine google-cloud-shell


【解决方案1】:

Google 不会发布 Cloud Shell 的公共 IP 地址范围。

VPC 防火墙规则允许指定源和目标的服务帐户。但是,Cloud Shell 不使用服务帐号。 Cloud Shell 使用登录到 Google Cloud Console 的人员的身份。这意味着 OAuth 2 用户凭据。 VPC 防火墙规则不支持用户凭据。

我的建议是通过 IAP(身份识别代理)使用 TCP 转发和隧道 SSH。 Google 在 Cloud SDK CLI 中让这一切变得简单。

在 Google Cloud Console 中打开 Cloud Shell。然后运行这个命令:

gcloud compute ssh NAME_OF_VM_INSTANCE --tunnel-through-iap

这也适用于没有公共 IP 地址的 VM 实例。

身份感知代理 CIDR 网络块为 35.235.240.0/20。创建一个允许来自该块的 SSH 流量的 VPC 防火墙规则。此规则将阻止公共 SSH 流量,并且只允许通过 Identity Aware Proxy 的授权流量。

【讨论】:

  • 很好的答案,但更新不正确。 IAP TCP 转发仅使用35.235.240.0/20 IP 范围。如果您看到74.125.189.128/25,它一定来自其他东西。一种可能性是您正在使用SSH from the Browser 的常规服务器,这些服务器没有保证IP 范围。当您从浏览器使用 SSH 连接到具有公共 IP 的 VM 时,它使用常规服务器。当您从浏览器使用 SSH 连接到没有公共 IP 的 VM 时,它使用 IAP TCP 转发(因此使用35.235.240.0/20 IP 范围)。
  • @KeganThorrez - 谢谢。我无法确认我的更新,所以我删除了那部分。
  • cloud shell 有其他功能,比如现在的 cloud shell 编辑器。云壳和云壳编辑器可以建立iap连接吗?
  • @red888 - 我不知道 Cloud Shell Editor 的答案。我相信 Editor 仅支持 Cloud Shell VM 中的本地文件。我建议您在编辑器上创建一个新问题。
【解决方案2】:

谷歌已经在这篇文章中公布了详细信息-Configuring secure remote access for Compute Engine VMs


在管理控制台中,点击安全,然后选择身份识别代理。

如果您之前没有使用过 Cloud IAP,则需要配置 oAuth 屏幕:

将同意屏幕配置为仅允许您域中的内部用户,然后点击保存。

接下来,您需要定义允许使用 Cloud IAP 进行远程连接的用户。将用户添加到您要连接到的资源的“IAP-secured Tunnel User”角色。

然后,通过 web UI 或 gcloud 中的 ssh 按钮连接到机器。

使用 Web UI 时,请注意 URL 参数 useAdminProxy=true。

提示:如果本地没有安装 gcloud,也可以使用 Cloud Shell:

gcloud beta compute ssh {VM-NAME}  --tunnel-through-iap

您现在应该已连接!您可以通过尝试 ping 来验证您没有 Internet 连接。 8.8.8.8(Google 的 Honest DNS)是一个很好的尝试地址。

【讨论】:

  • 这是如何控制 SSH 访问的一个很好的答案。但是,您的回答并未回答“仅访问 Cloud Shell”的问题。使用 IAP,您可以控制允许访问的身份,但不能控制身份的位置(这是 IAP 设计目标)。我建议您创建一个新问题来回答,因为 IAP 是基于身份的访问控制的一个很好的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
相关资源
最近更新 更多