【问题标题】:IAP tunnel to VM到虚拟机的 IAP 隧道
【发布时间】:2022-04-22 20:39:58
【问题描述】:

我有一个关于 Compute VM 及其相关权限的问题。我在项目级别拥有“所有者”权限。我创建了一个 VM,但无法为其分配外部 IP 地址。参考谷歌云文档后,我似乎仍然可以使用 VPN 或 IAP 连接到这个虚拟机。单击虚拟机旁边的 SSH 链接后,我看到它使用 Cloud-IAP 隧道,但连接失败。

这是错误信息 未找到外部 IP 地址;默认使用 IAP 隧道。

ERROR: (gcloud.compute.start-iap-tunnel) Error while connecting [4003: u'failed to connect to backend'].
ssh_exchange_identification: Connection closed by remote host
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].

如何连接到这个虚拟机?

感谢您对此的帮助

【问题讨论】:

  • 编辑您的问题并包含 SSH 的防火墙规则。如果您没有,请创建一个。但是,请更详细地了解错误消息。如果您有项目所有者,您可以分配一个外部 IP 地址,否则您可能使用的其他帐户不能。
  • 相关(重点关注 Ansible,但有很多可转移的信息):stackoverflow.com/q/58996471/320399

标签: google-compute-engine google-iap


【解决方案1】:

防火墙规则配置为允许从您计算机的所有端口上的 Cloud IAP 的 TCP 转发网络块 35.235.240.0/20 进行访问。这可确保允许从 Cloud IAP 的 TCP 转发 IP 地址到资源上管理服务的 TCP 端口的连接。请注意,如果将 default-allow-ssh 和 default-allow-rdp 默认规则应用于用于 SSH 和 RDP 的端口,您可能不需要调整防火墙规则。

您可能已经拥有default-allow-ssh 而不是尝试:

gcloud compute start-iap-tunnel stage-es-kibana 5601 --local-host-port=localhost:5601

通过额外的 ssh 层跳转到端口:

gcloud compute ssh stage-es-kibana -- -N -L 5601:localhost:5601

或者在主机/端口stage-es-kibana:5601和子网35.235.240.0/20之间打开谷歌防火墙。

【讨论】:

  • 这里的关键部分是添加cloud.google.com/iap/docs/…中指定的防火墙规则
  • @mafrosis 如果您希望 Tunelling 按照gcloud CLI 的说明实际工作(如 RDP 等)。但是仍然可以通过标准 SSH 传递端口(因为您可能已经有规则 default-allow-ssh )而不添加其他防火墙规则,只保留端口 22 对子网 35.235.240.0/20 开放。
  • 换句话说,只要您能够进行 SSH 连接,您就可以通过 SSH 隧道(选项-L)对任何端口进行隧道传输,从而避免专有防火墙规则!在任何情况下,IAP 都不适用于批量传输,并且 禁止并行连接来自同一操作系统,因为它们使用没有适当锁定的共享 sql lite DB,因此它只是救援 shell 连接,不适用于正确的 VPN。
  • 同意。我认为对于通过谷歌解决这个问题的人来说,突出显示 IAP 的特定防火墙文档很有用
【解决方案2】:

这是一个权限问题。 您正在尝试通过 google 的 IAP 代理 ssh 进入您的虚拟机。 您无权创建从您的计算机到代理服务器的隧道。

您需要拥有"roles/iap.tunnelResourceAccessor" 角色才能通过 ssh 连接到您的虚拟机:

【讨论】:

  • 这是否支持通过私有 IP 地址进行连接?
  • 尽管提出的问题清楚地表明正在使用的用户帐户具有所有者权限,其中包括“iap.tunnelResourceAccessor”权限,但我认为这个答案对于具有相同类型错误消息的人仍然有帮助。就我而言,我使用的是一个只有编辑权限的非组织用户帐户。所以我缺少“iap.tunnelResourceAccessor”权限并收到与上述相同的错误消息。
【解决方案3】:

似乎 GCP CE 需要在其 RUNNING 状态后初始化 SSH 和其他服务。 我使用了一种解决方法,即在启动 VM 之后和使用 IAP 隧道的 SSH 之前添加一个 sleep(60 秒)命令。

【讨论】:

    【解决方案4】:

    就我而言,我通过省略传递给gcloud compute ssh--tunnel-through-iap 参数来解决或解决它。

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 2019-01-11
      • 2013-12-04
      • 1970-01-01
      • 2017-10-22
      • 2022-01-07
      相关资源
      最近更新 更多