AWS Cognitoまでは確認しなくて良いかなと思ったのですが、AWS Cognitoのページに「5分未満で無料で開始できます」というボタンがあったので、クリックしました。
データベースの環境などは、これまでの作業環境を踏襲します。GCPの構成を確認した環境をそのまま使用します。DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATIONで設定する環境は、Oracle IAMかMicrosoft Entra IDかのどちらかを選択しますが、DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDPで作成するIDPは、同時に複数のIDPを作成できます。
AWS Cognitoの構成
アプリケーションを定義します。
アプリケーションタイプとして従来のウェブアプリケーションを選択します。アプリケーションの名前はSALESADBとします。
最低限のオプションを設定します。
サインイン識別子のオプションのメールアドレスをチェックします。また、サインアップのための必須属性としてemailを選択します。
リターンURLとして以下の形式のリダイレクトURIを設定します。
https://[パブリック・アクセスURLのホスト部]/adb/auth/v1/connect/aws/callback
以上でユーザーディレクトリを作成します。
ユーザープールが作成されます。作成されたユーザープールを開きます。
サイド・メニューのアプリケーションからアプリケーションクライアントを開き、作成済みのアプリケーションクライアントSALESADBを開きます。
クライアントIDとクライアントシークレットをコピーします。これらも、DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDPの引数の値になります。
ユーザー管理のユーザーを開き、接続に使用するユーザーを作成します。
メールアドレスとパスワードでサインインできるように、ユーザーを作成しています。
グループsales_dbusersに、先ほど作成したテスト用のユーザーを追加します。
以上で、AWS CognitoにOAuthクライアントが作成されました。
データベース・ツールの外部認証の構成
GCPでの構成から、作業を継続している前提です。
IDPとしてAWS Cognitoを作成します。
BEGIN
DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDP(
idp_name => 'AWS',
client_id => '<client-id>',
client_secret => '<client-secret>',
params => JSON_OBJECT(
'discovery_url' VALUE
'https://cognito-idp.<region>.amazonaws.com/<user-pool-id>/.well-known/openid-configuration'
));
END;
/
SQL> BEGIN
2 DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDP(
3 idp_name => 'AWS',
4 client_id => '**********************',
5 client_secret => '**************************************',
6 params => JSON_OBJECT(
7 'discovery_url' VALUE
8 'https://cognito-idp.us-east-1.amazonaws.com/us-east-1_***************/.well-known/openid-configuration'
9 ));
10 END;
11* /
PL/SQLプロシージャが正常に完了しました。
SQL>
データベース・ユーザーWKSP_APEXDEVに紐づけられている、グローバル・ユーザーの定義を更新します。
alter user wksp_apexdev identified globally as 'AWS_ROLE=sales_dbusers';
SQL> alter user wksp_apexdev identified globally as 'AWS_ROLE=sales_dbusers';
User WKSP_APEXDEVが変更されました。
SQL>
初回の構成であれば、ユーザーWSKP_APEXDEVへの権限の付与、DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATIONおよびORDS_ADMIN.ENABLE_SCHEMAも実行します。
以上で、データベース・ツールの認証にAWS Cognitoを使用できるようになりました。
データベース・ツールへの接続
Autonomous AI Databaseに接続し、使用するツールとしてSQL Developer Webを選択します。
SSOでサインインをクリックします。
外部アイデンティティ・プロバイダーとしてAWSを選択します。
AWS Cognitoのサインイン画面が表示されます。テスト用に作成したユーザーのメールアドレスを入力し、Nextをクリックします。
パスワードを入力し、Continueをクリックします。
HTTPのステータス・コードとして404 Not Foundが返されました。これは、ORDS別名として設定したapexdevではなく、スキーマ名がURLに含まれるために発生しています。
ブラウザに表示されているURLの/ords/wksp_apexdev/_sdw/の部分を/ords/apexdev/_sdw/に変更して、URLにアクセスします。
URLを変更すると、データベース・アクションに接続されます。
AWS Cognitoで認証したユーザーにて、データベース・ツールに接続できました。
Oracle APEXへの接続
ワークスペースAPEXDEVが作成済みとします。AWS Cognitoで作成したユーザーを管理者ユーザーとして追加します。
APEX_UTIL.SET_WORKSPACEを呼び出し、対象のワークスペースに切り替えてから、APEX_UTIL.CREATE_USERを呼び出します。
begin
apex_util.set_workspace('APEXDEV');
apex_util.create_user(
p_user_name => upper('<AWS Cognitoユーザー>'),
p_web_password => '<パスワード>',
p_developer_privs => 'ADMIN:CREATE:DATA_LOADER:EDIT:HELP:MONITOR:SQL',
p_email_address => '<AWS Cognitoユーザー>',
p_default_schema => 'WKSP_APEXDEV',
p_change_password_on_first_use => 'N'
);
end;
/
commit;
exit
以上で、APEXワークスペースと管理者ユーザーの追加ができました。APEXへの接続を確認します。
ORDSのランディング・ページより、Oracle APEXを実行します。
AWSを選択します。
AWS Cognitoでサインインします。
AWS Cognitoでサインインしたユーザーに、ワークスペースAPEXDEVが紐づいています。
APEXDEVを選択します。
APEXにサインインできました。
以上で、外部アイデンティ・プロバイダーで認証したユーザーで、Oracle APEXの開発ツールに接続できました。
今回の記事は以上になります。
完


















