2026年7月16日木曜日

Autonomous AI Databaseのデータベース・ツールを外部認証する - GCP編

本記事では、Google Cloud Platformを外部アイデンティティ・プロバイダーとした設定手順を紹介します。

これまでに紹介している、外部アイデンティティ・プロバイダーの構成手順です。
ChatGPTにMicrosoft Entra IDの作業手順をもとにGCPの手順を生成させたところ、指定できない引数や存在しないAPIの呼び出しが手順に含まれていました。また、そのようなAPI呼び出しに公式ドキュメントがリンクされていました。

DBMS_CLOUD_ADMIN.ENABLE_EXERNAL_AUTHENTICATIONtypeGCPは指定できません。


Database Actionsを利用できるようにするのは、ORDS_ADMIN.ENABLE_SCHEMAです。DBMS_CLOUD_ADMIN.ENABLE_DATABASE_WEB_ACCESSというAPIは存在しません。


実際に検証された手順を学習していないと、AIも間違うようです。AIの間違いを減らすために、Googleについても構成手順を確認しました。

これまでと同様に、作業に使用するデータベースとして、以下の構成のAutonomous AI Databaseを使用します。

データベース名SALESADBワークロード・タイプレイクハウスデータベースのバージョン19cです。

手元の作業ディレクトリは、salesadb_gcpとします。

GCPのアプリケーションに設定するリダイレクトURIの形式です。

https://[パブリック・アクセスURLのホスト部]/adb/auth/v1/connect/gcp/callback


Google Cloud Platformの構成



Google Cloudのコンソールにサインインします。プロジェクトが作成されていることを前提とします。

APIとサービス認証情報を開きます。


認証情報を作成をクリックし、OAuthクライアントIDを選択します。


アプリケーションの種類としてウェブ・アプリケーションを選択します。名前SALESADBとします。

承認済みのリダイレクトURIとして、以下の形式のリダイレクトURIを設定します。

https://[パブリック・アクセスURLのホスト部]/adb/auth/v1/connect/gcp/callback

以上で作成します。


ダイアログが開きます。

クライアントIDクライアントシークレットをコピーし、OKをクリックしてダイアログを閉じます。


公開ステータステスト中にした状態で、接続確認を実施します。

以上で、Google Cloud PlatformにOAuthクライアントが作成されました。



データベース・ツールの外部認証の構成




SALESADBに管理者ユーザーADMINで接続します。接続にはSQLclを使用します。

sql admin@salesadb_low

Google Cloud Platformによる外部認証を有効にします。クライアントIDクライアントシークレトを、先ほどコピーした値に置き換えます。
BEGIN
   DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDP(
      idp_name       => 'GCP',
      client_id      => '<client-id>',
      client_secret  => '<client-secret>',
      params         => JSON_OBJECT(
                           'discovery_url' VALUE
                           'https://accounts.google.com/.well-known/openid-configuration'
                           ));
END;
/

SQL> BEGIN

  2     DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDP(

  3        idp_name       => 'GCP',

  4        client_id      => '****************.apps.googleusercontent.com',

  5        client_secret  => '****************************************',

  6        params         => JSON_OBJECT(

  7                             'discovery_url' VALUE

  8                             'https://accounts.google.com/.well-known/openid-configuration'

  9                             ));

 10  END;

 11* /


PL/SQLプロシージャが正常に完了しました。


SQL> 


設定を確認します。

select * from dba_list_idp;

SQL> select * from dba_list_idp;


IDP_ID                                                                           IDP_NAME    CLIENT_ID                                                                   PARAMS                                                                              

________________________________________________________________________________ ___________ ___________________________________________________________________________ ___________________________________________________________________________________ 

GCP-7532****-****-****-****-********3eb5-b9a9****-****-****-****-********ff3d    GCP         4956********-***********************************.apps.googleusercontent.com    {"discovery_url":"https://accounts.google.com/.well-known/openid-configuration"}    


SQL> 


以上で、外部アイデンティティ・プロバイダーとしてGoogle Cloud Platformが登録されました。

データベース・ユーザーとしてWKSP_APEXDEVを作成します。このユーザーは、Oracle APEXのワークスペースAPEXDEVのデフォルト・パーシング・スキーマとして使用します。

データベース・ユーザーWKSP_APEXDEVには、Google Cloud Platformのユーザーを割り当てます。GCPについては、データベース・ユーザーに割り当てられるのはユーザーに限定され、グループやロールを割り当てる機構は提供されていません。

WKSP_APEXDEVには最低限の権限のみを割り当ています。

create user wksp_apexdev identified globally as 'GCP_USER=<ユーザー名>';
alter user wksp_apexdev quota 25m on data;
grant create session to wksp_apexdev;
grant create table, create view, create procedure, create sequence to wksp_apexdev;

SQL> create user wksp_apexdev identified globally as 'GCP_USER=y_____@______.com';


User WKSP_APEXDEVは作成されました。


SQL> alter user wksp_apexdev quota 25m on data;


User WKSP_APEXDEVが変更されました。


SQL> grant create session to wksp_apexdev;


Grantが正常に実行されました。


SQL> grant create table, create view, create procedure, create sequence to wksp_apexdev;


Grantが正常に実行されました。


SQL> 


スキーマWKSP_APEXDEVREST有効にします。ORDS別名apexdev(これがAPEXワークスペース名として扱われます)を割り当てます。
BEGIN
    ORDS_ADMIN.ENABLE_SCHEMA(
        p_enabled             => TRUE,
        p_schema              => 'WKSP_APEXDEV',
        p_url_mapping_type    => 'BASE_PATH',
        p_url_mapping_pattern => 'apexdev',
        p_auto_rest_auth      => FALSE);
END;
/

SQL> BEGIN

  2      ORDS_ADMIN.ENABLE_SCHEMA(

  3          p_enabled             => TRUE,

  4          p_schema              => 'WKSP_APEXDEV',

  5          p_url_mapping_type    => 'BASE_PATH',

  6          p_url_mapping_pattern => 'apexdev',

  7          p_auto_rest_auth      => FALSE);

  8  END;

  9* /


PL/SQLプロシージャが正常に完了しました。


SQL> 


外部認証が有効になっていないとデータベース・ツールに接続できない(404 Not Foundが返される)ため、OCI_IAMで外部認証を有効にします。
BEGIN
   DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
      type  => 'OCI_IAM',
      force => TRUE
   );
END;
/

SQL> BEGIN

  2     DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(

  3        type  => 'OCI_IAM',

  4        force => TRUE

  5     );

  6  END;

  7* /


PL/SQLプロシージャが正常に完了しました。


SQL> 


以上で、データベース・ツールの認証にGoogle Cloud Platformを使用できるようになりました。


データベース・ツールへの接続



Autonomous AI Databaseに接続し、使用するツールとしてSQL Developer Webを選択します。


SSOでサインインをクリックします。


外部アイデンティティ・プロバイダーとしてGCPを選択します。


サインインするGoogleアカウントを選択します。サインインの確認を求められます。


HTTPのステータス・コードとして404 Not Foundが返されました。これは、ORDS別名として設定したapexdevではなく、スキーマ名がURLに含まれるために発生しています。

ブラウザに表示されているURLの/ords/wksp_apexdev/_sdw/の部分を/ords/apexdev/_sdw/に変更して、URLにアクセスします。

URLを変更すると、データベース・アクションに接続されます。


Google Cloud Platformで認証したユーザーにて、データベース・ツールに接続できました。



Oracle APEXへの接続




GUIでの作業は、これまで紹介しているOracle IAM、Microsoft Entra IDおよびOktaと同じ作業になります。すこし手順を変えて、同じ作業をスクリプトで実施します。

APEXのワークスペースとしてAPEXDEVを追加します。APEX_INSTANCE_ADMIN.ADD_WORKSPACEを呼び出します。
begin
apex_instance_admin.add_workspace(
    p_workspace => 'APEXDEV',
    p_primary_schema => 'WKSP_APEXDEV'
);
end;
/
ワークスペースが作成されたら、管理者ユーザーを追加します。

APEX_UTIL.SET_WORKSPACEを呼び出し、対象のワークスペースに切り替えてから、APEX_UTIL.CREATE_USERを呼び出します。
begin
apex_util.set_workspace('APEXDEV');
apex_util.create_user(
    p_user_name        => upper('<Googleユーザー>'),
    p_web_password     => '<パスワード>',
    p_developer_privs  => 'ADMIN:CREATE:DATA_LOADER:EDIT:HELP:MONITOR:SQL',
    p_email_address    => '<Googleユーザー>',
    p_default_schema   => 'WKSP_APEXDEV',
    p_change_password_on_first_use => 'N'
);
end;
/
commit;
exit
以上で、APEXワークスペースと管理者ユーザーの追加ができました。

APEXへの接続を確認します。

ORDSのランディング・ページより、Oracle APEX実行します。


GCPを選択します。


Googleでログインします。


Googleでサインインしたユーザーに、ワークスペースAPEXDEVが紐づいています。

APEXDEVを選択します。


APEXにサインインできました。


以上で、外部アイデンティ・プロバイダーで認証したユーザーで、Oracle APEXの開発ツールに接続できました。

Autonomous AI Databaseでは、コンソールで管理者ユーザーや開発者ユーザーを作成すると、対応したデータベース・ユーザーが作成されます。APEX_UTIL.CREATE_USERを呼び出して作成したユーザーはその限りではなく、対応するデータベース・ユーザーは作成されていません。

これが仕様なのか不明ですが、外部アイデンティティ・プロバイダーによるユーザー認証を構成する場合は、データベース・ユーザーが作成されない方がメリットがあります。

今回の記事は以上になります。