【Okta】OAuth 2.0 と鍵の自動ローテーションで構成する Org2Org プロビジョニング設定

はじめに


こんにちは、ネクストモード株式会社テクニカルサポート担当です。

本シリーズでは、各社の Okta テナントとグループ共通アプリを管理するテナントを連携する Hub & Spoke 構成を取り上げています。Org2Org を使った SSO の構築からユーザーのプロビジョニング、運用上のポリシー調整まで、3回に分けて紹介します。

前回の記事では、OIDC を利用した Org2Org 構成で、複数の Okta テナント間の SSO を実現しました。ただし、ユーザーは両方の Org に事前に作成しており、入社や異動に伴うユーザーの作成・更新はそれぞれの Org で行う必要がありました。

今回は、IdP Org から SP Org へユーザーをプロビジョニングすることで、こうした管理作業の自動化を目指します。接続には OAuth 2.0 と鍵の自動ローテーションを利用し、API トークンの未使用による失効や、手動での鍵管理に配慮した構成を紹介します。

本記事はシリーズの第2回です。各記事の内容は以下のとおりです。

OAuth 2.0 を利用する理由

プロビジョニング接続の認証方式には、API トークン方式と OAuth 2.0 方式の2つがあります。今回は OAuth 2.0 方式を利用します。

API トークン方式は、あらかじめ発行したトークンを設定して接続する方法です。ただし、Okta の API トークンは、使用するたびに有効期限が更新されますが、30日間使用されないと失効します。失効した場合は、トークンを再発行して設定し直す必要があります。

OAuth 2.0 方式では、継続的なプロビジョニングに API トークンを使わないため、未使用による失効を気にせず運用できます。また、公開鍵を URL から動的に取得する自動ローテーションにより、手動での鍵管理の負担も軽減できます。

SSO とプロビジョニングの認証方式は、個別に選択できます。例えば、SSO に SAML、プロビジョニングに OAuth 2.0 を利用する構成も可能です。

それでは、実際の設定方法を見ていきましょう。

 

設定方法


本記事でも、認証を担う Spoke 側のテナントを「IdP Org」、認証を委ねる Hub 側のテナントを「SP Org」と呼びます。

Provisioning 設定

  1. IdP Org 側の Org2Org アプリ「SP Org」の Provisioning タブから Configure API Integration をクリックします。
  2. Enable API integration にチェックを入れ、以下の設定とします。
    • Authentication Scheme:OAUTH Auto-Rotation(recommended)
    • Target Org Client ID:手順11で入力
    • Import Groups:チェックを外す
    • Client Public Key URL:Copy ボタンからURLをコピーします。この値は、手順6で SP Org 側の API Services アプリ「Org2Org-Provisioning」に設定します。
    Okta の Org2Org アプリの API 統合設定画面。認証方式に OAUTH Auto-Rotation を選択し、接続先へ設定する Client Public Key URL をコピーする箇所を示しています。

  3. SP Org 側で Applications から Create App Integration をクリックします。
  4. Classic experience タブ内の API Services を選択し、Next をクリックします。
    Okta のアプリ統合作成画面。Classic experience タブで API Services が選択されており、Next ボタンからプロビジョニング用アプリの作成へ進む状態を示しています。

  5. General Settings で以下のように設定し、Save をクリックします。
    • App integration name:Org2Org-Provisioning
    • Client definition:Use Okta-generated client ID
    Okta の API Services アプリ作成画面。アプリ名に Org2Org-Provisioning を入力し、Okta が生成するクライアント ID を使用する設定を示しています。
     
  6. SP Org 側で作成した API Services アプリ「Org2Org-Provisioning」の Public keys を編集し、Use a URL to fetch keys dynamically に手順2でコピーした Client Public Key URL を反映し、Save をクリックします。
    Okta の API Services アプリの公開鍵設定画面。URL から鍵を動的に取得する方式を選択し、IdP Org の Client Public Key URL を設定する箇所を示しています。
     
  7. Client Credentials を編集し、Client authentication は Public key / Private key を選択し、Save をクリックします。Client ID をコピーします。
    Okta の API Services アプリの Client Credentials 設定画面。クライアント認証に Public key / Private key を選択し、Client ID の確認箇所を示しています。

  8. Admin roles タブに遷移し、管理者権限を割り当てます。今回の検証では Super Administrator 権限を使用しましたが、本番環境では必要なロール・リソース範囲に制限しましょう。
    Okta の管理者ロール割り当て画面。検証用の API Services アプリに Super Administrator を選択した状態で、Save Changes ボタンから割り当てを保存します。

  9. Okta API Scopes タブに遷移し、以下の権限を付与します。
    • okta.users.manage
    • okta.groups.manage
    Okta の API Services アプリの Okta API Scopes 画面。okta.groups.manage と okta.users.manage の両スコープが Granted になっている状態を示しています。
     
  10. General タブに遷移し、General Settings 内の Proof of possession が以下のように有効になっていることを確認します。無効の場合は Edit をクリックして有効化し、Save をクリックします。
    Okta の API Services アプリの General Settings 画面。Proof of possession で、トークン要求に DPoP ヘッダーを必須とする設定が有効になっています。
     
  11. IdP Org 側の Org2Org アプリ「SP Org」の Provisioning タブに戻り Target Org Client ID に手順7でコピーした値を貼り付けし、Save をクリックします。
    Okta の Org2Org アプリの API 統合設定画面。OAUTH Auto-Rotation を選択し、SP Org 側の API Services アプリの Client ID を入力する箇所を示しています。

  12. 正常に設定が保存できた場合は Provisioning to App 設定画面が表示されます。
  13. Provisioning to App の Edit をクリックし、必要なオプション設定を選択し、Save をクリックします。以下は検証時の設定です。
    • Create Users:有効
    • Update User Attributes:有効
    • Deactivate Users:無効(本番運用では有効想定)
    • Sync User Password:有効
    • Password type:Sync Okta Password
    Okta の Org2Org アプリの Provisioning to App 設定画面。ユーザー作成・属性更新・パスワード同期は有効、無効化は無効で、Sync Okta Password が選択されています。
     
  14. Attribute Mappings の Initial status を編集します。検証では、すべてのユーザーに一律で同じ値を適用するため、以下のように設定して Save をクリックしました。
    • Same value for all users :active_with_pass
    Okta の Org2Org アプリの Initial status 編集画面。全ユーザーに同じ値を適用する設定で active_without_pass が選択され、適用タイミングは Create になっています。
     
  15. IdP Org 側の Org2Org アプリ「SP Org」に、SP Org にはまだ存在しないユーザーを割り当てます。SP Org 側の Directory > People を開き、ユーザーが作成されていることを確認します。

Initial status について

Initial status は、IdP Org から作成・リンク・再有効化されたユーザーが、SP Org 側でどのステータスになるかを決める属性です。今回の検証では、対象ユーザーを一律で同じ状態にしたかったため、「すべてのユーザーに同じ値」を選び、active_with_pass を指定しました。active_with_pass を指定すると、ユーザーはアクティブな状態で作成され、あわせて一時パスワードが発行されます。

今回は、手順13で Sync User Password を有効にし、Password type に Sync Okta Password を指定しています。この設定では、一時パスワードはユーザーのサインイン時に同期されたパスワードで上書きされます。本番環境では、想定するサインイン経路とあわせて動作を確認してください。

 

参考リンク


 

まとめ


今回は、Org2Org のプロビジョニング接続を OAuth 2.0 方式で構成し、鍵の自動ローテーションを有効にしました。API トークン方式のように、トークンが未使用のまま失効することを気にせず運用できます。

あわせて、Provisioning to App の設定と Initial status を確認し、IdP Org 側で割り当てたユーザーが SP Org 側に作成されることを確認しました。

次は運用編として、認証・登録ポリシーと再認証の調整を扱います。SP Org 側で追加の認証や Authenticator 登録が求められる場合の対処を紹介する予定です。

Okta に関するお問い合わせ

「グループ会社のユーザー管理をどこまで自動化できるか知りたい」「Org2Org の構成や運用を自社の環境に合わせて検討したい」とお考えの方は、ぜひネクストモードへご相談ください。