5分で完了(クイックスタート)
理論を並べるよりも、まずはlocalhost(例:ポート8080)で動いているアプリケーションを実際にインターネットに公開してみましょう。NATの設定変更やルーターのポート開放は一切不要で、安全に行えます。
ステップ 1: サーバーまたは個人のPCに cloudflared をインストールします。
# Ubuntu/Debianの場合
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
ステップ 2: Cloudflareで認証します。
cloudflared tunnel login
このコマンドを実行するとリンクが表示されます。それをクリックして、承認したいドメインを選択するだけです。
ステップ 3: トンネルを作成し、サービスをマッピングします。
# 'itfromzero-demo' という名前でトンネルを作成
cloudflared tunnel create itfromzero-demo
# ポート8080をインターネットに接続
cloudflared tunnel --url http://localhost:8080
これで、アプリケーションはランダムなサブドメイン経由でオンラインになります。ただし、このままではリンクを知っている人なら誰でもアクセスできてしまいます。次のセクションでは、Zero Trustを使ってこれら招かれざる客をブロックする方法を解説します。
なぜVPNをやめてZero Trustに移行したのか?
10以上のスタートアッププロジェクトでセキュリティ監査を行ってきた中で、よくある光景を目にしました。リモートワークの利便性のために、SSHポート(22)を公開したり、JenkinsやGrafanaのダッシュボードをそのままインターネットに晒したりしているケースです。VPNを使っている組織もありますが、新人のデザイナーに専用ソフトをインストールさせ、.ovpnファイルを配布して設定を説明するだけで、午前中が丸ごと潰れてしまうことも珍しくありません。
従来のVPNにおける3つの「不満」
- 権限が広すぎる: 一度VPNに接続すると、従業員は内部IPレンジ全体にアクセスできてしまうことがよくあります。個人のPCがマルウェアに感染した場合、わずか数分でサーバーシステム全体に拡散するリスクがあります。
- ストレスの溜まる速度: すべてのトラフィックが中継VPNサーバーを経由するため、特にカフェや4G回線での作業時には、レイテンシ(遅延)が顕著に増加します。
- 管理の煩雑さ: 離職者が出るたびに証明書(Certificate)を新規発行したり失効させたりするのは、非常に手間のかかる繰り返し作業です。
Zero Trustは実際どのように機能するのか?
VPNの「鍵」を持っているからといってデバイスを信頼するのではなく、Zero Trustは「常に再認証する」という原則で動きます。アプリケーションのリンクをクリックするたびに、CloudflareはGoogleやGitHub経由でIDを確認し、デバイスの状態やアクセス場所をチェックします。すべてが一致して初めて、アクセスが許可されます。この体験はすべてブラウザ上で完結し、複雑なクライアントソフトのインストールは不要です。
実際のアプリケーションへの導入手順
B1: アイデンティティプロバイダー(IdP)の設定
Cloudflare Dashboard > Zero Trust > Settings > Authentication に移動します。ここでは、GitHub または Google との連携を推奨します。
社内チームであればGoogle Workspaceが最適ですが、個人プロジェクトならGitHubが最も手軽です。GitHubでOAuth Appを作成し、Client IDとSecretを取得してCloudflareに貼り付けるだけです。これ以降は、「Login with GitHub」をクリックするだけでログインが完了します。
B2: 保護対象のアプリケーションを作成
Access > Applications > Add an application に進み、Self-hosted を選択します。
- Application Name: 社内ダッシュボード(または任意の名前)。
- Domain:
admin.itfromzero.com。
B3: ポリシー(アクセス権限)の設定
これがシステムの肝です。例えば、特定の会社のメールアドレスを持つユーザーのみにアクセスを制限できます。
Selector: Emails ending in
Value: @itfromzero.com
実体験に基づいたアドバイスですが、条件に Country(国)として「Vietnam」を追加しましょう。これにより、海外の不審なIPレンジからの自動スキャンを、最初の防御層で95%以上カットできます。
裏技:ポート22を開放せずにSSHを保護する
これは私の一番のお気に入り機能です。ファイアウォール(ufw/iptables)でポート22を完全に閉じることができます。攻撃者がサーバーのIPをスキャンしても、そこには強固な壁しか見えません。
自分のPCの ~/.ssh/config ファイルに数行追記します:
Host server-noi-bo.itfromzero.com
ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h
ssh [email protected] と入力すると、ブラウザが自動的に立ち上がり、ログインを求められます。認証が完了するとSSHトンネルが確立されます。安全であると同時に、SSHパスワードへのブルートフォース攻撃を心配する必要もありません。
実体験から得た、いくつかの注意点
- 常にバックアッププランを用意する: メールによるワンタイムパスワード(OTP)認証も有効にしておきましょう。万が一GitHubやGoogleに障害が発生しても、自分のシステムから「締め出される」ことを防げます。
- 監査ログを活用する: Cloudflareには「誰が、いつ、どのIPからアクセスしたか」という詳細なログが記録されます。私は毎週月曜の朝に5分間このログを確認し、異常なアクセスがないか早期に発見するようにしています。
- 退職時の迅速な対応: メールの削除だけで終わらせず、Application設定の 「Revoke all sessions」 をクリックして、古いセッションを即座にすべて強制終了させましょう。
VPNからZero Trustへの移行は、最初は少し戸惑うかもしれませんが、設定ファイルの管理から解放される快適さを一度味わうと、DevOpsにとってこれが最善の選択であると確信できるはずです。スムーズな導入を願っています!

