はじめに
Cloudflare Zero Trust(以降Cloudflareという)は手軽にZTNAを展開できるサービスで無料から使えます。
Webサービスであれば、リダイレクトでユーザ認証画面を表示して外部からでもセキュアにアクセスできます。
Cloudflareで用意しているユーザ認証方法は大きく以下3種類に分かれています。
- ワンタイムPIN認証(メールアドレスのみの認証)
- SAML認証
- OIDC認証
Cloudflare単独だとワンタイムPIN認証しか利用できませんが、IDaaSと組み合わせることでSAML認証、OIDC認証が利用できます。
これにより、二要素認証やリスクベース認証などの高度な認証を取り入れることができます。
今回は、同じく手軽に使えるJumpCloudというIDaaSを使って、
CloudflareのWebアクセスをSAML認証でJumpCloudに飛ばしてそちらで認証できるかを検証しました。
また、SAML認証でグループ情報も渡して特定のグループにいるユーザのみがアクセスできるかも合わせて試してみます。
構成
構成は以下の通りです。
外部からオンプレWebサーバ(web.example.com)へのアクセスをCloudflare Tunnel経由でアクセスするように設定。
さらに、アクセス時にJumpCloudの認証が必要
と設定します。
こうすることでCloudflareがSAML SPとして動作し、IdP(JumpCloud)へ認証するようにリダイレクトしてくれます。
認証完了すれば再度CloudflareにリダイレクトされてオンプレWebサーバにアクセスできるようになります。
オンプレWebサーバとCloudflare Tunnelの構築については割愛しますが、公式ドキュメントにある通り、簡単に作成できます。
設定
設定の流れは以下の通り
- CloudflareのSPメタデータを取得
- JumpCloudでSAML IdP設定してIdPメタデータ取得
- CloudflareでSAML SP設定
- Cloudflareでアプリケーションの認証ポリシーを設定
ちなみに事前に以下設定はされている状態としておきます。
- JumpCloud
- アクセス許可したいグループ作成
- ユーザを作成して、アクセス許可したいグループに割り当て
- Cloudflare
- アクセス対象アプリケーション作成
- Cloudflareトンネル経由で上記アプリケーションまでのアクセスができている
1. CloudflareのSPメタデータを取得
SPメタデータは以下URLから取得できるため、事前にアクセスして出力されるXMLファイルを保存しておく。
https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/saml-metadata
2. JumpCloudでSAML IdP設定してIdPメタデータ取得
JumpCloudダッシュボードより、SAML設定を行います。
SSO
-> Add New Application
より、Cloudflare
のテンプレートがあるので以下内容にて作成する。
項目 | 設定内容 |
---|---|
Service Provider Metadata | 先ほどダウンロードしたSPメタデータ |
IdP Entry ID | <your-team-name>.cloudflareaccess.com |
SP Entity ID | https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback |
Group Attribute |
include group attribute をenable にしてmemberOf を指定 |
作成後、作成した設定のSSO
タブより、Export Metadata
よりIdPメタデータをダウンロードしておく。
3. CloudflareでSAML SP設定
Cloudflareダッシュボードより、IdPメタデータのインポートおよびSPの設定を行います。
Settings
-> Authentication
-> Login methods
-> Add New
より、SAML
を選択します。
IdPメタデータを選択できる場所があるので、そこに先ほど取得したIdPメタデータをアップロードすると諸々のパラメータが自動入力されます。
SAML attributes
は自分で入力しないといけないので以下項目を追加します。
- username
- name
- firstname
- lastname
- memberOf
この状態でCloudflareからテストを行うことができ、以下のような出力が出れば成功です。
4. Cloudflareでアプリケーションの認証ポリシーを設定
まず事前に作成した、アプリケーションにてSAML認証ができるように設定します。
Authentication
タブにて、作成した認証を選択する。
JumpCloudのみ認証可能とするため、Accept all available identity providers
はチェックを外しておき、Instant Auth
にチェックをつけておく。
次に、アクセス許可したいグループのみ認証ができるように設定します。
Policies
より、作成したポリシーアイテムを選択し、Create additional rulesで以下画像のようなアクセス許可したいSAMLグループに所属しているユーザのみ認証するように設定します。
検証
実際に外部より、オンプレWebサーバのURLにアクセスするとJumpCloudの認証画面にリダイレクトされました。
ここで、アクセス許可したいグループに所属しているユーザでログインすると再度リダイレクトされて、Webページが表示されました。
今度は、アクセス許可したいグループに所属していないユーザでログインをします。
すると、認証後Cloudflare側で権限がない旨表示されてアクセスが拒否されました。
おわりに
JumpCloudでCloudflareのSAMLテンプレートがあったため、思ったより簡単にSAML連携をすることができました。
今回は、ユーザ、パスワードのみの認証ですがJumpCloudはスマホアプリなどによる二要素認証も用意されており、とても高機能です。
(高機能すぎて、まだ全機能を把握しきれていない...)
Cloudflare、JumpCloudともに無料から始めることができるので個人でZero Trustを試すにはピッタリなサービスだと思います。
今後も自宅環境で検証していき、自宅ゼロトラスト化を進めていきます!