Cloudflare Zero Trust を使ってみた話

こんにちは。mediba Advent Calendar 2023 15日目担当の 長根です。
テクノロジーセンターで、主に社内インフラや、セキュリティ周りを見ています。

さて、ゼロトラストという言葉がバズワード化して久しい感がありますね。
とはいえ、どこの会社でも「いにしえのVPN」を、まだ現役で利用しているところも多いのではないでしょうか。

今回medibaでは、VPNのリプレースのタイミングで、Cloudflare Zero Trust を導入しました。
導入手順は、公式ドキュメント等に上手くまとまっておりますので、そちらをご参考頂くとして、特に管理観点で気になる点や、留意点を纏めました。

同じように検討中の皆様のご参考になれば幸いです。 

# これまでの課題

これまでは、従来型のVPNサーバを導入して利用していましたが、以下のような課題がありました。

- 定期的に発生する保守作業
    - サーバにVPNサーバをインストールして利用をしていたため、脆弱性の定期的な対応や、それに伴う系切り替え等が定期的に発生しており、それなりの保守作業が存在していました。

- ネットワーク帯域
    - 元々、VPNは非常時の保守用途といった目的で導入された経緯もあり、そこまで潤沢な帯域を考慮しておらず、最低限の帯域となっていました。
    - 加えて、海外の開発拠点からの接続では、物理的に距離が離れていることもあり、速度はとても快適といえる状況ではありませんでした。

- 費用
    - 円安や物価上昇の影響で、更新におけるライセンス費が急騰しており、費用面を抑えつつ、機能要件を満たす製品を選定する必要がありました。

今回これらを解消するにあたって、様々な要件を織り交ぜつつ、検討した結果、Cloudflare Zero Trust を導入することになりました。
細々とした詳細は割愛しますが、大きな決め手としては以下の点です。

- マネージドサービスであること
    - メンテナンスフリー最高
- 潤沢なネットワーク帯域
    - ご存じの通りCloudflareはCDNを提供しており、このバックボーン、エッジローケーションを活用した通信を行うことができるため、離れた開発拠点からも満足いく通信速度を得ることができます。
- 価格面がフィットすること
    - どんなに機能が良くても、コストがバランスしないことには導入できません。この点、これまでの保守費用やライセンス費用含め、現行コスト以下に抑えられる見込みであったこと。
- 占有IPアドレスが利用可能であること
    - 自社や、取引先のセキュリティ要件で、特定のIPアドレスからの接続が必要なケースは良くある話かと思います。（特に大企業であればあるほど）
    - 競合製品でも企業が有するIPアドレスは利用可能ではあるものの、このグローバルIPを付与する仕組み上、自社側で専用のサーバを構築・運用する必要がある製品ばかりでした。
    - この点、Cloudflareがその企業の占有IPとして払い出すことができ、かつマネージドで利用できる点は、調べた限りCloudflare Zero Trust にしか存在しませんでした。
    - 尚、占有IPオプションは、Enterpriseプラン以上の契約から利用可能ですのでご注意ください。

# いざ導入

導入に関しては、色々なサイトでわかりやすく掲載されているため割愛しますが、組織でミニマムに利用開始する場合、以下のステップだけで利用可能です。

- 管理者側作業
    - アカウントの開設
    - 接続可能なクライアントの設定（デバイスエンロールメント）
        - 最短で利用開始したい場合、利用対象者のメールアドレスを設定し、ワンタイムパスワードでの認証が可能
        - もちろん、IdPとの連携が可能
    - 各種ポリシーの設定
        - とりあえず触ってみたい場合は、スキップ可能

- ユーザ側
    - Cloudflare WARP（クライアントソフト）のダウンロード、インストール
    - Cloudflare WARP からサインイン
    - Cloudflare WARP の接続ボタンを押す。
    - 完☆了！

簡単ですね。
特にユーザ側の接続開始までが驚くほどあっけなく完了するので、ユーザビリティがとても良いです。
ここは、エンジニアからも高評価の声が聞かれました。

# 設定あれこれ

Coudflare Zero Trust はいくつかの機能があるのですが、管理観点からよく触るであろう設定を説明していきます。

### Firewallポリシー
- DNSポリシー、Networkポリシー、HTTPポリシーが設定可能です。
- ルールは大きく Trafficルール、Identityルール　またはその組み合わせから構成可能です。
- Trafficセクションでは、特定の通信先や、ポート通信をAllow / Deny のルールを設定することができます。また、プリセットされたカテゴリ（MalwareやPhishing）でのルールも用意されています。
- Identityセクションでは、ユーザ名やグループ名等を指定することが可能です。
- ユースケースとしては、好ましくないサイトや、通信ポートをDenyしたり、特定部門だけはAllow/Denyするおくことでセキュリティリスクを考慮しつつ柔軟なルールを表現することが可能です。

![figure01_firewall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954438/8884cbee-b503-01c8-f690-eed2f859a409.png)


### Egressポリシー
- アウトバウンドの通信の設定を行う箇所です。
- 先ほどの、FirewallポリシーでもあったTrafficルール, Identityルールに加え、Device Postureルールが指定可能です。
- ユースケースとしては、自社や取引先のセキュリティポリシーによって、IPアドレスを固定化して通信する必要がある場合や、部門毎でグローバルIPを使い分けたい等に設定すると良いでしょう。
- Device Postureルール（後述）を組み合わせることによって、アクセスするデバイスがセキュリティポリシーを満たさなければ、占有IPを利用させない等、厳格なルールが表現できるようになります。

![figure02_egress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954438/29130874-e56c-9f2c-76d2-4bccad2ab3f5.png)


### Device Posture
- Device Postureとは、デバイスを評価する仕組みで、様々な条件から一定のルールを満たしてるか判定させることができます。
- これによって、脆弱性が残った古いバージョンのOS、ストレージが暗号化されてない等 組織のセキュリティポリシーを満たしてないデバイスの接続を拒否することが可能です。
- ポリシーは、以下のような attribute から、ANDやOR条件によって組み合わせることができるので、PCの場合はこのルール。モバイルデバイスの場合はこのルール。といった細やかな設定をすることが可能です。
- 管理周りをされている方は共感頂けると思うのですが、この画面を見ただけでもワクワクしてきます。
- Device Postureの評価頻度は、ログを見る限り数分間隔で行われているためこの点も素晴らしいと思います。

![figure03_deviceposture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954438/017e107b-6d19-948c-f3c4-4d3e5c79b613.png)


### 大事なログ周り
- Audit や Access 等のログは ダッシュボード上で保管・参照できますが、デフォルトでは、ログの種類にもよりますが 30日～180日 で消失します。（Enterprise プランの場合。契約プランによって異なります。）
- セキュリティポリシ等のログ保管要件に応じて、この期間を延伸したい場合、LogPushの機能が用意されています。お好みのストレージに保管するように設定しましょう。
- Amazon S3, Google Cloud Storage, Azure Storage 他へのログ転送が可能です。SplunkやSumo logic も用意されており、SIEMに流したい方も嬉しいと思います。

![figure04_logs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954438/6ced24f9-d08a-3940-3e98-56cb23311dc4.png)


### ライセンスやシート数の考え方
- 基本的には以下の通りです。
    - https://www.cloudflare.com/ja-jp/plans/zero-trust-services/
- PoCで試してみたい場合は、最大50人までであれば、Freeプランからのスタートも可能です。
    - 大変驚くことに、Freeプランでも IdPと連携可能（！）なので、ここは本当に太っ腹すぎると思います。
    - そして気に入ったら是非課金をして頂けるとコミュニティのユーザとしても嬉しいです。
- プランの選択、契約するシート数の他にも、DNSへのクエリ数に対しても制限があります。
    - 1シートあたりのDNSクエリ上限 x 契約シート数 が最大の上限となります。1シートあたりのDNSクエリが超過したとしても契約シート全体でこの総量を越えなければ大丈夫です。
    - ダッシュボードのAnalyticsから、1日や1週間のカウント実績が確認可能なので、検証期間中に大まかに把握されてから契約シート数を決定されるのが良いと思います。

以上、本当にざっと管理面を中心にどのようなことができるかを紹介しました。

Cloudflare Zero Trust のいいところは製品もさることながら、ドキュメントも豊富（まだ英語の部分も多いですが）で、コミュニティサイトも活発なので、大抵の躓きポイントはこれらで解消できるポイントだと思います。
実際にこれらのドキュメントのおかげで、導入はかなりスムーズに進みました。

ほかにも楽しく便利な機能が沢山あり、味見だけでもおなか一杯になること間違いありません。

ゼロトラスト的な考えを取り入れながら、リモートアクセスをセキュアに改善したい方の参考の一助になれば幸いです。

# 最後に

現在medibaでは、メンバーを大募集しています。

medibaってどんな会社だろう？ と興味を持っていただいた方は、
カジュアル面談もやっておりますので、お気軽にお申込み頂ければと思います。

[募集・応募はこちらから](https://www.mediba.jp/recruit "Qiita Home")