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

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

Cloudflare Zero Trustを導入してみた - ポリシー設定編①

前回は、ゼロトラストネットワーク(ZTNA)の学習用環境としてCloudflare Zero TrustのPOC環境を構築し、自宅の環境でも手軽にゼロトラストネットワークを体験出来た。
疎通確認としてYouTubeへのアクセスをBlockするポリシーを設定し、想定どおりアクセスをブロックさせる事が出来たが、今回はもう少し踏み込んだ内容でポリシーを設定してみた。
当記事は、ポリシーの設定および疎通確認のメモ。


前回の記事の内容、Cloudflareのアカウント作成からCloudflare Zero Trustの設定、そしてクライアント側の設定までの流れに関しては、以下のリンク先を参照。
https://debslink.hatenadiary.jp/entry/20221103/1667482863 Cloudflare Zero Trustを導入してみた - POC環境構築編

追加記事の内容、Cloudflare Zero TrustのGatewayにてDNSポリシーの設定、そして疎通確認までの流れに関しては、以下のリンク先を参照。
https://debslink.hatenadiary.jp/entry/20221123/1669181060 Cloudflare Zero Trustを導入してみた - ポリシー設定編②


Cloudflare Zero Trustのポリシーについて
今回は、ユーザ側からWebアプリやサービスに流れていく通信のポリシーを定義するCloudflare Zero Trustのポリシーの機能に焦点を当てる。
Cloudflare Zero Trustでは以下の3種類のポリシーがある。ポリシーの適用場所は異なるものの、3種類全てが同一のBoard画面(管理画面)にて設定する。
 ①Cloudflare Gatewayで、インターネットへの外向き通信を評価するセキュアなWeb Gatewayポリシー。
 ②Cloudflare Accessによるアプリケーションへの内向き通信を保護するためのアクセスポリシー。
 ③ブラウザ隔離ポリシーで、インターネット上の脅威から組織のデバイスを保護し、データ損失を防止する。

WebゲートウェイであるCloudflare Gatewayにて設定可能なポリシーは以下の3種類である。
・DNSポリシー:DNSクエリを評価する。評価の結果問題が有れば、ユーザ側端末のドメインとIPアドレスの解決をブロックする。
・Networkポリシー:個々のTCP/UDP/GREパケットを評価する。評価の結果問題が有れば、HTTP以外のリソースを含む宛先のサーバーへのアクセスをブロックする。
・HTTPポリシー:HTTP要求を評価する。評価の結果問題が有れば、ドメイン全体だけでなく特定のURLの読み込みをブロックする。デフォルトではTLSを復号化してチェックする。

※画像をクリックすると拡大表示します


Cloudflare Gatewayのポリシーの構文
Cloudflare Gatewayに設定するポリシーの構文は以下のとおり。

【Policy name】+【Description】+【Selector】+【Operator】+【Value】+【Action】

・Policy name:作成するポリシーの名称。任意の文字列で指定出来る。
・Selector:評価基準。この評価基準に照らし合わせてトラフィックを評価する。
・Operator:トラフィックをSelectorにマッチングさせる方法。
・Value:評価の対象。
・Action:評価の結果、どう処理するか。
(Description:ポリシーの説明文。必須項目ではない為省略可。)

Actionの値はAllowやBlockだけでなく、ポリシー毎に様々な値が用意されている。
以下は、Cloudflare Gatewayに設定するポリシーで利用可能なActionの内容。

Action 内容 どのPolicyで使用
Allow SelectorとValueで指定した宛先への到達を許可 DNSポリシー
Networkポリシー
HTTPポリシー
Block SelectorおよびValueで指定した宛先への到達をブロック DNSポリシー
Networkポリシー
HTTPポリシー
Override 特定のドメインに対するすべてのDNSクエリを別の宛先に応答 DNSポリシー
Network Override 特定のIPアドレスやポートに向けられた、またはポートから来るトラフィックを
検査せず、パブリックIPアドレスをプライベートIPアドレスに上書き
Networkポリシー
Safe Search 検索エンジンは不快な内容をフィルタリングし、子どもや職場に安全な検索結果を返す DNSポリシー
YouTube Restricted YouTubeに組み込まれた不快なコンテンツをフィルタリング DNSポリシー
Audit SSH ※2022/11/8現在、ドキュメントにAudit SSHの項目無し Networkポリシー
Do Not Inspect TLSインスペクトを実行せず透過転送 HTTPポリシー
Do Not Scan Anti Virus Scanを実行せず転送 HTTPポリシー


例として、以下のポリシーを作成した場合...
・Policy name:TEST01
・Selector:Application
・Operator:in
・Value:Slack
・Action:Allow
TEST01というポリシーは、リクエスト先のWebアプリがSlackの場合、通信を許可する...という内容になる。

Cloudflare Zero Trustの設定は容易であるというものの、実際に設定画面をいじってみると多彩なSelectorが用意されている事が分かる。
以下は、DNSポリシーにおけるSelectorとActionの一覧である。

Selector 対象 Action
Application 一般的なWebアプリの一覧 Allow
Block
Override
Safe Search
YouTube Restricted
Authoritative NameServer 権威あるネームサーバーのIPアドレスと照合 Allow
Block
Content Categories 特定のコンテンツカテゴリに向けられたトラフィックに
DNSポリシーを適用
Allow
Block
Override
Safe Search
YouTube Restricted
DNS CNAME Response Value DNSレスポンスをCNAMEレコードでフィルタリング Allow
Block
DNS MX Response Value DNSレスポンスをMXレコードでフィルタリング Allow
Block
DNS PTS Response Value DNSレスポンスをPTRレコードでフィルタリング Allow
Block
DNS Resolver IP 登録された場所と一致するGateway ResolverのIPアドレスに
到着したDNSクエリにポリシーを適用
Allow
Block
Override
Safe Search
YouTube Restricted
DNS TXT Response DNSレスポンスをTXTレコードでフィルタリング Allow
Block
DOH subdomain 各ロケーションに設定されたDoHエンドポイント宛の
DNS-over-HTTPS(DoH)経由で到着するDNSクエリに対して
マッチングするために使用
Allow
Block
Domain ドメインとすべてのサブドメインに対して一致させるために使用 Allow
Block
Override
Safe Search
YouTube Restricted
Host 指定されたホスト名のみに対してマッチ Allow
Block
Override
Safe Search
YouTube Restricted
Location 特定のゲートウェイの場所または場所のセットにDNSポリシーを
適用
Allow
Block
Override
Safe Search
YouTube Restricted
Query Record Type ポリシーを適用するDNSリソースレコードの種類を選択 Allow
Block
Override
Safe Search
YouTube Restricted
Resolved Continent IP Geolocation クエリの解決先である大陸に基づいてフィルタリング Allow
Block
Override
Safe Search
YouTube Restricted
Resolved Country IP Geolocation クエリの解決先である国に基づいてフィルタリング Allow
Block
Override
Safe Search
YouTube Restricted
Resolved IP クエリの解決先であるIPアドレスに基づいてフィルタリング Allow
Block
SAML Attribute SAML Attribute Assertionから値を指定 Allow
Block
Override
Safe Search
YouTube Restricted
Security Categolies 特定のセキュリティカテゴリに向けられたトラフィックをブロック Allow
Block
Override
Safe Search
YouTube Restricted
Source Continent IP Geolocation クエリがGatewayに到着した大陸を基にフィルタリング Allow
Block
Override
Safe Search
YouTube Restricted
Source Country IP Geolocation クエリがGatewayに到着した国を基にフィルタリング Allow
Block
Override
Safe Search
YouTube Restricted
Source IP クエリがゲートウェイに到着する特定のソースIPアドレスに
DNSポリシーを適用
Allow
Block
Override
Safe Search
YouTube Restricted
User Email ユーザーの電子メールに基づくIDベースのDNSルールを作成 Allow
Block
Override
Safe Search
YouTube Restricted
User Group Email IdPグループのメールアドレスに基づいてIDベースのDNSルールを
作成
Allow
Block
Override
Safe Search
YouTube Restricted
User Group IDs IdPグループIDに基づいてIDベースのDNSルールを作成 Allow
Block
Override
Safe Search
YouTube Restricted
User Group Names IdPグループ名に基づいてIDベースのDNSルールを作成 Allow
Block
Override
Safe Search
YouTube Restricted


以下は、NetworkポリシーにおけるSelectorとActionの一覧である。

Selector 対象 Action
Application 一般的なWebアプリケーションのリストに適用 Allow
Block
Destination Continent IP Geolocation リクエストの宛先である大陸に基づいてフィルタリング Allow
Audit SSH
Block
Network Override
Destination Country IP Geolocation リクエストの宛先である国に基づいてフィルタリング Allow
Audit SSH
Block
Network Override
Destination IP リクエストのターゲットのIPアドレス Allow
Audit SSH
Block
Network Override
Destination Port リクエスト先のポート番号 Allow
Block
Network Override
Passed Device Posture Checks デバイスにインストールされているソフトウェアや
デバイスの設定を確認しアクセスを制限
Allow
Audit SSH
Block
Network Override
Protocol パケットの送信に使用されたプロトコル Allow
Block
Network Override
SAML Attribute SAML Attribute Assertionから値を指定 Allow
Audit SSH
Block
Network Override
SNI GatewayがトラフィックをフィルタリングするSNI(Server Name
Indication)ヘッダーのホスト
Allow
Block
Network Override
SNI Domain GatewayがトラフィックをフィルタリングするSNIヘッダーのドメイン Allow
Block
Network Override
Source Continent IP Geolocation リクエストをしたユーザーが居る大陸に基づいてフィルタリング Allow
Audit SSH
Block
Network Override
Source Country IP Geolocation リクエストをしたユーザーが居る国に基づいてフィルタリング Allow
Audit SSH
Block
Network Override
Source IP リクエストをしたユーザーのIPアドレス Allow
Audit SSH
Block
Network Override
Source Port リクエストをしたユーザーの送信元ポート Allow
Audit SSH
Block
Network Override
User Email ユーザーの電子メールに基づくIDベースのルールを作成 Allow
Audit SSH
Block
Network Override
User Group Email IdPグループのメールアドレスに基づいてIDベースのルールを作成 Allow
Audit SSH
Block
Network Override
User Group IDs IdPグループIDに基づいてIDベースのルールを作成 Allow
Audit SSH
Block
Network Override
User Group Names IdPグループ名に基づいてIDベースのルールを作成 Allow
Audit SSH
Block
Network Override
User Name IdP ユーザー名に基づいてIDベースのルールを作成 Allow
Audit SSH
Block
Network Override
Virtual Network ※2022/11/8現在、ドキュメントにVirtual Networkの項目無し Allow
Audit SSH
Block
Network Override


以下は、HTTPポリシーにおけるSelectorとActionの一覧である。

Selector 対象 Action
Application 一般的なWebアプリケーションのリストに適用 Allow
Block
Do Not Inspect
Do Not Scan
Content Categories 特定のコンテンツカテゴリに向けられたトラフィックにポリシーを適用 Allow
Block
Do Not Inspect
Do Not Scan
Destination Continent IP Geolocation リクエストの宛先である大陸に基づいてフィルタリング Allow
Block
Do Not Inspect
Do Not Scan
Destination Country IP Geolocation リクエストの宛先である国に基づいてフィルタリング Allow
Block
Do Not Inspect
Do Not Scan
Destination IP リクエスト先のIPアドレス Do Not Inspect
Domain ドメインとすべてのサブドメインに対して一致させるために使用 Allow
Block
Do Not Inspect
Do Not Scan
Download Mime Type パケットの送信に使用されたプロトコル Allow
Block
Host リクエスト先のホスト名 Allow
Block
Do Not Inspect
Do Not Scan
HTTP Method 対象となるリソースに対して指示するGETやPOSTが対象 Allow
Block
Do Not Scan
HTTP Response HTTPリクエストが正常に完了したどうかを示すレスポンスが対象 Allow
Block
Passed Device Posture Checks デバイスにインストールされているソフトウェアや
デバイス設定を確認しアクセスを制限
Allow
Block
Do Not Inspect
Do Not Scan
SAML Attribute SAML Attribute Assertionから値を指定 Allow
Block
Do Not Inspect
Do Not Scan
Security Risks DNSトンネリングやスパイウェア Allow
Block
Do Not Inspect
Do Not Scan
Source Continent IP Geolocation リクエストをしたユーザーが居る大陸に基づいてフィルタリング Allow
Block
Do Not Inspect
Do Not Scan
Source Country IP Geolocation リクエストをしたユーザーが居る国に基づいてフィルタリング Allow
Block
Do Not Inspect
Do Not Scan
Source IP リクエストを行ったユーザーのIPアドレス Do Not Inspect
Upload MIME Type ※2022/11/8現在、ドキュメントにUpload MIME Typeの項目無し Allow
Block
URL リクエスト先のURL Allow
Block
Do Not Scan
URL Path リクエスト先のURL Allow
Block
Do Not Scan
URL Path and Query リクエスト先のURL Allow
Block
Do Not Scan
URL Query リクエスト先のURL Allow
Block
Do Not Scan
User Email ユーザーの電子メールに基づくIDベースのルールを作成 Allow
Block
Do Not Inspect
Do Not Scan
User Name IdP 内の特定のユーザーに対するIdP ユーザー名に基づいて
IDベースのルールを作成
Allow
Block
Do Not Inspect
Do Not Scan
Virtual Network ※2022/11/8現在、ドキュメントにVirtual Networkの項目無し Allow
Block
Do Not Scan


注意事項
・当記事は、学習用環境として自宅のネットワークにゼロトラストのサービスを適用させる内容です。在宅勤務だけでなく普段の生活にも通信断などのような影響を及ぼす可能性が有ります。
・Freeプランの場合、DLP(Data Loss Prevention)機能は未対応です。
・当ページにて紹介した手順による障害や損害につきましては、当ブログの著者は一切の責任を負いかねます。あらかじめご了承ください。


今回の要件とポリシー設定
今回は以下の2つの要件で、自宅の作業端末からAzure内のゲストOSとWebアプリへのアクセスを制御してみた。
 ①自分の端末から、MS Azureにて稼働しているLinuxサーバへのSSHアクセスを許可。
 ②自分の端末から、boxとGithubとSlackへのアクセスを許可、その他のWebアプリへのアクセスは拒否。

要件①のポリシー設定
最初に、MS Azureにて稼働しているLinuxサーバへのSSHアクセスのみを許可する設定を行う。
SSHアクセスやRDPアクセス等のような非HTTP/HTTPS通信の制御は、Networkポリシーで定義する。Boad画面左側の「Gateway」から「Policies」に移る。
続けて「Network」をクリックし「Create a policy」をクリックし設定画面に入る。

「Edit a network policy」画面内の「Name your policy」欄内の「Policy name」にポリシー名を入力。自分の場合「allow_azure_sv」とした。
「Build an expression」欄内の「Selector」は「Destination IP」を選択。「Operator」は「is」を選択。「Value」はアクセス先のサーバのパブリックIPを入力。

「Select an action」欄内の「Action」は「Allow」を選択。
Create policy」をクリックし、設定内容を保存する。

設定内容が保存され「Policies」画面に戻る。以下はNetworkポリシーの設定内容。


要件②のポリシー設定
次に、boxとGithubとSlackへのアクセスを許可する設定を行う。
GithubやSlack等のようなWebサービスへの通信の制御は、HTTPポリシーで設定を行う。
「Policies」画面内の「HTTP」をクリックし、HTTPポリシーの設定画面に入る。
「Create an HTTP policy」に入り「Create a policy」をクリックし設定画面に入る。

「Name your policy」欄内の「Policy name」にポリシー名を入力。自分の場合「allow_slack_github_box」とした
「Build an expression」欄内の「Selector」は「Application」を選択。「Operator」は「in」を選択。「Value」は「box」と「Github」と「Slack」を選択。
「Select an action」欄内の「Action」は「Allow」を選択。
「Create policy」をクリックし、設定内容を保存する。

次は上記で許可設定したbox、Github、Slack以外のWebアプリへのアクセスを全て破棄する設定に入る。
「Policies」画面にて引き続き「Create a policy」をクリックし、設定画面に入る。
「Name your policy」欄内の「Policy name」に「deny_all」を入力。
「Build an expression」欄内の「Selector」は「Application」を選択。「Operator」は「not_in」を選択。「Value」は「box」と「Github」と「Slack」を選択。
「Select an action」欄内の「Action」は「Block」を選択。
「Configure policy settings」欄内の「Block page customised text (optional):」は「Your access is denied」を入力。
「Create policy」をクリックし、設定内容を保存する。

上記の設定を終えた段階では、boxとGithubとSlack以外のHTTP通信は全て遮断されてCloudflareのBoard画面も表示出来なくなる為、CloudflareのBoard画面が正常に表示出来るよう、HTTPポリシーを追加する。
「Create a policy」をクリックし、設定画面に入る。
「Name your policy」欄内の「Policy name」に「cloudflare_board」を入力。
「Build an expression」欄内の「Selector」は「Application」を選択。「Operator」は「in」を選択。「Value」は「Cloudflare_Bashboard」を選択。
「Select an action」欄内の「Action」は「Allow」を選択。
「Create policy」をクリックし、設定内容を保存する。
このポリシーを先程作成した「deny_all」より先に評価してほしい為、ポリシーの確認画面にて「deny_all」のポリシーをマウスで下にずらし、一番最後に評価されるようにする。

設定内容が保存され「Policies」画面に戻る。deny_allのポリシーが一番下にいる事がわかる。

以下は「allow_slack_github_box」の設定内容。

以下は「cloudflare_board」の設定内容。

以下は「deny_all」の設定内容。

設定を終えたら画面内右上(macOSの場合)のWARPのアイコンをクリックし、設定内容を通信に反映させる。


接続確認
では早速、Azure内のゲストOSおよびWebアプリへの接続テストを実施する。
Block設定を入れたにも関わらず接続出来る場合はWarpにて接続を一旦無効にし、再度接続をONにする。
まずはAzure内のゲストOS(Ubuntu Linux)にSSHログインを試みる。正常にログイン出来た事を確認。

次にSlackのログイン画面へのアクセスを試みる。正常にアクセス出来た事およびログイン出来た事を確認。

続けて、Githubのログイン画面へのアクセスを試みる。正常にアクセス出来た事を確認。※ログインはしてません。

boxのログイン画面へのアクセスを試みる。正常にアクセス出来た事を確認。※ログインはしてません。

念の為、HTTPポリシー設定でAllowの対象ではなかったサイトへのアクセスを試みる。
YAMAPにアクセスしたところ、アクセスが拒否された。

尚、CiscoルータのACL設定のような「暗黙のdeny」やFW機器のデフォルト状態では全てdeny等といったものはCloudflare Zero TrustのGatewayポリシーには存在せず、ポリシー設定を入れない状態では全ての通信をAllowする。


ログの確認
上記にて実施した接続確認のログを見る。
Boad画面左側の「Logs」から「Gateway」に移る。
「Gateway Activity Log」のページにて、ポリシー設定した「Network」タブと「HTTP」タブにてログを確認する。
以下の画像内にて、Githubへのアクセスが「Allow」でログに残っている事が分かる。
ちなみにログの表示内容は、欄内の左側から「Host」「Email」「Action」「Request ID」「Time」を表す。EmailはCloudflare Zero Trustのユーザー登録する際に使用したもので、ユーザーIDのような役割を果たす。

更に探すと、Slackへのアクセスおよびboxが「Allow」でログに残っている事が分かる。

接続確認にてアクセスが拒否されたYAMAPのログも、きちんと残っている。

Azure内のゲストOS(Ubuntu Linux)にSSHログインした際のログも確認。
Networkポリシーで設定した為、「Network」タブ内から該当するログを探す。
送信元および宛先IPアドレスが黒塗りされた行が、今回Azure内のゲストOSへSSHログインした際のログである。
ログの表示内容は、欄内の左側から「Source IP」「Destination IP」「Action」「Request ID」「Time」を表す。

今回の要件では、GithubとSlackとbox以外はWebブラウザでアクセス出来ない為、当然の事ながらGoogleやOffice365等にもアクセス出来ません。
尚、接続内容がログに反映されるまで時間を要する事があるので注意。


今回はこれまで。
外部のサーバーへのSSHアクセスを許可するポリシーと複数のWebサービスのみアクセスを許可するポリシーを設定し、接続確認により設定したポリシーが正常に動作している事を確認出来た。
次回はDNSポリシーやもう少し詳細な内容のポリシーの設定を入れてみようと思う。


参照サイトや資料
Cloudflare Zero Trust公式ドキュメント
https://www.cloudflare.com/ja-jp/products/zero-trust/ Cloudflare Zero Trust
https://developers.cloudflare.com/cloudflare-one/ CloudflareDocs
https://developers.cloudflare.com/cloudflare-one/policies/filtering/ Gateway policies

参照サイト
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 クライアント側のセットアップ手順

Cloudflare Zero Trust関連の記事
https://debslink.hatenadiary.jp/entry/20221103/1667482863 Cloudflare Zero Trustを導入してみた - POC環境構築編
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を使用してみた