クライアントVPN不要! Cloudflareを使ってWebサーバへゼロトラストアクセスを実現

作成日:2021/03/17この記事は最終更新日から1年以上が経過しています。

クライアントVPN不要! Cloudflareを使ってWebサーバへゼロトラストアクセスを実現

はじめに

img

本記事では、Cloudflare Accessを利用したWebサーバへのアクセスに認証機能を導入と
Argo Tunnelを利用したWebサーバとCloudflare間の暗号化を行い、ゼロトラストネットワークを構築する方法をご紹介します。

構成図

今回はこの様な構成を考えてみました。

img

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」が表示されたことを確認します。

img

続いてログインメソッドの下部にあるAccess ポリシーに移動します。
「Accessポリシーを作成」をクリックします。
ここで公開するWebサーバのサブドメインと、アクセスポリシー内容を設定します。 今回はサブドメイン名を「saito」、アクセスポリシーを「@g.softbank.co.jp」のドメインのEメールアドレスのみを許可する様に設定しています。
サブドメインが「saito」なので私の環境のFQDNはsaito.<ドメイン>になりますね。
許可のアクセスポリシーを追加した場合は、その他の条件でアクセスすると拒否する様になります。
アクセスポリシーは他にもIPアドレスやGitHub組織等でも制限することが可能です。

img

以上で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を導入します。

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation

インストール方法がいくつかありますが、今回は導入が簡単な.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

img

ターミナルに表示されたhttp://~のURL(上記画像の赤枠部分)をお使いのWebブラウザにコピペしてアクセスします。
(Webブラウザを利用することができるWebサーバならばそのままWebブラウザが立ち上がります。)

すると、Webサーバをどのドメイン(ゾーン)で認証したいか問われますので選択します。

私の環境ではドメインは1つしか登録していないので、1つだけ表示されています。

img

右下の「認証する」をクリック。

img

これでサーバの認証完了です。

img

そして下記コマンドでArgo Tunnelを張り、WebサーバとCloudflare間の通信を暗号化します。
FQDNとWebサーバのIPアドレスは適宜置き換えてください。

$sudo cloudflared tunnel --hostname <FQDN> --url http://<WebサーバのプライベートIPアドレス>

下記画像の様にエラーが特に表示されなければArgo Tunnelが成功しています。

img

もう一つ確認方法としてCloudflare上のDNSレコードも確認してみましょう。
先ほどArgo Tunnelを張る際に指定したサブドメインがAAAAレコードで登録されていることが確認できます。

img

アクセス

クライアントのWebブラウザから、Cloudflareに登録したhttp://<FQDN>へアクセスします

するとログインメソッドとAccessポリシーの時に設定した条件であるEメールアドレスを入力する画面が表示されます。

img

条件に合致するEメールアドレスを欄に入力して「Send me a code」ボタンをクリックするとCloudflareから入力したEメールアドレス宛にワンタイムパスコードが送信されます。

img

Webブラウザに戻りメール内に記載されているワンタイムパスコードを入力して「Sign in」をクリックすると

img

アクセスが許可され、Webサーバへアクセスすることが出来ました(nginxの初期ページ)

img

ちなみにWebブラウザのURLバーをみてみるとhttps化されており、鍵アイコンが表示されています。
実はWebサーバへのトラフィックをCloudflareを介すことにより、簡単にSSL対応が出来てしまうのです
これがCloudflare SSLというソリューションです。

img

Webブラウザから証明書の詳細を覗いてみました。
Cloudflare SSLを利用しているときは、SSL証明書の有効期限切れを心配する必要はありません。最新のSSL脆弱性についても最新情報が維持されます。
これで「突然Webへ繋がらなくなった!」という証明書切れのトラブルからもおさらば出来ますね。

img

様々なCloudflareソリューションが互いにインテグレーションしており、セキュア&利便性に貢献しているんですね。

img

最後に

クライアントにVPNソフトウェアをインストールしなくても、簡単&セキュアに社内システムにアクセスできる時代になりました。WebサーバがNAT環境にあってもArgo Tunnelによりインターネット公開が出来、しかも通信はTCP/IPレベルで暗号化されています。 加えてCloudflareからWebサーバ間およびCloudflareからクライアント間はアプリケーション層におけるSSL暗号化も可能で更にセキュアな環境が導入出来ます。
斎藤 貴広
この記事を書いた人
斎藤 貴広
2020年からAlibaba Cloudのソリューション開発や技術支援に従事。ネットワークや基盤などのインフラ回りがメイン領域で、最近はゼロトラストセキュリティやWeb系もかじり中。
Close

Alibaba Cloudを始めてみましょう

ソフトバンクは、Alibaba Cloudのアカウント開設から、サービス展開までをお手伝いします。
Hatena
このページは参考になりましたか?