你有张良计,我有过墙梯——小测Azure堡垒机

  作为一个合格的奶爸,周末一定要陪着熊孩子上各种培训课;然而熊孩子还没到奥数的年纪,奶爸空有一身本领无处施展,只能在教室外干等,顺便想着做点小测试。
  想要SSH到一台测试机时,却发现无论如何都连不上;经过种种测试,最后终于测出是移动这个猪队友,居然屏蔽了对外的22端口访问(用的LTE版Surface Go)。
  正发愁时,突然想到,Azure Global已经preview原生堡垒机,正好可以解决这个问题。

  Azure的堡垒机服务名为Bastion,目前还是Preview状态,所以只在部分Region开放:

搭建Bastion

  Bastion的搭建很简单,在Azure Portal搜索Bastion:

  点击进去后进入新建页面:

  如图,需要确认的信息和创建普通资源一样,主要是资源组、Region(必须是已经Preview的Region)、网络和外网IP。
  去中需要注意的是,Bastion必须使用一个专门的子网,名字位AzureBastionSubnet,掩码在27位以上,否则会报错。
  确认无误后点击创建,很快创建完成:

  这样,Bestion就搭建好了:

连接VM

  在Bastion的VNet里创建一个用作VM的子网

连接Windows VM

  创建一个Windows VM,选择新建的子网,NSG打开RDP(3389)端口:

  因为使用堡垒机访问,所以无需外网IP:

  VM创建完成,点击连接,会看到连接选项中多处一项BASTION:

  输入对应的用户名密码,点击连接,将在新的web页面打开远程VM的桌面,成功使用堡垒机登录:

连接Linux VM

  Linux相对Windows会复杂点,不仅有用户名密码登陆方式,还有SSH Key的方式,现在创建两台Linux VM,一台用密码登录,一台用SSH Key登录,NSG打开SSH(22)端口,不配置外网IP。
  Linux的VM通过Bastion连接时,可以选择不同的认证方式:

  第一台Linux VM通过用户名密码方式连接:

  第二台Linux VM通过SSH Key方式连接,可以直接浏览到本地的Private Key文件:

  也可以将Private Key文件的内容复制粘贴:

  如果SSHKey有密码,可以在Advanced里输入:

  顺利连接:

Bastion网络

  Bastion网络架构如下:

  上图可以看出,通过外网链接至Bastion堡垒机是通过https方式,只用443端口可达即可。并且客户端电脑也无需安装任何RDP或者SSH工具;二Bastion到VM,需要在VM的NSG上打开对应的RDP(3389)或SSH(22)端口。

  再来看看复杂一点的情况。

多台Bastion

  在Bastion的Subnet里再创建一台Bastion02:

  出现错误,每个VNet里只能有一台Bastion。

VNet Peering

  那么,如果VNet里没有Bastion,通过Peering连接到一个有Bastion的VNet是否可以?
  创建一个新的VNet(VMVNet),并且通过Peering和BastionVNet联通:

  在新的VMVNet里创建一台VM:

  选择BASTION方式连接:

小结

  Bastion提供了一个方便的方式,只需https就可以远程连接管理VM,不用担心端口问题,也无需安装工具。
  现在Bastion还处于Preview状态,只在有限几个Region提供,并且功能也还有些欠缺,例如审计等功能还未上线,希望可以尽快完善!