Cloudflare Access + Argo Tunnel による社内アプリケーションへのセキュアアクセス構築マニュアル

2020.03.25

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

Cloudflare AccessArgo Tunnelを使用し、インバウンド通信を一切許可しないネットワーク環境下でも、ファイアウォールの変更なしに安全、高速、スケーラブルに社内プリケーションへアクセスできるシステムを構築します。

まずこちらをご覧ください。

 想定環境

社内のLAN、あるいはVPCなどの閉域で使用されているイントラネットアプリケーションへ外部からアクセスする。その際、会社のメールアドレスでOne Time PIN認証を行い、リモートユーザーを制御する。

準備するもの

Cloudflare for Teamsのアカウント

既存でCloudflareのアカウントをお持ちの場合、5シートまでAccessが試用できます。

こちらからCloudflare for Teamsのアカウントを調達すると、8月末までAccessのシート、およびArgoの通信量が無償で提供されます。

使用するドメイン

新規でドメインを取得するか、既存のドメインをCloudflare DNSにDNS委譲します。

ダッシュボードでの準備

AccessタブからEnable Accessを選択し、Seats数を5 Seatsと入力します。(実際は8月末まで無制限で使用できます)

TrafficタブからEnable Argoを押下します。

ログインメソッド

Accessタブのログインメソッドから、One-Time Pinを押下し、確認後、そのまま保存します。

アクセスポリシー

Create Access Policyを押下し、サブドメインの設定と、アクセスの制限(今回は会社ドメインのメールアドレスからの認証のみに制限)をかけます。

アクセス先の準備

Cloudflaredのインストール

アクセス先のインスタンスにCloudflared(デーモン)をインストールします。

バイナリ、パッケージの格納場所はこちらです。

以下を参考にインストールして、ログインします。

[gist id="cbd13ebf88618135469947af17f2465b"]

ログインコマンドを実行するとブラウザが立ち上がるので使用するドメインを選択してログイン。自動的にブラウザが起動しない場合は、コンソール上に表示されるURLをブラウザにコピーして操作します。

Argo Tunnelの開始

以下のコマンドを実行してArto Tunnelを開始します。

$ sudo cloudflared tunnel --hostname hrm.classmethod.cf --url http://192.168.1.208
# --hostname は、設定したサブドメイン  --url は、イントラネットでアクセスするアプリケーションサーバーのIPアドレスやURL
# Windowの場合、cloudflared.exeが存在するディレクトリで、sudo をのぞいて実行

Tunnelが開通すると、Cloudflare DNSに自動的に設定したサブドメインがCNAME登録されます。

Access開始

アクセス元のブラウザに設定したサブドメインを入力します。

Cloudflareの認証画面にリダイレクトされるので、メールアドレスを入力します。

間もなくPINが入ったメールが届くので、それを入力すると認証を突破してアプリケーションにアクセスできます。

全体図

Cloudflare Access + Argo Tunnelによるリモートアクセスの概観は以下のようになります。

Argo Tunnelの自動起動

社内アプリケーションとCloudflare Access(Proxied DNS)とのトンネルを常時設置してリモートアクセスを行う場合、Cloudflaredのサービス化が必要です。以下のコマンドでサービスが簡単に実装できます。

$ sudo cloudflared service install
# Linuxの場合。ファイアウォールの関係でpemがディレクトリに直接インストールされずローカルにダウンロードされる場合は、
$ mv cert.pem ~/.cloudflared/cert.pem
# にて、マニュアルでpemを設置する。

PS C:\Cloudflared> .\cloudflared.exe service install
PS C:> Start-Service cloudflared
# Windowsの場合。