※ 本記事は、GK (Gopi Krishna) Goallaによる”OCI IAM RADIUS Proxy (Part 2) – How-To Configure Multi-factor Authentication (MFA) for Oracle Databases“を翻訳したものです。

2023年9月15日


お帰りなさい。これは、データベースのマルチファクタ認証(MFA)のトピックを中心としたブログ投稿シリーズのパート2です。前のブログ投稿(パート1)では、OCI IAM RADIUSプロキシを使用したOracle DatabasesのMFAの概要とデモをご覧いただけます。

次に、このトピックの実際的な実装の側面に焦点を移しましょう。このブログ投稿では、OCIアイデンティティ・ドメインとOracle Databaseサーバーの両方で完了する必要がある必要な構成について確認します。

始める前に:

  • 管理権限を持つOCIアイデンティティ・ドメイン・コンソールにアクセスできることを確認してください。
  • RADIUSプロキシ機能を使用するには、アイデンティティ・ドメインのタイプが「Oracle Apps Premium」または「Premium」である必要があります。
  • OCIアイデンティティ・ドメインAPIコールを起動するPostmanユーティリティを準備します。(https://www.postman.com/ からダウンロードできます)
  • データベースのIPアドレスはすぐに使用可能にしておきます。
  • RADIUSプロキシをデプロイするため、インストールするLinuxホストのIPアドレスは、その操作に必要なポート(デフォルトは1812)とともにLinux OSとのみ互換性があることに注意してください。
    • ノート: RADIUSプロキシをデータベース・サーバーと同じホストで実行することは技術的には可能ですが、特に本番環境では、ベスト・プラクティス用に別の専用マシンでホストすることをお薦めします。このブログ投稿では、データベースとRADIUSプロキシが別のマシンで設定されています。
  • RADIUSプロキシをインストールするLinuxホストへのrootまたはsudoアクセス権があることを確認してください。

 

タスクのサマリー:

OCIアイデンティティ・ドメイン:

  • OCIアイデンティティ・ドメインでのOracle Database Radiusアプリケーションのオンボード
  • OCIアイデンティティ・ドメインAPIコールを使用して、RADIUSプロキシおよびリスナー定義を作成およびアクティブ化します。
  • LinuxホストにRADIUSプロキシをインストールします。
  • OCIアイデンティティ・ドメインでOracle Database RADIUSアプリケーションのマルチファクタ認証(MFA)を構成します。

Oracle Database:

  • Oracle DatabaseサーバーでRADIUS認証およびMFAを有効にします。

 

OCIアイデンティティ・ドメイン内のOracle Database RADIUSアプリケーションのオンボード

  1. OCIクラウド・アカウントまたはテナンシにログインします。
  2. 左上隅にあるハンバーガー・メニューを選択し、「Identity & Security」->「Identity」->「Domains」に進みます。
  3. テナンシ内のアイデンティティ・ドメインのリストが表示されます。
  4. この統合に使用する特定のアイデンティティ・ドメインを選択します。ドメイン・タイプは”Oracle Apps Premium”または”Premium”にする必要があります。

    part2-mfa-db-1

     

  5. Identity Domain」ページで、左側の「Integrated Applications」->「Add Application」に移動します。「Add Application」ウィンドウに表示されるオプションのリストから「App Catalog」を選択し、「Launch app catalog」をクリックします。

    part2-mfa-db-2

     

  6. 「Application Catalog」ページで、「Oracle Database RADIUS App Template」を検索し、次に示すようにRADIUSアプリケーション・テンプレートを選択します。

    part2-mfa-db-2

     

  7. 次の詳細を指定してアプリケーションを追加します。
  • Name: RADIUSアプリケーションの名前を入力します。
  • Description: オプション・フィールド。

           「Radius Settings」セクションで、次の詳細を入力します。

  • IP address of Oracle Database Server – これは、Oracle Databaseが実行されているIPアドレスです。
  • Port of RADIUS proxy – デフォルトは1812です。これは、RADIUSプロキシがデータベースからのリクエストをリスニングするポートです。Oracle Database (sqlnet.ora)のRADIUS設定で同じポート番号が指定されます
  • Secret Key – 秘密キーは、RADIUSプロキシとOracle Databaseサーバー間の信頼メカニズムおよびセキュアな通信を確立するために使用されます。同じキーを Oracle DatabaseサーバーのRADIUS設定で構成するようにしてください。

その他のフィールドはデフォルトのままにできます。
ノート: ご覧のとおり、アプリケーション定義でLinuxホストのIPアドレスを指定した場所はありません。これについては、後で説明します。

8. 「Create Application」をクリックし、アプリケーションをアクティブ化します。次のようになります。

part2-mfa-db-4

part2-mfa-db-5

9. 次に示すように、Oracle Databaseへのサインインを許可するユーザーを割り当てます。

part2-mfa-db-6

   Optional: 個々のユーザーを割り当てるかわりに、グループをアプリケーションに割り当てることができます。「Groups」をクリックして、1つまたは複数のグループを割り当てます。

part2-mfa-db-7

   ノート: グループ名は、特定の形式 ORA_databaseSID_rolename[_[A] | [D]] である必要があります

  • databaseSID – データベースのinit.oraファイルで構成されているOracle DatabaseのSID。
  • rolename – フラグ「IDENTIFIED EXTERNALLY」を使用して、データベースで作成したロールの名前。たとえば、myCustomRoleです。
  • sql> create role myCustomRole identified externally;
  • sql> grant create session to myCustomRole;
  • A – ユーザーがこのロールの管理権限を持っていることを示すオプションの文字。
  • D – このロールをデフォルトで有効にすることを示すオプションの文字。

Oracleデータベース内のEXTERNALロールごとに、OCIアイデンティティ・ドメインによって識別されるように、前述の形式を使用して対応するグループを作成します。各データベース・ユーザーがそれぞれのデータベース・ロールに関連付けられるように、ユーザーをOCIアイデンティティ・ドメインのこのグループに割り当てます。

 

RadiusプロキシおよびRadiusプロキシ・リスナー定義の作成:

アイデンティティ・ドメインにConfidential Application (OAuth)を作成:

アイデンティティ・ドメインREST APIを呼び出すには、適切なOAuthクライアント資格証明が必要です。Confidential Applicationを作成します。

  1. アイデンティティ・ドメインにconfidential applicationを作成し、このアプリケーションで次の設定を行うようにします。
  • Grant type: client credentials
  • Grant “Identity Domain Administrator” role. 

2. confidential applicationをアクティブ化し、クライアントIDとクライアント・シークレットを手元に保持します。

ノート: Identity Cloud Service管理APIへのアクセス権を持つconfidential (OAuth) applicationがすでにある場合、このステップはオプションです。

PostmanでOCIアイデンティティ・ドメインAPIコレクションをインポート:

PostmanにOCIアイデンティティ・ドメインAPIがすでにインポートされている場合、このステップは無視できます。それ以外の場合は、GitHub URLから次のJSONファイルを取得し、Postmanにインポートできます。

  • REST_API_for_Oracle_Identity_Cloud_Service_postman_collection.json
  • example_environment.json
  • oracle_identity_cloud_service_postman_globals.json
  • Oracle Identity Cloud Service RADIUS Proxy Example Environment with Variables.postman_environment.json
  • Oracle Identity Cloud Service RADIUS Proxy.postman_collection.json

アイデンティティ・ドメインのホスト名、クライアントID、クライアント・シークレットなどの環境変数を使用してPostmanを設定します。REST APIを起動することをお薦めします。

RADIUSプロキシおよびリスナー定義を作成するためのOCIアイデンティティ・ドメインAPIの起動:

1. /admin/v1/apps エンドポイントを使用して、(上で作成した) “Oracle Database RADIUS App”のアプリケーションIDをフェッチします

  • “displayName”: “Oracle Database RADIUS App”
  • “id”: “5919e6f45e1942daa5a56b3aa112b22f”

2. 次のRESTエンドポイントを使用してRADIUSプロキシを作成します。

Endpoint: {{HOST}}/admin/v1/RadiusProxies/
Method: POST
Body:
{
    “displayName”: “Oracle Database RADIUS Proxy”,
    “description”: “This is a RADIUS Proxy used for authentication of database users”,
    “type”: “proxy”,
    “timeout”: 20,
    “noOfWorkerThreads”: 10,
    “schemas” : [“urn:ietf:params:scim:schemas:oracle:idcs:RadiusProxy”]
}

成功すると、レスポンスから新しいRADIUSプロキシが作成されたことがわかります。RADIUSプロキシのRADIUSプロキシIDおよびOAuthクライアント・アプリケーションIDを書き留めます。

  • RADIUS Proxy ID:  a256608a146a4f74a28c30ab5b4609a2
  • RADIUS Proxy OAuth Client App ID (Resource ->oauthClient section -> value から取得): 9f868a137c384f9594c0d3aeede81706

3. RADIUSプロキシをアクティブ化します。

Endpoint: {{HOST}}/admin/v1/RadiusProxies/<RADIUS proxy id>
Method: PATCH
Body:
{
    “Operations”:[
        {
            “op”: “replace”,
            “path”: “active”,
            “value”: true
         }
    ],
    “schemas”: [
        “urn:ietf:params:scim:api:messages:2.0:PatchOp”
    ]
}

4. RADIUSプロキシ・リスナーを作成します。

ノート: RADIUSプロキシをインストールするLinuxマシンのRADIUSプロキシIDとIPアドレスを指定する必要があります。

  • RADIUS Proxy ID:  a256608a146a4f74a28c30ab5b4609a2
  • RADIUS Proxy IP Address: xxx.xxx.117.33

Endpoint: {{HOST}}/admin/v1/RadiusProxyListeners
Method: POST
Body:
{
    “description”:  “Brief description for this RADIUS Proxy Listener.”,
    “displayName”: “RP1_L1”,
    “hostName”: “xxx.xxx.117.33“,
    “radiusProxySettings”: “{\”key1\”: \”value1\”, \”key2\”: \”value2\”}”,
    “radiusProxy”:  {
        “value” :  “a256608a146a4f74a28c30ab5b4609a2
    },
    “schemas” : [“urn:ietf:params:scim:schemas:oracle:idcs:RadiusProxyListener”]
}

成功すると、レスポンスから新しいRADIUSプロキシが作成されたことがわかります。リスナー名とIDを書き留めます。

  • displayName”: “RP1_L1”
  • RADIUS Proxy Listener “id”: “e8b47e282e0b47cb986076aafea24e40”

5. 前のステップで作成したRADIUSアプリケーションでRADIUSプロキシをバインド/マップします。RESTコールを行う前に、RADIUSプロキシとRADIUSアプリケーションのIDで準備します。

  • displayName: “Oracle Database RADIUS Proxy”
  • RADIUS Proxy id:  a256608a146a4f74a28c30ab5b4609a2

 

  • displayName: “Oracle Database RADIUS App “,
  • RADIUS App ID: 5919e6f45e1942daa5a56b3aa112b22f

Endpoint: {{HOST}}/admin/v1/RadiusProxyMappings/
Method: POST
Body:
{
    “description”:  “RADIUS Proxy mapping for Database server”,
    “radiusProxy”:  {
        “value” :  “a256608a146a4f74a28c30ab5b4609a2”
    },
    “radiusApp”: {
        “value”: “5919e6f45e1942daa5a56b3aa112b22f”
    },
    “schemas” : [“urn:ietf:params:scim:schemas:oracle:idcs:RadiusProxyMapping”]
}

正常に終了した場合は、次のステップに進みます。

6. RADIUSプロキシのOAuthクライアント資格証明をフェッチします。これらの資格は、RADIUSプロキシのインストール時に必要です。これらをフェッチするには、前述のステップ2で収集したRADIUSプロキシのOAuthクライアント・アプリケーションIDが必要です。

  • RADIUS Proxy OAuth Client App ID: 9f868a137c384f9594c0d3aeede81706

 

Endpoint: {{HOST}}/admin/v1/Apps/{{RPOAuthClientAppId}}?attributes=clientSecret,name
Method: GET

成功した場合は、次のようなレスポンスが表示されます。

{
    “displayName”: ” Oracle Database RADIUS Proxy”,
    “basedOnTemplate”: {
        “value”: “RadiusProxyAppTemplateId”
    },
    “id”: “9f868a137c384f9594c0d3aeede81706”,
    “isAliasApp”: false,
    “name“: “767daa3f39404ba5bdfc34de4d4371eb”,
    “clientSecret“: “05b103ff-5fec-43eb-888e-70bd6e7fe508”
}

ノート: nameおよびclientSecretは、それぞれRADIUSプロキシOAuth client_idおよびclient_secretを参照します。

  • RADIUS proxy OAuth client_id: 767daa3f39404ba5bdfc34de4d4371eb
  • RADIUS proxy OAuth client_secret: 05b103ff-5fec-43eb-888e-70bd6e7fe508
     

RADIUSプロキシのインストール:

  1. アイデンティティ・ドメイン・コンソールからRADIUSプロキシ・インストーラをダウンロードします。「Identity Domain」→「Settings」→「Downloads」にナビゲートします。
  2. 「Identity Cloud Service RADIUS Proxy for Linux」を探して、「Download」をクリックします。
  3. インストーラをLinuxマシンにコピーします。
  4. インストーラをunzipします。
  5. インストーラをrootユーザーまたはsudoユーザーとして実行します。
  • 「Welcome」画面を読み、「Next」をクリックします。
  • 「Information」画面を読み、「Next」をクリックします。
  • RADIUSプロキシをインストールするフォルダを選択します(「non-root」フォルダの下にインストールすることをお薦めします)
  • RadiusプロキシでHTTPプロキシを介してアイデンティティ・ドメインに接続する場合は、HTTP画面で「Use HTTP Proxy」を選択します。そうでない場合は、チェックボックスの選択を解除したままにします。「Next」をクリックします。
  • 次の画面で、RADIUSプロキシのクライアントIDおよびクライアント・シークレットと、アイデンティティ・ドメイン(IDCS)のベースURLを入力します。
    • RADIUS proxy OAuth client_id: 767daa3f39404ba5bdfc34de4d4371eb
    • RADIUS proxy OAuth client_secret: 05b103ff-5fec-43eb-888e-70bd6e7fe508
    • Identity domain URL: https://idcs-xxxxx.identity.oraclecloud.com:443
  • 「RADIUS user & group information」画面で、OSユーザー名およびグループ名を入力します。RADIUSプロキシ・デーモンは、指定したユーザー名およびグループで実行されます。

ノート: ‘root’ユーザーでプロキシ・デーモンを実行しないでください。「non-root」ユーザーを選択します。

  • 「Install」をクリックします。
  • 「Pre-Install」画面で、入力したすべての情報を確認し、「Install」をクリックします。
  • インストールが完了したら、「Done」をクリックします。
  1. RADIUSエージェントおよびRADIUSプロキシが実行されていることを確認します。

RADIUS proxy base folder: /home/opc/oracle_radius_proxy/
RADIUS proxy folder: /home/opc/oracle_radius_proxy/radius_proxy
RADIUS agent folder: /home/opc/oracle_radius_proxy/radius_agent

part2-mfa-db-8

 

RADIUSプロキシおよびRADIUSエージェントを管理するためのコマンドを次に示します(start/stop/restart/staus)。

  • RADIUS proxy: sudo /sbin/service idcs_radiusd {start | stop| restart| status}
  • RADIUS agent: sudo python /home/opc/oracle_radius_proxy/radius_agent/scripts/src/radius_agent.py {start | stop| restart| status}

part2-mfa-db-9

RADIUSプロキシとアイデンティティ・ドメイン間の接続を確認:

RADIUSプロキシとアイデンティティ・ドメイン間の接続をテストする2つのオプションがあります。

重要なノート: Oracle Databaseサーバー以外のマシンからこれらのオプションのいずれかを試す場合は、Oracle Database RADIUSアプリケーションでIPアドレスを適宜変更する必要があります。これは、RADIUSプロキシが、アプリケーション定義で構成されたIPアドレス(データベース・サーバー)から発生したリクエストのみを信頼するためです。

接続テストが成功したら、Oracle Database RADIUSアプリケーション上のデータベース・サーバーのIPアドレスに戻すことができます。

オプション1: NTRADpingユーティリティを使用します(このGUIツールはWindows OSでのみ使用できます)

  1. https://ntradping.apponic.com/ からユーティリティをダウンロードします。
  2. ユーティリティーを起動します。
  3. 次のフィールドに入力してください。
  • Radius server IP = RADIUSプロキシが実行されているLinuxホストのIPアドレス。
  • Port = Oracle Database RADIUSアプリケーション定義から取得(デフォルトは1812)
  • Secret key= Oracle Database RADIUSアプリケーション定義から取得
  • Username & Password: アプリケーションにアクセスできる任意のアイデンティティ・ドメイン・ユーザー。
  1. C「Send」をクリック
  2. テストが成功すると、RADIUS Serverの応答の下に「Welcome <IDCS Username>」が表示されます。

part2-mfa-db-10

 

オプション2: LinuxホストでのFree RADIUSユーティリティの使用

  1. yum install freeradius freeradius-utils コマンドを使用して、無料のRADIUSユーティリティをインストール
  2. free radiusをインストールすると、”radtest“コマンド ライン ユーティリティが表示されます。
  3. 次の例に示すように、radtestを実行します。

Syntax: radtest <IAM_username> < password> <radius_proxy_ip> <port> <secret_key>
Example: radtest gkgoalla ***** xxx.xxx..117.33 1812 ******

成功したら、「Welcome gkgoalla!」と表示されるはずです。

part2-mfa-db-11

 

アイデンティティ・ドメインでMFA for Oracle RADIUSアプリケーションを有効に:

  1. アイデンティティ・ドメインから、「Security」→「Sign-on Policies」にナビゲートします。
  2. 新しいサインオン・ポリシーを作成します。
  3. サインオン・ルールの追加(例: Oracle DatabasesのMFA)。「Actions」で、「Prompt for additional factor」を選択し、「Specified factors only」を選択します。次のfactorsをチェックします。:
  • Mobile app notification
  • Mobile app passcode
  • Text Message
  1. サインオン・ルールを保存します。
  2. 「Oracle Database RADIUS App」をポリシーに追加します。
  3. サインオン・ポリシーをアクティブ化していることを確認します。

      次のようになります。

part2-mfa-db-12

part2-mfa-db-13

part2-mfa-db-14

part2-mfa-db-15

これで、OCIアイデンティティ・ドメインの構成が終了します。

Oracle Database ServerでRADIUS認証を有効に:

  1. Oracle Databaseサーバーにログインします。
  2. アイデンティティ・ドメインの「Oracle Database Radius app」から秘密キーを取得し、新しいファイルを作成して秘密キーで保存します。

           次に例を示します。:

  • File name: radius.key
  • Location: /home/oracle/sw/network/security

          ノート: ファイルの場所は、データベース・サーバー上の任意の場所にできます。

  1. バックアップを取得し、データベース・サーバー上のsqlnet.oraファイルを編集して、次のエントリでRADIUS認証を有効にします。

           # データベースのRADIUS認証を有効にするには

  • SQLNET.authentication_services=(RADIUS, BEQ, TCPS)
  • SQLNET.radius_authentication=***.***.117.33
  • SQLNET.radius_authentication_port=1812
  • SQLNET.radius_secret=<Oracle_Home>/network/security/radius.key

          #  RADIUSを介してDBに対してMFAを有効にするには

  • SQLNET.RADIUS_CHALLENGE_RESPONSE=on
  • SQLNET.RADIUS_AUTHENTICATION_INTERFACE=oracle/net/radius/DefaultRadiusInterface
  • SQLNET.RADIUS_CLASSPATH=<Oracle_Home>/network/jlib/netradius8.jar:<Oracle_Home>/network/jlib:<Oracle_Home>/jdk/jre/lib:<Oracle_Home>/lib:<Oracle_Home>/jdk/jre/lib/amd64:<Oracle_Home>/jdk/jre/lib/amd64/server/

           # ORA 12636 – パケット送信失敗エラーを回避します

  • DISABLE_OOB=ON
  1. Oracle DatabaseにDBAユーザーとして接続し、REMOTE_OS_AUTHENTおよびOS_AUTHENT_PREFIXデータベース・パラメータを更新してデータベースを再起動します。
  • remote_os_authent: リモート・クライアントをOS_AUTHENT_PREFIXパラメータの値で認証するかどうかを指定します。falseに設定します。
  • os_authent_prefix: Oracleがサーバーに接続しようとしているユーザーを認証するために使用する接頭辞を指定します。このパラメータをNULLに設定します

これらのパラメータの現在の値を表示するには:

  • sql> show parameter REMOTE_OS_AUTHENT;
  • sql> show parameter OS_AUTHENT_PREFIX;

     5. 次のように更新します。:

  • sql> alter system set remote_os_authent=false scope=spfile;
  • sql> alter system set os_authent_prefix=” scope=spfile;

     6. アイデンティティ・ドメインで「Oracle Database RADIUS App」に割り当てたユーザーは、フラグ「EXTERNALLY」を使用してデータベースにローカルに作成する必要があります。

         構文:

  • sql> create user <username> identified externally;
  • sql> grant connect,resource to <username>;

          例:

  • sql> create user gkgoalla identified externally;
  • sql> grant connect,resource to gkgoalla

     7. データベースを再起動します。

Oracle Database Serverでの構成が終了します。

まとめ:

このブログ投稿では、Oracle Databaseサーバーに対してRADIUS認証の設定およびMFAのアクティブ化に関する知識を取得しました。このシリーズの次期および最終のブログ投稿では、ユーザーの環境を設定し、Oracle Database対応のMFAを確認する方法を学習します。

参照:

Setup Radius Proxy: https://docs.oracle.com/iaas/Content/Identity/radiusproxy/overview.htm