クライアントVPN不要! Cloudflareを使ってWebサーバへゼロトラストアクセスを実現
クライアントVPN不要! Cloudflareを使ってWebサーバへゼロトラストアクセスを実現
はじめに
本記事では、Cloudflare Accessを利用したWebサーバへのアクセスに認証機能を導入と
Argo Tunnelを利用したWebサーバとCloudflare間の暗号化を行い、ゼロトラストネットワークを構築する方法をご紹介します。
構成図
今回はこの様な構成を考えてみました。
WebサーバはAlibaba Cloud東京リージョンのECSを利用してインターネットへのアクセスはSource NATをNATゲートウェイで行います。
Argo Tunnelを利用すればNAT環境下であってもサーバを安全にインターネットに公開ができます。
また、Cloudflare Accessで認証成功したユーザのみ、Webサーバへアクセスできる仕組みとなっております。
Cloudflareを利用するための準備
Cloudflareを利用するためにはドメインをCloudflareと紐づいている必要があります。
Cloudflare Accessをセットアップ
Cloudflareダッシュボードにログインし、Accessタブ→ログインメソッド→追加→One-Time Pinを選択し、保存します。
ログインメソッドに「One-Time Pin」が表示されたことを確認します。
続いてログインメソッドの下部にあるAccess ポリシーに移動します。
「Accessポリシーを作成」をクリックします。
ここで公開するWebサーバのサブドメインと、アクセスポリシー内容を設定します。
今回はサブドメイン名を「saito」、アクセスポリシーを「@g.softbank.co.jp」のドメインのEメールアドレスのみを許可する様に設定しています。
サブドメインが「saito」なので私の環境のFQDNはsaito.<ドメイン>になりますね。
許可のアクセスポリシーを追加した場合は、その他の条件でアクセスすると拒否する様になります。
アクセスポリシーは他にもIPアドレスやGitHub組織等でも制限することが可能です。
以上でCloudflare Accessの設定は完了です。
Argo Tunnelをセットアップ
今回のWebサーバの環境です。
- ECS Instance Type: ecs.c6.large
- OS: CentOS 8.2.2004 (Core)
- nginx version: nginx/1.14.1
予めnginxをインストールさせた環境にArgo Tunnelを動作させるために必要なCloudflare deamonを導入します。
インストール方法がいくつかありますが、今回は導入が簡単な.rpm版をインストールします。
$sudo wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb$sudo dpkg -i cloudflared-stable-linux-amd64.deb
続いてCloudflareにログインしてサーバを認証します。
$cloudflared login
ターミナルに表示されたhttp://~のURL(上記画像の赤枠部分)をお使いのWebブラウザにコピペしてアクセスします。
(Webブラウザを利用することができるWebサーバならばそのままWebブラウザが立ち上がります。)
すると、Webサーバをどのドメイン(ゾーン)で認証したいか問われますので選択します。
私の環境ではドメインは1つしか登録していないので、1つだけ表示されています。
右下の「認証する」をクリック。
これでサーバの認証完了です。
そして下記コマンドでArgo Tunnelを張り、WebサーバとCloudflare間の通信を暗号化します。
FQDNとWebサーバのIPアドレスは適宜置き換えてください。
$sudo cloudflared tunnel --hostname <FQDN> --url http://<WebサーバのプライベートIPアドレス>
下記画像の様にエラーが特に表示されなければArgo Tunnelが成功しています。
もう一つ確認方法としてCloudflare上のDNSレコードも確認してみましょう。
先ほどArgo Tunnelを張る際に指定したサブドメインがAAAAレコードで登録されていることが確認できます。
アクセス
クライアントのWebブラウザから、Cloudflareに登録したhttp://<FQDN>
へアクセスします
するとログインメソッドとAccessポリシーの時に設定した条件であるEメールアドレスを入力する画面が表示されます。
条件に合致するEメールアドレスを欄に入力して「Send me a code」ボタンをクリックするとCloudflareから入力したEメールアドレス宛にワンタイムパスコードが送信されます。
Webブラウザに戻りメール内に記載されているワンタイムパスコードを入力して「Sign in」をクリックすると
アクセスが許可され、Webサーバへアクセスすることが出来ました(nginxの初期ページ)
ちなみにWebブラウザのURLバーをみてみるとhttps化されており、鍵アイコンが表示されています。
実はWebサーバへのトラフィックをCloudflareを介すことにより、簡単にSSL対応が出来てしまうのです
これがCloudflare SSLというソリューションです。
Webブラウザから証明書の詳細を覗いてみました。
Cloudflare SSLを利用しているときは、SSL証明書の有効期限切れを心配する必要はありません。最新のSSL脆弱性についても最新情報が維持されます。
これで「突然Webへ繋がらなくなった!」という証明書切れのトラブルからもおさらば出来ますね。
様々なCloudflareソリューションが互いにインテグレーションしており、セキュア&利便性に貢献しているんですね。