连接到没有外部 IP 的 VM 实例

connecting to VM instance having no external IP

我正在尝试通过 cloud shellcloud SDK.

连接到没有外部 IP 地址的 google 云 VM 实例

Google文档说我们可以用IAP连接 通过 IAP 连接:refer using IAP

a) 向想要连接到 VM.

的用户授予 roles/iap.tunnelResourceAccessor 角色

b) 使用以下命令连接到 VM

gcloud compute ssh instance-name --zone zone

或 使用 IAP 进行 TCP 转发:参考 using TCP forwarding 我们还可以通过为 IP '35.235.240.0/20' 和端口 TCP:22 设置入口防火墙规则来连接 和 select 一个 IAM 角色 Select Cloud IAP > IAP-Secured Tunnel User

这两种不同的方法有什么区别,这两个独立的 IAM 角色有什么区别

roles/iap.tunnelResourceAccessor
IAP-secured Tunnel User

我是云新手,所以请耐心了解我的基础知识。

完全一样。看看this page

IAP-Secured Tunnel User (roles/iap.tunnelResourceAccessor)

您有角色的显示名称:您在 GUI 中看到的 IAP-Secured Tunnel User,以及您必须在脚本和 CLI 中使用的角色的技术名称 roles/iap.tunnelResourceAccessor

题中提到的link("refer using IAP")其实是指 Connecting to instances that do not have external IP addresses > Connecting through a bastion host。 通过 堡垒主机连接 是除了通过 IAP 访问之外的另一种方法。

如文档中所述 Connecting to instances that do not have external IP addresses > Connecting through IAP,

IAP's TCP forwarding feature wraps an SSH connection inside HTTPS. IAP's TCP forwarding feature then sends it to the remote instance.

因此问题的两部分(OR 之前和OR 之后)属于相同的访问方法:Connect using Identity-Aware Proxy for TCP forwarding。因此第一个问题的答案是 “没有区别” 因为所有这些都描述了 IAP TCP 转发的工作原理以及设置和使用它的步骤:

1. 创建防火墙规则:

  • 适用于您希望使用 IAP 访问的所有 VM 实例;
  • 允许来自 IP 范围 35.235.240.0/20 的入口流量(此范围包含 IAP 用于 TCP 转发的所有 IP 地址);
  • 允许连接到您希望使用 IAP TCP 转发可访问的所有端口,例如用于 SSH 的端口 22

2. 授予使用 IAP 的权限:

  • 使用 GCP Console 或 gcloud 为用户添加角色 IAP-Secured Tunnel User (roles/iap.tunnelResourceAccessor)。
    注意:具有 Owner 项目访问权限的用户 始终有权 使用 IAP 进行 TCP 转发。

3. 使用以下工具之一连接到目标 VM:

  • GCP 控制台:使用 Cloud Console 中的 SSH 按钮;
  • gcloud compute ssh INSTANCE_NAME

有一个关于如何调用 IAP TCP 转发来访问没有 Public IP 的 VM 实例的重要解释。见 Identity-Aware Proxy > Doc > Using IAP for TCP forwarding:

注意。如果实例没有 Public IP 地址,连接 自动使用 IAP TCP 隧道 。如果实例确实有 public IP 地址,则连接使用 public IP 地址而不是 IAP TCP 隧道。
您可以使用 --tunnel-through-iap 标志,以便 gcloud compute ssh 始终使用 IAP TCP 隧道。

guillaume blaquiere 所述,roles/iap.tunnelResourceAccessorIAP-secured Tunnel User 不是不同的 IAM 角色,而是 角色名称相同角色的角色标题。还有一个资源以一种方便的形式表示:
Cloud IAM > Doc > Understanding roles > Predefined roles > Cloud IAP roles