メモのページ - チラシの裏メモ 3枚目

通信技術や気になった事を黙々とメモし続ける

Cloudflare Zero Trustを導入してみた - POC環境構築編

ゼロトラスト ネットワーク(ZTN)の学習用環境として、Cloudflare Zero Trustを自宅に導入してみた。
今回はCloudflare Zero Trust導入手順のメモ。

2023/7/8追記 ポリシーの設定やOktaとの連携等の記事は、当記事内下部の「Cloudflare Zero Trust関連の記事」のリンク先を参照。
 
 
Cloudflare Zero Trustとは
CDN事業者として知られているClaudflare社が提供するゼロトラスト セキュリティソリューションである。
SWG(Secure Web Gateway)と呼ばれるクラウド型のプロキシサービス、IPアドレスの匿名化、アンチウイルス・アンチマルウェア、URLフィルタリング、アプリケーションフィルター等のサービスを提供する。
Cloudflare Zero Trustと競合する主なゼロトラストネットワーク製品として、以下が挙げられる。
・Zscaler ZIA(Zscaler Internet Access)
・Palo Alto Network Prisma Access
・Menlo Security Web Isolation Serviceなど。


ゼロトラスト ネットワーク(ZTNA)とは
組織の内部や外部を問わず全てのデバイスやリソースを信頼しない、という性悪説に基づくITセキュリティモデル。
ゼロトラスト アーキテクチャの概念やコンセプトについては、米国国立標準技術研究所(NIST)が公開した「NIST SP 800-27 ゼロトラスト・アーキテクチャ」が網羅的に記載されている。以下の要約は日本語訳からの抜粋である。(詳細は下記リンク先を参照)
・企業のプライベートネットワークは、暗黙のトラストゾーンと見なさない。
・ネットワークデバイスは、企業が所有していないか、構成可能でない場合が有る。
・どのようなリソースも本質的に信頼されるものではない。
・全ての企業リソースが企業のインフラストラクチャ上に有る訳ではない。
・リモートの企業主体と資産は、ローカルネットワークの接続を完全に信頼出来ない。
・企業のインフラストラクチャと非企業のインフラストラクチャとの間で移動する資産とワークフローには、一貫したセキュリティポリシーが必要。


Cloudflare Zero Trustの構成について
Cloudflare Zero Trustは以下から構成されている。EdgeとWARPとの間の通信は、WireGuardというUDP(Port:2408)なVPNで暗号化されている。インターネット側から見えるユーザのIPアドレスは、Gatewayに付与されているIPアドレスである。
・Team:AccessとGatewayから構成されている、Cloudflare Zero Trustの構成単位。設定はTeam単位で行う。
・Gateway:Cloudflare Zero Trustの中核。FW機能やアンチウイルス機能やロギングなどを提供する。
・Edge:PCやモバイル端末やサーバー等がインターネットと通信する為に接続する場所。
・Access:オンプレ環境やパブリッククラウド等に有る認証基盤。
・WARP:クライアントアプリ。自宅や社内や外出先からゼロトラスト ネットワークに接続する。


今回導入したFreeプランについて
無料とは言え最大50ユーザーまで対応可、そしてゼロトラストネットワークのサービスとして基本的な事が出来る事からゼロトラストネットワークの基本学習に適したプランだと判断し、Freeプランを採用した。Freeプランの内容は個人用としては充分。例え今後有料化にされたとしても年間100ドル程度までなら許容範囲と思っている。


注意事項
・当記事は、学習用環境として自宅のネットワークにゼロトラストのサービスを適用させる内容です。在宅勤務だけでなく普段の生活にも通信断などのような影響を及ぼす可能性が有ります。当記事の内容を参照しCloudflare Zero Trustを導入する際は、最初は全ての通信を通すポリシーを適用させる事をお勧めします。
・当ページにて紹介した手順による障害や損害につきましては、当ブログの著者は一切の責任を負いかねます。あらかじめご了承ください。


Cloudflare Zero Trust導入の流れ
以下の流れでPOC環境を構築する。今回はPOC環境につき細かなポリシー設定は行わない。
 1.Cloudflareのアカウント作成
 2.Cloudflare Zero TrustのTeamの設定
 3.認証設定
 4.ネットワークおよびポリシーの設定
 5.クライアント側の設定
 6.疎通確認

POC(Proof of Concept)環境とは、日本語でそのまま訳すると「概念実証環境」。今まで実装した事がないサービスや機能の実証を目的とした、開発環境の前の段階における検証やデモンストレーション環境を指す。


1.Cloudflareのアカウント作成
Cloudflareのアカウントを持っていない為、プラン選択のページにアクセスしアカウント作成から始める。
https://www.cloudflare.com/ja-jp/plans/zero-trust-services/#overview

自分の場合、Freeプランを利用する為Freeプランの「開始する」をクリック。メールアドレスとパスワードを入力し「アカウントを作成」をクリックする。

「Welcome to Cloudflare Zero Trust!」の画面に遷移する。「Next」をクリックし設定に入る。
何故かここから英語表記となる。


2.Cloudflare Zero TrustのTeamの設定
「Choose your team name」の画面に遷移する。Cloudflare Zero TrustのTeam名を入力する。Team名とはクラウドのテナント名のようなものと考えて良い。
尚、設定後のTeam名の変更は可能である。

「Choose a plan」の画面に遷移する。あれ? 先程選んだよね...という突っ込みは無しとして再度プランを選択する。
自分の場合Freeプランを利用する為、Freeプランの列の下に有る「Select plan」をクリックする。

プラン内容の要約の画面に遷移する。内容に問題が無ければ「Proceed to payment」をクリックする。
次の画面では「Add payment method」をクリック。
2022年11月3日の段階では、Freeプランであっても支払い情報の入力は必須となっている。支払い手段としてクレジットカードとPaypalのどちらかを選択出来る。
各欄に情報を入力後「Next」をクリックする。

支払い手続きが正常に処理されると「Welcome aboard」の画面に遷移する。


3.認証設定
今回は外部の認証基盤は利用せず、Cloudflareに組み込まれている認証機能を利用する。尚、後からOktaやMS Azure AD等への認証設定の変更は可能である。
「Welcome aboard」の画面内左下の「Setting」「Authentication」の順にクリック。

「One-time pin」(OTP認証)の設定は初期状態では既に完了しているが、One-time pinの「Edit」をクリック。

画面右側に設定手順の記載が有る。今回は設定変更しない為スルーする。
画面左上の「Back to Authentication」をクリックし「Authenticaton」に戻る。
続けて、Authentication画面の左上に有る「Back to Settings」をクリックし、「Settings」画面に戻る。

引き続き、One-time pinとCloudflare Zero Trustを利用する端末の紐付けを行う。
「Settings」画面にて「WARP Client」をクリックする。

「WARP Client」画面内の「Device enrollment premissions」欄内に有る「Manage」をクリックする。

「Device enrollment permissions」画面内右側の「Add a rule」をクリックする。

「Create device enrollment rules」画面内右側の「Device enrollment rules」設定は以下のとおり。
・Rule name:ルール名の設定。任意の文字列を入力
・Rule action:自分の端末を通したい為、Allowを選択
・Selector:Login Methodsを選択
・Value:One-time PINを選択

上記の設定を終えたら画面内左側の「Save」をクリックし、設定内容を保存する。

設定が完了すると「Device enrollment premissions」欄内に上記で設定したルールが表示される。


4.ネットワークおよびポリシー設定
これでCloudflare Zero Trustを利用出来る状態となった。早速ではあるが簡単なポリシー設定を試してみる。
今回はPOC環境につき、以下の内容で軽く設定を入れる。詳細な設定は後日実施する。
・TCPとUDPの通信をCloudflare Zero TrustのGatewayに通す
・Cloudflare Zero TrustのGatewayを通るTLS通信を復号化
・Cloudflare Zero TrustのGatewayを通る通信に対しアンチウイルスを実行
・YouTubeへのアクセスをブロック

まずは「Setting」画面に戻り「Network」をクリックし、ネットワークの設定に進む。

「Network」の画面に遷移する。ここはCloudflare Zero TrustのGatewayを通過するネットワークに対する設定である。今回はPOC環境につき最小限の設定変更で済ませる。
「Firewall」欄の設定内容は以下のとおり。設定を終えたら「Setting」画面に戻る。
・Proxy:TCPとUDPの通信をCloudflare Zero TrustのGatewayに通したい為「Enabled」に変更し「UDP」にチェックを入れる
・TLS decryption:Cloudflare Zero TrustのGatewayを通るTLS通信を復号化させたい為「Enabled」に変更
・AV inspection:Cloudflare Zero TrustのGatewayを通る通信に対しアンチウイルス処理を実行したい為「Enabled」に変更

「Setting」画面に戻り「Gateway」をクリック。更に「Policies」をクリックしポリシーの設定に進む。

「HTTP」タブ内の「Create a HTTP policy」をクリックする。
「Create a HTTP policy」の画面に遷移する。

今回はYouTubeへのアクセスを破棄するポリシーを作成してみた。「Create an HTTP policy」の設定内容は以下のとおり。
・Name your policy:任意のPolicy名を入力。自分の場合「001_test_youtube」を入力
・Build an expression:Selector欄は「URL」、Operator欄は「matches regex」を選択、Value欄はYouTubeのURLを入力
・Select an action:Action欄は「Block」を選択
・Configure policy settings:そのまま
・Block page text:「The website is blocked」を入力

設定を終えたら「Create policy」をクリック。設定内容が正常に保存されると作成したPolicyが以下のように表示される。


5.クライアント側の設定
ここから端末側の設定に入る。
以下のサイトにアクセスし、クライアント側がCloudflare Zero Trustに接続する為のアプリ「WARP」をダウンロードしインストールする。
https://one.one.one.one/?_gl=1*h333zc*_ga*MTcwNTk4OTA4NC4xNjUzNjM2NDk4*_gid*MTU3ODU2NDI2Mi4xNjU1NzY5Nzc4

インストール後、Warpを立ち上げる。
macOS版の場合、メニューバー内にWarpのアイコンが表示される。アイコンをクリックするとWarpのウインドウが表示される。

WARPウインドウ内の歯車アイコンをクリックし、更に「Preferences」をクリック。
「Preferences」ウインドウ内の「Account」タブをクリック。
続けて「Login to Cloudflare Zero Trust」をクリック。
「Enter your Team name」に上記「2.Cloudflare Zero TrustのTeamの設定」で設定したTeam名を入力し、「Done」をクリック。

Team名の入力後、上記の「3.認証設定」で設定した認証画面が表示される。
自分の場合、CloudflareのOne-time pinの認証画面となる。

「Email」欄にメールアドレスを入力し「Send me a code」をクリックすると入力したメールアドレスに6桁のコードが送信される。
メールを開き6桁のコードを確認。その6桁のコードを「Enter a code」に入力し「Sign in」をクリック。
正常に認証処理が進むと「Success!」と記載されたページに遷移する。

再度、メニューバー内にWARPのアイコンをクリックしWARPのウインドウを表示させる。
WARPのウインドウ内真ん中のボタンをクリックし数秒経つと「Connected」と表示され、端末がCloudflare Zero Trustに接続出来た事が分かる。
※この段階でWARPまたはZero Trustの文字が青になっていること。


TLS証明書のインストール
以下のサイトにアクセスし、「Download certificate (.crt)」と「Download certificate (.pem)」それぞれをクリックしダウンロード。
https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/install-cloudflare-cert/#docs-content

ダウンロードした「Cloudflare_CA.crt」ファイルをダブルクリックする。
「証明書の追加」ウインドウが表示されたら「追加」をクリックする。
「キーチェインアクセス」ウインドウ内左下の「証明書」をクリックし、「Cloudflare for Teams ECC Certificate Authority」をダブルクリックする。
「Cloudflare for Teams ECC Certificate Authority」のウインドウが表示される。

「信頼」をクリックすると、下に信頼するかどうか設定が可能になる。今回は以下の内容で設定した。
「この証明書を使用するとき:」を「常に信頼」に設定すると、その下の各項目が全て「常に信頼」に変化する。
「Cloudflare for Teams ECC Certificate Authority」のウインドウを閉じ、「キーチェインアクセス」ウインドウ内のCloudflare for Teams ECC Certificate Authority左側のアイコンが青に変化した事を確認する。
※この段階でCloudflare WARPのウインドウ内の文字が「WARP」から「Zero Trust」に変わっていること。

再びWARPを立ち上げ、Cloudflare Zero Trustとの接続をONにする。


6.疎通確認
上記「4.ネットワークおよびポリシー設定」でdenyのポリシーを設定したYouTubeにアクセスする。
アクセスは拒否され以下の画像が表示される。
また、他のサイトは表示可能である事を確認する。


今回はこれまで。
POC環境としての設定は完了した。思っていたより簡単に設定出来たが、以下のリンク先にて紹介されていた設定内容と一部異なっている箇所が有った。Cloudflare Zero Trustのアップデートによるものを思われる。
次回はポリシーを中心にもう少し詳細な設定を入れてみる。


参照サイトや資料
Cloudflare Zero Trust公式ドキュメント
https://www.cloudflare.com/ja-jp/products/zero-trust/ Cloudflare Zero Trust
https://developers.cloudflare.com/cloudflare-one/ CloudflareDocs
https://www.cloudflare.com/ja-jp/plans/zero-trust-services/#overview 料金プラン

Cloudflare公式チャンネル
https://www.youtube.com/watch?v=Lxp-LYbKwiY Cloudflare Zero Trust Network Access Demo
https://www.youtube.com/watch?v=scxdKDu3amI Q4 Cloudflare Zero Trust Live Demo

参照サイト
https://fsbblog.jp/archive/entry-163.html【検証】Cloudflare Zero Trustを試す
https://zenn.dev/hiroe_orz17/articles/650463001ee087 Cloudflare Zero Trust の基本的なセットアップ手順
https://zenn.dev/hiroe_orz17/articles/59513491b4b8d9 Cloudflare Zero Trust クライアント側のセットアップ手順

NIST SP800-207「ゼロトラスト・アーキテクチャ」の解説と日本語訳
https://www.pwc.com/jp/ja/knowledge/column/awareness-cyber-security/zero-trust-architecture-jp.html

参考書など
https://www.amazon.co.jp/dp/4873118883/ ゼロトラストネットワーク ―境界防御の限界を超えるためのセキュアなシステム設計
https://www.amazon.co.jp/dp/4297126257/ ゼロトラストネットワーク実践入門
https://www.amazon.co.jp/dp/B096X7RJLQ/ Software Design (ソフトウェアデザイン) 2021年7月号


Cloudflare Zero Trust関連の記事
https://debslink.hatenadiary.jp/entry/20221110/1668087871 Cloudflare Zero Trustを導入してみた - ポリシー設定編①
https://debslink.hatenadiary.jp/entry/20221123/1669181060 Cloudflare Zero Trustを導入してみた - ポリシー設定編②
https://debslink.hatenadiary.jp/entry/20221129/1669714627 Cloudflare Zero TrustとZscaler ZIAのポリシーについて
https://debslink.hatenadiary.jp/entry/20230321/1679325069 Cloudflare Zero TrustのIdPとしてOktaを導入してみた①
https://debslink.hatenadiary.jp/entry/20230415/1681545093 Cloudflare Zero TrustのIdPとしてOktaを導入してみた②
https://debslink.hatenadiary.jp/entry/20230708/1688789939 Cloudflare DEXを使用してみた