CloudFlare Zero Trust を使ってみた

こんにちは、SRE所属の @h_amakasu です。
この記事は、All About Group（株式会社オールアバウト） Advent Calendar 2022 18日目の記事です。

# はじめに
2020年からのコロナ禍の影響でリモートワークが一般化し、これまで社内にあったサーバへの接続が面倒になってしまったという事例は多くあるかと思います。そうしたシーンを打開するためにゼロトラストモデルなどを導入(検討)している環境は多いのではないでしょうか。

これに関連して、最近CloudFlare Zero Trust を少し触れせてもらう機会がありました。
触ってみたところ、なかなかよかったので紹介しようと思います。

# ゼロトラストとは
かつては内外でわけるような境界型セキュリティが一般的でしたが、クラウドやリモートワークの推進などによる働き方変革などで十分とは言えなくなってきました。そこで「何も信頼しない」という考え方を前提としたセキュリティモデルであるゼロトラストが広まってきています。
これを実現するためのサービスとして、CloudFlare からは本稿で紹介するSaaS 型のゼロトラストサービス「CloudFlare Zero Trust」が提供されていました。

https://www.cloudflare.com/ja-jp/products/zero-trust/

# CloudFlare Zero Trust の主要サービス
CloudFlare Zero Trust は大きくわけて以下の2サービスで構成されています。
公式サイトでも紹介されていますが、それぞれの機能を以下にまとめました。

* [CloudFlare Access](https://www.cloudflare.com/ja-jp/products/zero-trust/access/)
	* 社内向けサーバなどのクローズドな環境への経路構築機能
	* デフォルトのOneTimePIN から、IdP(AzureAD、Okta、Google WorkSpace etc) と連携したアクセス制御の実現
	* クライアントアプリ(WARP)と組み合わせての制御も可能（もちろんクライアントレスでの接続制御も可能）

* [CloudFlare GateWay](https://www.cloudflare.com/ja-jp/products/zero-trust/gateway/
)
	* CloudFlare のネットワークを経由させることでDNS, ネットワーク, HTTPトラフィックを検査してくれるセキュリティ機能
	* 認可されていないアプリやSNSなどへのデータ漏洩予防
	* ユーザー、デバイス、ロケーションで、インターネットとWebトラフィックを記録

# CloudFlare Zero Trust を使ってみた
私が検証した際の構成は以下となりますが、これがベーシックな構成になるかと思います。
これを構築する場合のステップを以下にまとめました。

* 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198206/e5c241db-80c9-774c-26b9-94d701f3e7dc.png)
* 検証した要件
    * 内部公開サービス(cf.example.com)へPrivate Network 外のClient からアクセス可とする
    * 内部公開サービス(cf.example.comはAzureADメンバーのみがアクセス可とする
    * Client 環境からの通信はDNS, Network, HTTP, SSH を記録する

* 構築・導入ステップ
    1. CloudFlare Zero Trust の無償プラン登録を行う
    2. CloudFlare のWeb サイトの登録
    3. CloudFlare 権威DNS へのドメイン（example.com） の移管
    4. CloudFlare Zero Trust のAuthentication でAzureAD と連携
    5. CloudFlare Access でアプリ(cf.example.com)を登録してAccess ポリシーを作成
    6. CloudFlare Access のApp Connector Tunnel サーバの構築
    7. CloudFlare DNS に公開サーバ(cf.example.com)用のCNAME レコード登録
    8. CloudFlare Gateway のポリシー作成
    9. CloudFlare Zero Trust のNetwork ロギング設定
    10. Client 環境にWARP クライアントをインストール
    11. 通信テスト&旧経路の削除
(※ このステップはドメイン, AzureAD, Private Network がすでにあることが前提です)

導入の大枠の流れをまとめましたが、これだけのステップで構築できました。
各ステップの詳細な手順は公式ドキュメントをみていただきたいと思いますが、整備されていてわかりやすく、基本的にWebUI で設定するだけなので躓くポイントは少ないかと思います。
私自身でも構築自体は初見で2時間かかりませんでした。

# 使ってみた感想

* 驚きの無料枠
	* ゼロトラストを支えるこれだけの機能を50ユーザーまで無料！（ほんとすごい）
	* 以下の機能・設定は欲しかったけど有償のみだったので同様の方は引っかかるかも
    	* サブドメインゾーンの分離
    	* Gateway の出口専用の固定IP
    	* DLP 機能
    	* アクティビティログの保管期限が少し短い(最大24h）
* 導入難易度の低さ
	* 今回触ってみた過程で躓くところはほとんどありませんでした
	  （最初はこれを記事にしようと思ってたんですが書くことがないレベル...）
	* UI もわかりやすくドキュメントも相当に整備されているので導入のしきいは相当に低いと感じます
* 環境変更の少なさ
    * 最小ならPrivate Network内へのApp Connecotorサーバ構築だけで済みます
    * こうしたソリューションの導入は総じて重い感がありますが、装置導入などもないので比較して低負担かと思います
* App Connector サーバの運用
    * Access を導入するにあたっては、Private Network 内にApp Connector(Tunnel)サーバを立てる必要があるので、アップデート運用や冗長化構成検討など考える必要がありそうです
* クライアントアプリ「WARP」の運用
    * クライアント端末で手動OFFができてしまうので、強制するような仕組みが必要になる場合があるかもしれません（提供されてるかもですが、今回は調べてないです）

# 最後に
CloudFlare Zero Trust を今まで知らなかったのは本当に怠慢でした。。。
これだけの機能が無料利用できるなら公私問わず利用するシーンがありそうです。
導入のしきいも高くないので、みなさんも是非一度触ってみてはいかがでしょうか！

# 資料
* [IPA ゼロトラスト移行のすゝめ](https://www.ipa.go.jp/icscoe/program/core_human_resource/final_project/zero-trust-mgn.html)
* [CloudFlare Zero Trust](https://www.cloudflare.com/ja-jp/products/zero-trust/)
* [CloudFlare Docs](https://developers.cloudflare.com/)