我是 gcloud 的新手,需要管理计算引擎。我的角色如下:
- 计算管理员
- 服务帐户管理员
- 组织管理员
然而,当我查看仪表板时,Compute Engine 卡显示
“您无权查看此卡”
据我了解,“Compute Admin”授予我对资源的完全访问权限。为什么我无法查看该卡?如果我单击“转到 Compute Engine”,我会获得计算引擎控制台并可以看到 VM 实例,但当我单击 SSH 下拉菜单时,我得到一个空白窗口。对话框弹出
“正在连接...将 SSH 密钥传输至虚拟机”
然后替换为
“连接失败由于意外错误,您无法连接到 VM 实例。请稍等片刻,然后重试。(#15)”
如果我在我的防火墙上执行 tcpdump,我看不到端口 22 上有来往流量。问题出现在具有固定 IP 的系统和具有 ntp 转换地址的系统上。问题出现在 Firefox 和 Chrome 上,也出现在 freebsd 和 windows 系统上。我可以从这些机器通过 SSH 连接到另一个系统。
我肯定遗漏了其他一些角色?
答案1
项目仪表盘属于整个项目,因此您至少需要一个项目查看者原始角色来查看其内容(或项目编辑者或项目管理员来编辑):
Compute Engine > 文档 > 访问控制概览 > 授予用户对虚拟机实例的 SSH 访问权限解释通过 SSH 访问实例需要哪些权限:
为了让用户能够使用 SSH 连接到虚拟机实例,但不授予他们管理 Compute Engine 资源的权限, 添加用户的公钥 添加到项目中,或将用户的公钥添加到特定实例。使用此方法,您可以避免将用户添加为项目成员,同时仍授予他们访问特定实例的权限。
要了解有关 SSH 和管理 SSH 密钥的更多信息,请阅读SSH 密钥概述。
请注意,如果您将roles/compute.instanceAdmin.v1
角色授予项目成员,只要实例未设置为以服务帐户运行,他们就可以使用 SSH 自动连接到实例。如果实例设置为以服务帐户运行,您还必须授予角色,然后roles/iam.serviceAccountUser
成员才能连接到实例。如果您将成员添加为项目所有者或编辑者,他们也会自动拥有项目中 VM 实例的 SSH 访问权限。
请确保已启用到端口 22 的入口流量。
GCP Console => VPC network => Firewall rules
应该有一个防火墙规则,例如默认网络类型为default-allow-ssh
,允许从任何地方将 SSH 入口流量传输到 TCP 端口 22 ( 0.0.0.0/0
)。
您可以手动创建这样的规则:
GCP Console => VPC network => Firewall rules => Create Firewall Rule
Name: my-allow-ssh
Network: mynet
Targets: All instances in the network
Source filter: IP Ranges
Source IP ranges: 0.0.0.0/0
Protocols and ports: Specified protocols and ports
tcp: ports 22
如果您可以连接到多个实例,则可能是 VPC 防火墙规则使用网络标签来区分目标。您应该检查是否可以连接到的实例:
GCP Console => Compute Engine => VM instances => my-instance-name => Network tags
然后在现有的防火墙规则中寻找该标签:
GCP Console => VPC network => Firewall rules => my-ssh-enable => Targets => Target tags
然后您应该使用该网络标签来标记您想要连接的虚拟机实例:
GCP Console => Compute Engine => VM instances => my-instance-name => Edit => Network tags
至于“意外错误”,按照消息中的指示操作并稍后“重试”是有意义的。这可能是一个间歇性错误。