本記事では、Google Cloud Platformを外部アイデンティティ・プロバイダーとした設定手順を紹介します。
これまでに紹介している、外部アイデンティティ・プロバイダーの構成手順です。
ChatGPTにMicrosoft Entra IDの作業手順をもとにGCPの手順を生成させたところ、指定できない引数や存在しないAPIの呼び出しが手順に含まれていました。また、そのような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_APEXDEVを
REST有効にします。
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と同じ作業になります。すこし手順を変えて、同じ作業をスクリプトで実施します。
begin
apex_instance_admin.add_workspace(
p_workspace => 'APEXDEV',
p_primary_schema => 'WKSP_APEXDEV'
);
end;
/
ワークスペースが作成されたら、管理者ユーザーを追加します。
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を呼び出して作成したユーザーはその限りではなく、対応するデータベース・ユーザーは作成されていません。
これが仕様なのか不明ですが、外部アイデンティティ・プロバイダーによるユーザー認証を構成する場合は、データベース・ユーザーが作成されない方がメリットがあります。
今回の記事は以上になります。
完