使用源和目标标记的防火墙规则,将GCE中的SSH访问限制在Linux堡垒主机中

我有几个GCE实例都在同一个项目和相同的默认networking。 我已经指定了一个实例“堡垒”服务器,并希望阻止SSH从互联网到除堡垒服务器以外的所有实例,但允许堡垒服务器SSH到我的其他实例。

所以我修改了default-allow-ssh规则,只允许SSH通过“jumphost”标签到达目标,然后把这个标签应用到我的堡垒实例。 这是有效的,因为我可以从互联网SSH到我的堡垒服务器,但不能再从互联网SSH到我的其他实例。

然后,我创build了一个新的restricted-allow-ssh规则,它只允许从我的堡垒实例到其他实例的SSH访问:

gcloud compute --project "<my project>" firewall-rules create "restricted-allow-ssh" --allow tcp:22 --description "Allow SSH only from bastion server" --network "default" --source-tags "jumphost" --target-tags "restricted-ssh" 

然后我将“restricted-ssh”标签应用到除了堡垒服务器之外的所有实例。

似乎工作,因为我不能telnet从互联网端口22标记为“restricted-ssh”的实例,但我可以从我的堡垒服务器端口22 telnet到他们。

但是,当我尝试gcloud计算SSH从我的堡垒服务器的任何实例,它只是挂起,最终我得到一个“连接超时”的错误。

有趣的是,使用gcloud与我的实例的短名称(例如“开发”)似乎解决从我的堡垒服务器的公共IP地址。 但nslookup将其parsing为端口22打开的内部networking地址。 看来,从我的堡垒主机“gcloud计算SSH”试图通过外部IP地址,但被拒绝,因为该端口被closures。

任何build议简单的修复或简单的替代方法来实现相同的结果?

结果我的穷人的堡垒解决scheme我可以使用我的jumphost ssh -I〜/ .ssh / google_compute_engine。 不需要gcloud计算ssh。