皆さん、こんにちは!
本記事ではOIDC、SAMLを利用したCloudflareとOktaの連携手順を紹介します。
OktaではOpenID Connect(OIDC)とSAMLに対応しています。Cloudflareでは、IdPがOIDC と SAML の両方に対応している場合、設定の容易さからOIDCを推奨しています。
参考としてSAMLを用いた連携手順も記載していますが、不要な場合は4~5章の項目は読み飛ばしていただいても特に問題ありません。
https://developers.cloudflare.com/cloudflare-one/integrations/identity-providers
※CloudflareはUIの更新が多いため、ボタン配置が多少前後している場合があります。
1. Okta無料アカウントを用意
本記事では Okta の無料プラン「Okta Integrator Free Plan org」を使用します。
※Okta VerifyをAndroid/iPhoneともにスマートフォンにインストールする必要あり
サインアップして、Admin Console 画面に入れていればOKです。(最初のセットアップウィザードはスキップしても問題ありません)
2. Okta側:Cloudflare用のOIDCアプリを作成
2-1. OIDCアプリを作る
Admin Consoleのナビゲーションウィンドウを開きます

「アプリケーション」⇒「アプリケーション」を選択

[アプリ統合を作成]をクリック

下記を選択して[次へ]をクリック
| 設定 | 値 |
|---|---|
| サインイン方法 | OIDC – OpenID Connect |
| アプリケーションタイプ | Webアプリケーション |

下記を選択して[保存]をクリック
<team-name> は Zero Trust ダッシュボードの「設定」⇒「カスタムページ」に表示されるチームドメインの先頭(サブドメイン部分)に置き換えます。
例:チームドメインが example.cloudflareaccess.com の場合、<team-name> は example
| 設定 | 値 |
|---|---|
| アプリ統合名 |
自分が判別しやすい名前 例:Cloudflare Zero Trust (OIDC) |
| サインインリダイレクトURI | https://<team-name>.cloudflareaccess.com/cdn-cgi/access/callback |

遷移先のページで下記をメモ帳等にコピーして控えます。(Cloudflare側の設定に必要な値です)
- クライアントID
- クライアントシークレット

上記2点の他、Okta アカウント URLが必要なので、確認してこれもメモ帳に控えておきます。
管理画面右上のユーザー名をクリックし、ドロップダウンに自分の okta.com のFQDNが表示されますのでこれをコピーします。

このコピーしたFQDNに https:// を先頭に付けたものがCloudflare側で入力するOkta アカウント URL になります。
2-2. 認証に使うユーザーを割り当てる
作成したアプリの「割り当て」タブを選択し、「割り当て」⇒「ユーザーに割り当て」を選択。

今回は検証用途なので、自分のアカウントに対して「割り当て」を選択し、遷移先の画面で[保存して戻る]をクリック。その後[完了]をクリック



3. Cloudflare Zero Trust 側:Okta(OIDC)を追加
3-1. 認証方法追加画面
Cloudflare ダッシュボードから 「Zero Trust」 を開き、左メニューで、「設定」 → 「認証」 → 「ログイン方法」の[新規追加]をクリック。


「Okta」を選択

3-2. Oktaからコピーした値を入力
下記を入力し、下にスクロールし[保存]をクリック
| Cloudflare 項目 | 入れる値(Okta側から) |
|---|---|
| アプリID | OktaのクライアントID |
| クライアントシークレット | Oktaのクライアントシークレット |
| Okta アカウント URL | Okta アカウント URL |

4. Okta側:Cloudflare用のSAMLアプリを作成
※IdPをOIDCで動作させる場合は不要です
4-1. SAMLアプリを作る
SAML連携に必要な値や基本的な流れはCloudflareの公式ドキュメントにも記載されています。
https://developers.cloudflare.com/cloudflare-one/integrations/identity-providers/okta-saml/
Admin Consoleのナビゲーションウィンドウを開きます

「アプリケーション」⇒「アプリケーション」を選択

[アプリ統合を作成]をクリック

「SAML 2.0」を選択して[次へ]をクリック

アプリ名に任意の名前を入れて[次へ]をクリック

4-2. SAML設定をCloudflare向けに入れる
Cloudflare公式のOkta SAMLドキュメントを意訳すると、このように説明しています。
Single sign on URL と Audience URI (SP Entity ID) に、
https://team-name.cloudflareaccess.com/cdn-cgi/access/callbackを両方とも入れる。
したがって、SAML 設定では、Single sign-on URL と Audience URI は同じ値を入力します。以下のように入力していきます。
- Single sign on URL(シングルサインオンURL )
- https://<team-name>.cloudflareaccess.com/cdn-cgi/access/callback
- Audience URI (SP Entity ID)(オーディエンスURI(SPエンティティID) )
- https://<team-name>.cloudflareaccess.com/cdn-cgi/access/callback
- その下の Attribute Statements (属性ステートメント(オプション))を設定
-
Name:
email -
Value:
user.email -
もしグループも使いたい場合はグループ属性ステートメントに以下を入力します。
- Name:
groups - Filter:
Matches regex+.*(全部のグループを送る)
- Name:
-
<team-name> は Zero Trust ダッシュボードの「設定」⇒「カスタムページ」に表示されるチームドメインの先頭(サブドメイン部分)に置き換えます。
例:チームドメインが example.cloudflareaccess.com の場合、<team-name> は example

上記を入力したら画面下までスクロールして[次へ]をクリック

「これは当社で作成した社内アプリです」を選択して[終了]をクリック

4-3. 認証に使うユーザーを割り当てる
作成したアプリの「割り当て」タブを選択し、「割り当て」⇒「ユーザーに割り当て」を選択。

今回は検証用途なので自分のアカウントに対して「割り当て」を選択し、遷移先の画面で[保存して戻る]をクリック。その後[完了]をクリック



4-4. Cloudflare側で使うSAML情報を取得
「サインオン」タブを開き、画面右側にある[SAML の設定手順を表示]をクリック。

開いたページに表示されている以下の3つをメモ帳等にコピー&ペーストして控えます。
- Identity Provider Single Sign-On URL
- Identity Provider Issuer
- X.509 Certificate
これらはCloudflare Zero Trust側の IdP 設定にそのまま入力します。

5. Cloudflare Zero Trust 側:Oktaを IdP として登録
5-1. IdP追加画面
Cloudflare ダッシュボードから 「Zero Trust」 を開き、左メニューで、「設定」 → 「認証」 → 「ログイン方法」の[新規追加]をクリック。


「SAML」を選択

5-2. Oktaからコピーした値を入力
以下を入力して[保存]をクリック
| Cloudflare 項目 | 入れる値(Okta側から) |
|---|---|
| 名前 |
任意の名前 |
| シングル サインオン URI | Okta のIdentity Provider Single Sign-On URL |
| IdP エンティティ ID または発行者 URL | Okta のIdentity Provider Issuer |
| 署名証明書 |
Okta のX.509 Certificate |
| SAML 認証リクエストに署名する | オンに設定 |
証明書は「-----BEGIN CERTIFICATE-----」から「-----END CERTIFICATE-----」までをそのままコピー&ペーストします。


6. 接続テスト
ここからは実際にWARPクライアントから、SAMLを利用してZero Trustにログインしてみます。
WARP クライアントを開き、[Preferences] を選択します。
※日本語版の場合は[環境設定]を選択します。

左メニューの [Account](アカウント) を選択し、[Cloudflare Zero Trust にログイン]をクリック

チーム名を入力し、[OK]をクリック

チーム名はOIDC、SAML設定時と同じく、Zero Trust ダッシュボードの「設定」⇒「カスタムページ」のチームドメインから確認できます。
サインイン画面がブラウザで表示されるので、先ほど作成した「Okta」もしくは「SAML・SAML-Okta」(名前は例)をクリック。
※ ここに表示される名称は、Cloudflare側で設定したIdP名により異なります。
以下のような画面に遷移すれば連携自体は成功しています。後はユーザー情報が正しく連携出来ているかの確認です。

その後、画面に従ってユーザ名と、パスワード、Okta Verify のワンタイムパスワードを入力します。
ログインに成功するとSuccessページが表示されます。Success ページが表示されていれば、Okta を利用したログインは正常に完了しています。
