Cloudflare Argo + Accessで安全、高速、セミマネージドなRDPとSSHの世界線を眺める

2020.03.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回、即興のリモートアクセス環境をCloudflare for Teams Accessで作ったわけですが、RDP、SSHといったピア接続にCloudflareのサービスを使うとどのような世界線が見えてくるのでしょうか。

今回は前置きをせずにやることだけをやるので、みなさんで眺めて思いを馳せてください。

ネットワーク環境を変更できない場所にあるWindows 10へのRDP

まず、One Time PIN認証のためのポリシーをAccessで事前に設定しておきます。(Argo Tunnelを通す前に念のため)

Argo Tunnelを通すための cloudflared は接続先のWindowsマシンには前回入れていますので、以下のコマンドを打ってRDPレディにしておきます。

D:\Users\shigahi>cloudflared tunnel --hostname rdp.classmethod.cf --url rdp://localhost:3389

接続元の私のMacに cloudflared を入れます。

~ $ brew install cloudflare/cloudflare/cloudflared

トンネルを張ります。

~ $ cloudflared access rdp --hostname rdp.classmethod.cf --url localhost:2244

localhost:2244 (ポートはなんでもいいです)を聞いている間に、Microsoft Remote Desktopでつなぎに行くと、ブラウザが開いて認証を求められます。

認証が通ると無事、デスクトップにつながります。簡単で快適です。

EC2へのSSH

非エンジニアの私では、最初のEC2起動時に直SSHして cloudflared を入れないとこれを実行できなくてダサいのですが、おそらくこれを読んだ弊社のエンジニアがうまい方法を編み出してくれると思います。(誰か手を挙げてください)

CloudflareのIPアドレスレンジを指定したセキュリティグループでEC2(Ubuntuにしました)を立ち上げます。

Accessのポリシー作ります。

cloudflared をEC2インスタンスにインストールしてログイン

~ $ sudo wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
~ $ sudo dpkg -i cloudflared-stable-linux-amd64.deb
~ $ cloudflared login

ブラウザを開いて認可します。

Tunnelを張ります。今回はテストなので nohup を使いましたが、本番では systemd の設定を自動で行うコマンドがあります。

~ $ nohup cloudflared tunnel --hostname ec2.classmethod.cf --url ssh://localhost:22

インストールに使った22ポートを閉じておきましょう。

ではMac側の設定ですが、

~ $ cloudflared access ssh-config --hostname ec2.classmethod.cf

で、.ssh/config に書き込む内容を生成してくれます。

あとは

~ $ ssh ubuntu@ec2.classmethod.cf
再びメールPIN認証画面が開き、 認証後、すんなり通ります。

SSHの応用としてGitへのアクセスも簡単にできます。