LoginSignup
4
4

Cloudflare Zero Trustのユーザ認証をSAMLで

Last updated at Posted at 2023-08-06

はじめに

Cloudflare Zero Trust(以降Cloudflareという)は手軽にZTNAを展開できるサービスで無料から使えます。

Webサービスであれば、リダイレクトでユーザ認証画面を表示して外部からでもセキュアにアクセスできます。

Cloudflareで用意しているユーザ認証方法は大きく以下3種類に分かれています。

  • ワンタイムPIN認証(メールアドレスのみの認証)
  • SAML認証
  • OIDC認証

Cloudflare単独だとワンタイムPIN認証しか利用できませんが、IDaaSと組み合わせることでSAML認証、OIDC認証が利用できます。
これにより、二要素認証やリスクベース認証などの高度な認証を取り入れることができます。

今回は、同じく手軽に使えるJumpCloudというIDaaSを使って、
CloudflareのWebアクセスをSAML認証でJumpCloudに飛ばしてそちらで認証できるかを検証しました。
また、SAML認証でグループ情報も渡して特定のグループにいるユーザのみがアクセスできるかも合わせて試してみます。

構成

構成は以下の通りです。

Cloudflare.png

外部からオンプレWebサーバ(web.example.com)へのアクセスをCloudflare Tunnel経由でアクセスするように設定。
さらに、アクセス時にJumpCloudの認証が必要と設定します。

こうすることでCloudflareがSAML SPとして動作し、IdP(JumpCloud)へ認証するようにリダイレクトしてくれます。
認証完了すれば再度CloudflareにリダイレクトされてオンプレWebサーバにアクセスできるようになります。

オンプレWebサーバとCloudflare Tunnelの構築については割愛しますが、公式ドキュメントにある通り、簡単に作成できます。

設定

設定の流れは以下の通り

  1. CloudflareのSPメタデータを取得
  2. JumpCloudでSAML IdP設定してIdPメタデータ取得
  3. CloudflareでSAML SP設定
  4. 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 attributeenableにしてmemberOfを指定

作成後、作成した設定のSSOタブより、Export MetadataよりIdPメタデータをダウンロードしておく。

3. CloudflareでSAML SP設定

Cloudflareダッシュボードより、IdPメタデータのインポートおよびSPの設定を行います。

Settings -> Authentication -> Login methods -> Add Newより、SAMLを選択します。

IdPメタデータを選択できる場所があるので、そこに先ほど取得したIdPメタデータをアップロードすると諸々のパラメータが自動入力されます。

SAML attributesは自分で入力しないといけないので以下項目を追加します。

  • email
  • username
  • name
  • firstname
  • lastname
  • memberOf

この状態でCloudflareからテストを行うことができ、以下のような出力が出れば成功です。

image.png

4. Cloudflareでアプリケーションの認証ポリシーを設定

まず事前に作成した、アプリケーションにてSAML認証ができるように設定します。

Authenticationタブにて、作成した認証を選択する。
JumpCloudのみ認証可能とするため、Accept all available identity providersはチェックを外しておき、Instant Authにチェックをつけておく。

image.png

次に、アクセス許可したいグループのみ認証ができるように設定します。
Policiesより、作成したポリシーアイテムを選択し、Create additional rulesで以下画像のようなアクセス許可したいSAMLグループに所属しているユーザのみ認証するように設定します。

image.png

検証

実際に外部より、オンプレWebサーバのURLにアクセスするとJumpCloudの認証画面にリダイレクトされました。
ここで、アクセス許可したいグループに所属しているユーザでログインすると再度リダイレクトされて、Webページが表示されました。

image.png

今度は、アクセス許可したいグループに所属していないユーザでログインをします。
すると、認証後Cloudflare側で権限がない旨表示されてアクセスが拒否されました。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3333353235352f32333733613436382d666566352d656261312d393031332d3239373533356536386536652e706e67.png

おわりに

JumpCloudでCloudflareのSAMLテンプレートがあったため、思ったより簡単にSAML連携をすることができました。

今回は、ユーザ、パスワードのみの認証ですがJumpCloudはスマホアプリなどによる二要素認証も用意されており、とても高機能です。
(高機能すぎて、まだ全機能を把握しきれていない...)

Cloudflare、JumpCloudともに無料から始めることができるので個人でZero Trustを試すにはピッタリなサービスだと思います。

今後も自宅環境で検証していき、自宅ゼロトラスト化を進めていきます!

参考URL

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4