ロール・ベースのアクセス制御のIAM接続

このトピックでは、JSON Web Token (JWT)カスタム・クレームを使用してロール・ベースのアクセス制御を可能にするドメイン統合アプリケーションを準備する方法に関するIT管理の手順について説明します。これにより、ドメイン・ユーザーはスキーマ・パスワードではなく、ドメイン資格証明を使用してデータベースにログインできるようになります。

この章では、ドメイン・ユーザーがスキーマ固有のパスワードを使用するのではなく、ドメイン資格証明を使用してデータベースに対して認証できるようにします。

JWTカスタム・クレームでロール・ベースのアクセス制御を可能にするドメイン統合アプリケーションを作成するには、次を実行する必要があります:

ノート:

この章では、Defaultドメインを使用しますが、任意のドメインを選択できます。

ユーザーに対するカスタム属性の作成

エンティティ属性はエンティティのプロパティです。ユーザー・エンティティに関する情報は、名、姓、ユーザー・ログイン、パスワードなどの属性の形で格納されます。OCIを使用してカスタム属性を作成できます。まず、ドメイン内の各ユーザーに割り当てられるロールを格納するのに役立つカスタム・ユーザー属性を定義します。
  1. 「アイデンティティ」「ドメイン」「デフォルト」の順にナビゲートします。「スキーマ管理」タブをクリックし、「ユーザー属性」を選択します。
  2. 「ユーザー属性」の下の「属性の追加」をクリックします。



  3. 「属性の追加」ダイアログで、次のフィールドを指定します:
    • 表示名: ORDS RBAC
    • 名前: rbac_ords
    • 説明: Role Based Access Control for ORDS
    • データ型: 文字列配列

    残りのフィールドは、デフォルト状態のままにしておくことができます。



    「追加」をクリックします。カスタム属性が追加されました。

  4. 検索フィールドに「カスタム」と入力して、新しく追加した属性を検索します。リストにORDS RBAC属性が表示されます。



    「属性の編集」をクリックします

  5. 「FQN」(完全修飾名)の値をコピーして書き留めます。



    この例では、FQNurn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ordsです。

カスタム・ロールの割当て

カスタム・ユーザー属性を作成したら、その属性フィールド内でカスタム・ロールの割当てに進むことができます。
  1. 「アイデンティティ」「ドメイン」「デフォルト」の順にナビゲートします。「ユーザー管理」タブをクリックし、表示されるユーザーのリストからユーザー名を選択します。



    「ユーザーの編集」をクリックします。「その他の情報」フィールドまでスクロールし、「ORDS RBAC」の下に「SQL Developer, SODA Developer」と入力します。

    ORDSロールの詳細は、「Oracle REST Data Servicesのユーザー・ロールについて」でこの章を参照してください。



    ロールを追加したら、「変更の保存」をクリックします。

ドメイン統合アプリケーションの作成

サインイン時にJWTトークンを発行する統合アプリケーションをドメイン内に開発します。

  1. 「アイデンティティ」「ドメイン」「デフォルト」の順にナビゲートします。「統合アプリケーション」タブをクリックし、「アプリケーションの追加」を選択します。
  2. 「機密アプリケーション」をクリックし、「ワークフローの起動」を選択します。
  3. 機密アプリケーションの追加ダイアログで、次のフィールドを指定します:
    • 名前: 機密アプリケーションの名前を入力します。たとえば、「Spreadsheet-Addin RBAC」です。
    • 説明: 説明を入力します。たとえば、「スプレッドシート・アドイン・ロール・ベースのアクセス制御のための統合アプリケーション」です。



    「送信」をクリックします。

    新しく追加したSpreadsheet-Addin RBACアプリケーション・ページが表示されます。

  4. 「Spreadsheet-Addin RBAC」ページの「OAuth構成」タブで、「OAuth構成の編集」をクリックします。



  5. 「リソース・サーバー構成」で、「このアプリケーションをリソース・サーバーとして今すぐ構成します」を選択します。
  6. 「OAuthで保護する必要のあるアプリケーションAPIを構成します」で、「アクセス・トークンの有効期限(秒)」で「3600」を選択します。
  7. 「プライマリ・オーディエンス」フィールドに、「ssaddin/」と入力します。
  8. 「スコープの追加」をクリックし、rbacスコープを追加します。



  9. 「クライアント構成」で、次のフィールドを指定します:
    • 「このアプリケーションをクライアントとして今すぐ構成します」を選択します
    • 「許可される権限付与タイプ」「暗黙的」を選択します。
    • 「リダイレクトURL」フィールドに次の値を入力します: https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html
    • 「ログアウト後のURL」フィールドに次の値を入力します: https://static.oracle.com/cdn/spreadsheet/red-4/redirector.html



    「送信」をクリックします。

    ノート:

    アプリケーションをアクティブ化していることを確認します。

カスタム・クレームの定義

JWT内にユーザー・ロールを含めるには、最初の項で設定したカスタム属性を、カスタム・クレームを使用してJWTにマップする必要があります。

これを実現するには、一時的な統合アプリケーションを追加で作成し、それを通してカスタム・クレームをアタッチする必要があります。

アイデンティティ・ドメイン統合アプリケーションの作成

一時的な統合アプリケーションを追加で作成します:
  1. 「アイデンティティ」「ドメイン」「デフォルト」の順にナビゲートします。
  2. 「統合アプリケーション」タブをクリックし、「アプリケーションの追加」を選択します。
  3. 「機密アプリケーション」をクリックし、「ワークフローの起動」を選択します。
    • アプリケーションの名前を入力します: 「Identity domain integrated application」
    • 「説明」を入力します: 「これはドメイン統合アプリケーションです。」

    「送信」をクリックします。

  4. 「Identity domain integrated application」ページで、「OAuth構成」タブを選択します。
  5. 「リソース・サーバー構成」「OAuth構成の編集」をクリックします。「OAuth構成の編集」ダイアログで、次のフィールドを指定します:
    • 「クライアント構成」で、デフォルト値「このアプリケーションをクライアントとして今すぐ構成します」を選択します。
    • 「認可」で、「クライアント資格証明」を選択します。残りの構成は、デフォルト状態のままにします。
    • 「アプリケーション・ロールの追加」を選択します。



    • 「アプリケーション・ロールの追加」ダイアログで、「アイデンティティ・ドメイン管理者」をクリックし、「追加」を選択します。



    • アプリケーション・ロールを追加したら、「送信」をクリックします。
    • アプリケーションをアクティブ化します。

      ノート:

      統合アプリケーションの「一般情報」セクションの「クライアントID」および「クライアント・シークレット」を必ず書き留めます。



JWTトークン用の新しいクレームの作成

「アイデンティティ・ドメイン管理者」アプリケーションの新しいアクセス・トークンを取得するには、CLIENT IDCLIENT SECRETおよびDOMAIN URLが必要です。

前のステップで作成したドメイン統合アプリケーションのCLIENT IDおよびCLIENT SECRETを保有しています。

DOMAIN URLは、ドメイン・ページの「ドメイン情報」にあります。



次のコマンドを実行し、値(CLIENT ID)(CLIENT SECRET)および(DOMAIN URL)を実際の値に置き換えます。

export ACCESS_TOKEN=$(curl -s -i -u"(CLIENT ID):(CLIENT SECRET)" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST (DOMAIN URL)/oauth2/v1/token -d
      "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" | tail -n +1 | grep -o
      '"access_token":"[^"]*' | cut -d'"' -f4)
この例では、次の値を使用します:
  • Client ID: 123a1234e1234567aa12345a1abcdefg1
  • Client Secret: idcscs-12a1a123-a123-1234-1234-e1a05aabc123
  • Domain URL: https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443
Bashシェルで次のコードを実行し、それに応じてプレースホルダ値を置き換えます:
export ACCESS_TOKEN=$(curl -s -i -u"123a1234e1234567aa12345a1abcdefg1: idcscs-12a1a123-a123-1234-1234-e1a05aabc123" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://idcs-a123ab1ab12a4bb99a9aa9ab99aabbb9.identity.oraclecloud.com:443/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" |
          tail -n +1 | grep -o '"access_token":"[^"]*' | cut -d'"'
        -f4)
 
トークンが正常に取得されたことを確認するには、次のコマンドを実行して、表示されたトークンを確認します。
echo $ACCESS_TOKEN

次の図は、前述のコマンドがBashシェルでどのように表示されるかを示しています。



英数字を含む複数の(10を超える)行で構成される出力が表示されます。

(ROLE CLAIM NAME)としてssaddin.roleを、(MODIFIED FQN)としてurn:ietf:params:scim:schemas:idcs:extension:custom:User.rbac_ordsを指定して、次のコマンドを実行します:

ノート:

ステップ1のFQNを使用して、最後の":"を"."に置き換えます。

たとえば、ステップ1のFQNは次のとおりです:

urn:ietf:params:scim:schemas:idcs:extension:custom:User:rbac_ords

したがって、MODIFIED FQNは次のようになります:

urn:ietf:params:scim:schemas:idcs:extension:custom:User.rbac_ords
curl -i -X POST (DOMAIN URL)/admin/v1/CustomClaims -H"Cache-Control: no-cache" -H"Accept:application/json" -H"Content-Type:application/json" -H"Authorization: Bearer $ACCESS_TOKEN" -d '{
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:CustomClaim"
    ],
    "name": "(ROLE CLAIM NAME)",
    "value": "$user.(MODIFIED FQN).*",     
    "expression": true,
    "mode": "always",
    "tokenType": "AT",
    "allScopes": false,
    "scopes": [
    "ssaddin/rbac"
  ]
}'

ノート:

Domain URLを前述のコードの実際の値に置き換えます。

次の出力が表示されます: HTTP/1.1 201 Created

Autonomous DatabaseスキーマのRBAC IAMログインの有効化

次の手順では、ORDSでJWT Bearerトークンを検証し、保護されたリソースへのアクセス権を付与できます。
  1. SQLワークシートの「ナビゲータ」タブで、「スキーマ」ドロップダウン・リストから「ORDS_METADATA」を選択します。
  2. 「オブジェクト・タイプ」ドロップダウン・リストから「パッケージ」を選択します。
  3. 「検索」フィールドに「ORDS_SECURITY」と入力します。検索機能により、ORDS_SECURITYで始まるすべてのエントリが取得されます。
  4. ORDS_SECURITYパッケージを展開します。



  5. 「CREATE_JWT_PROFILE」を右クリックし、「実行」をクリックします。これにより、「実行コード」ダイアログが開きます。
    「実行コード」ダイアログで、次のフィールド値を指定します:
    • P_ISSUER - https://identity.oraclecloud.com/。このフィールドはnull以外の値である必要があり、一重引用符で囲んで入力する必要があります。
    • P_AUDIENCE - ssaddin/。このフィールドはnull以外の値である必要があります。
    • P_JWK_URL - DOMAIN URL/admin/v1/SigningCert/jwkを付加します。https:// で始まるnull以外の値である必要があり、この値により、認可サーバーによってJSON Web Key (JWK)形式で提供された公開検証キーを識別します。

      ドメインURLは、OCIコンソールの「アイデンティティとセキュリティ」ナビゲーション・メニューの「ドメイン」メニューにある「ドメイン情報」タブで確認できます。

    • P_DESCRIPTION - このプロファイルの説明を入力します。たとえば、「RBAC JWT Demo confluence」です。
    • P_ALLOWED_AGE - ゼロ(0)
    • P_ALLOWED_SKEW - ゼロ(0)
    • P_ROLE_CLAIM_NAME - 「ssaddin.role」

    「ワークシートにコードを挿入」をクリックします。



    プロシージャを実行します。



    出力パネルに「PL/SQLプロシージャが正常に完了しました。」と表示されます。

接続の作成

  1. 接続を追加するには、「接続」ペインのヘッダーにある「追加」ボタンをクリックします。「新規接続を追加」ダイアログ・ボックスが開きます。

  2. 「新規接続を追加」ダイアログ・ボックスで、次のフィールドを指定します:
    • 接続名: 接続の名前を入力します。
    • Autonomous DatabaseのURL: 接続先のAutonomous DatabaseのURLを入力します。Autonomous DatabaseのWeb UIからURL全体をコピーします。たとえば、「https://<hostname>-<databasename>.adb.<region>.oraclecloudapps.com/」というリンクを入力またはコピーしてデータベースに接続します。
    • スキーマ名: 「Autonomous DatabaseスキーマのIAMログインの有効化」に使用するのと同じスキーマを入力します。
    • 接続タイプOCI IAMを選択します
    • ドメインURL: ドメイン情報タブの「ドメインURL」を入力します。
    • RBAC IAMタイプを選択します。
    • IAMスコープ: ssaddin/rbac



作成された接続は、このドメインの他のユーザーと共有できます。