※ 本記事は、Chaitanya Koratamaddi, Roopesh Thokalaによる”Oracle APEX 26.2: Using DBMS_CLOUD Credentials with Resource Principal and DBTools Identity“を翻訳したものです。

2026年11月9日

OCI Object Storageから文書を読み込んだり、OCIのAIサービスを呼び出したりするOracle APEXアプリケーションを考えます。RESTエンドポイントに加え、そのサービスを使う権限を持つIDが必要です。Oracle Cloud Infrastructure(OCI)ユーザーのAPIキーをAPEX Web Credentialに設定する場合は、アプリケーションの運用の中で、その鍵も管理しなければなりません。

Oracle APEX 26.2では、OCI Native Authenticationで使うDBMS_CLOUDの認証情報への対応を追加しました。
Autonomous AI DatabaseのリソースプリンシパルとDatabase Tools Identity
も利用できます。APEX Web Credentialから、データベースで管理する認証情報を参照し、RESTデータソースやAPEX_WEB_SERVICEの呼び出しに使えます。

本記事では、Database Tools Identityを使う設定を行い、OCIへのREST要求でテストします。続いて、Autonomous AI Databaseのリソースプリンシパルを使う方法を説明します。

図1:データベースで管理する認証情報を使い、APEXアプリケーションからOCIサービスへアクセスする

認証情報の構成を理解する

始める前に、設定の3つの部分を区別しておきます。

構成要素役割
OCIのIDとIAMポリシー誰が要求し、そのIDがどのOCIリソースにアクセスできるかを定めます。
データベースの認証情報管理された認証情報を、データベースから利用できるようにします。
Oracle APEX Web Credentialデータベースの認証情報を参照し、APEXコンポーネントやAPIで使う名前とStatic IDを提供します。

たとえば、アプリケーションでStatic IDがoci-managed-identityのWeb Credentialを使い、そこからAPEX_OCI_IDENTITYというデータベースの認証情報を参照するとします。その認証情報に対応するIDには、実行したい操作を許可するOCI IAMポリシーが必要です。

認証情報を作成するだけでは、OCIリソースへのアクセスは許可されません。アプリケーションで何をできるかは、引き続きIAMポリシーで決まります。

図2:ID、データベースの認証情報、それを使うアプリケーションの関係

リソースプリンシパル

Autonomous AI Databaseでは、リソースプリンシパルを使い、データベース自体のリソースIDでOCIサービスへ認証できます。基になる認証情報と、そのローテーションはOCIで管理します。許可するアクセスは、IAMの動的グループとポリシーで定義します。

有効にすると、データベースからOCI$RESOURCE_PRINCIPALという認証情報を利用できます。Autonomous AI Databaseでリソースプリンシパルを使うを参照してください。

DBTools Identity

Database Tools Identityは、OCI Database Toolsの接続に関連付けるIDです。IDを作成すると、その接続に設定したデータベーススキーマに、Database Toolsで管理する認証情報を作成します。基になる認証情報とローテーションはOCIで管理します。Database Tools Identityでは独自のリソースプリンシパルを作り、ほかのOCIリソースプリンシパルと同じ管理・ローテーションの仕組みを使います。

認証情報の名前は、Credential Key欄で指定します。この例ではAPEX_OCI_IDENTITYにします。Database Toolsで認証情報を維持・管理し、APEXからはWeb Credentialを通じて参照します。Identityを利用するための手順を参照してください。

どちらの方法でも、APEX Web CredentialにOCIユーザーのAPI秘密鍵を入力する必要はありません。

APEX 26.2で変わること

APEXは以前から、一部の認証方式で、データベースの認証情報を使うWeb Credentialに対応しています。APEX 26.2では、この設定をOCI Native Authenticationにも拡張しました。

OCI用Web Credentialの作成時に、Use Database Credentialを選び、データベースの認証情報名を入力できます。

実行時には、APEXでWeb Credentialの参照先を解決し、そのデータベース認証情報を要求に使います。データベースの認証情報を使う場合、HTTP要求は、APEXエンジンスキーマではなく、アプリケーションの解析スキーマの権限コンテキストで実行します。そのため、解析スキーマに、対象OCIエンドポイントへのネットワークACLとHTTPSアクセスを設定する必要があります。なお、データベース認証情報を使うWeb Credentialでは、Valid for URLsの制限は適用されません。

対応するOCI Web Credentialを設定することで、OCIのAIサービスを呼ぶ際にも、リソースプリンシパルとDBTools Identityで認証できます。

例:DBTools IdentityでOCI REST APIを呼び出す

設定をテストするため、コンパートメント一覧を取得するOCI APIを呼び出します。次の名前を使うか、環境に合わせて置き換えてください。

項目値の例
アプリケーションの解析スキーマAPP_SCHEMA
データベース認証情報/Credential KeyAPEX_OCI_IDENTITY
APEX Web Credentialの名前OCI Managed Identity
APEX Web CredentialのStatic IDoci-managed-identity

前提条件

必要なデータベース認証情報の機能に対応する、APEX 26.2環境を使います。OCI Database Toolsにアクセスでき、接続、Vaultのシークレット、ID、IAMポリシーを設定する権限も必要です。

この例で必要な、2方向の接続を確認します。Database ToolsからAPEXのデータベースへ接続できることと、データベースからOCI APIエンドポイントへHTTPS要求を送れることです。

接続に設定するデータベースユーザーには、CREATE CREDENTIAL権限とDBMS_CLOUDへのアクセスが必要です。データベースでDBMS_CLOUDを未設定の場合は、必要なインストール、HTTPS、ウォレットの設定を先に完了してください。これらの前提条件は、Identityの作成を参照してください。

手順1:IAMの前提条件を設定する

Resource Principalを使うDatabase Tools接続を作成・利用する前に、接続とDatabase Tools Identityに必要な動的グループとポリシーを設定します。

– Database Tools接続のリソースプリンシパルでは、Database Toolsからデータベースへ接続するため、OCI Vaultからデータベースのパスワードを取得します。必要な場合は、ウォレットやキーストアのシークレットも取得します。
– Database Tools Identityのリソースプリンシパルでは、対象のOCIサービスへ認証し、アクセスします。リソースプリンシパルの認証情報はDatabase Toolsで作成・保護し、DBMS_CLOUDとOracle APEXが使うデータベース認証情報を通じて利用できるようにします。

IAM管理者が動的グループとポリシーを作成するか、作成に必要な権限を取得する必要があります。各動的グループの一致ルールには、コンパートメントのOCIDを使います。

手順2:Database Tools接続の動的グループを作る

接続を作成するコンパートメントで、Database Tools接続を対象にした動的グループを作成します。

例は次のとおりです。

ALL {
  resource.type = 'databasetoolsconnection',
  resource.compartment.id = '<connection_compartment_ocid>'
}

図3:OCIで動的グループを作成する

次に、その接続で使うVaultシークレットを読み取る権限を、動的グループに付与します。ポリシーの範囲は、シークレットを格納するコンパートメントに限定します。

Allow dynamic-group apex-dbtools-connections to read secret-family in compartment <vault_secret_compartment_name>

このポリシーは、一致するDatabase Tools接続に対して、コンパートメント内のシークレットを対象に適用します。特定のシークレットのOCIDだけに限定するものではありません。接続に必要なパスワードやウォレットのシークレットを、すべて読めることを確認してください。

図4:データベース接続用のポリシーを作成する

手順3:Database Tools Identityの動的グループを作り、アクセスを許可する

OCIサービスを呼ぶDatabase Tools Identityを対象にした動的グループを作成します。コンパートメント内のすべてのIdentityを含める場合は、次のルールを使います。

ALL {
  resource.type = 'databasetoolsidentity',
  resource.compartment.id = '<identity_compartment_ocid>'
}

図5:DBTools Identity用の動的グループを作成する

Identityと接続が同じコンパートメントにある場合は、同じOCIDを使います。1つのIdentityだけを含める場合は、代わりに、そのOCIDを指定したresource.id条件を追加します。

対象サービスで必要な権限を、動的グループに付与します。

コンパートメント一覧の例では、次を使います。

Allow dynamic-group apex-dbtools-identities to inspect compartments in tenancy

図6:OCIでコンパートメントの参照用ポリシーを作成する

Object Storageを使う例では、次のようなポリシーを追加します。

Allow dynamic-group apex-dbtools-identities to read object-family in compartment <bucket_compartment_name>

アプリケーションが呼ぶOCIサービスで必要な、最小権限のポリシーに置き換えてください。

手順4:Database Toolsの接続を作成する

OCI Database Toolsから、APEXをインストールしたデータベースへの接続を作成します。Database Toolsでは、この接続を使って、Identityのデータベース認証情報を作成・管理します。そのため、選択したOCIネットワークの設定で、データベースへ到達できる必要があります。

OCIコンソールでDeveloper Services → Database Tools → Connectionsへ進み、Create Connectionをクリックします。

図7:Developer ServicesからConnectionsを選択する

図8:Create Connectionをクリックする

データベースの情報を入力する

接続のNameとCompartmentを指定します。この手順では、Database DetailsのSelect databaseで接続情報を自動取得します。対象データベースがOCIテナンシ外にある場合などは、Enter database informationも使えます。Database Cloud ServiceにOracle Autonomous AI Databaseを選び、接続先データベースを指定します。この例ではAPEX_Gendevを使います。

接続のNameとCompartmentを指定します。Database DetailsでSelect databaseを選ぶと、接続情報を自動入力します。Database Cloud ServiceをOracle Autonomous AI Databaseにし、対象のデータベースを選びます。この手順では、APEX_Gendevを使います。

OCIテナンシ外のデータベースでは、Enter database informationを選び、接続情報を手入力します。

図9:接続の作成

データベースのUsernameにAPP_SCHEMAを入力し、Create password secretを選びます。

図10:ユーザー名を選び、Create password secretをクリックする

ここで指定したUsernameのユーザーが、次の手順で作る認証情報を所有します。続行する前に、CREATE CREDENTIAL権限を持つことを確認してください。

Enter database informationを選んだ場合は、データベースの接続文字列を入力します。

注: 選んだネットワーク経路でホスト名を解決できない場合は、到達可能なIPアドレスを使います。nslookup <database-hostname>でアドレスを調べ、ルーティングやファイアウォールで接続が許可されていることも確認してください。

パスワードのシークレットを作成する

接続には、データベースユーザーのパスワードを保存したVaultシークレットへの参照を設定します。Create password secretをクリックして、作成ダイアログを開きます。

シークレットのNameと、必要に応じてDescriptionを入力します。Vault compartment、Vault、Encryption Key compartment、Encryption Keyの選択を確認してください。環境に適していれば初期選択の値を使い、そうでなければ、この接続に使うVaultと鍵を選びます。

APP_SCHEMAのパスワードを入力し、確認用にも入力してCreateをクリックします。
接続フォームに戻ると、作成したパスワードのシークレットを使えます。

このシークレットは、Database ToolsがAPP_SCHEMAへログインするためのものです。OCIサービスを呼ぶための管理された認証情報は、手順5でIdentityとともに作成します。

図11:ウォレット内容のシークレットを作成する

データベースユーザーのパスワード用に、Vaultシークレットを作成する。

Vaultと暗号化鍵の選択を示す、パスワードシークレットの作成ダイアログ。パスワード値は非表示にしています。

プライベートエンドポイントを選ぶ

注: プライベート接続を使う場合は、Select private endpointを選択します。Private Endpoint compartmentを選び、対象データベースへの接続を提供するPrivate endpointを指定します。

TNS接続文字列のデータベースアドレスに、実際に到達できるエンドポイントを選んでください。テナンシ内の既存エンドポイントでも、別のネットワーク用で、そのデータベースへは接続できない場合があります。

図12:データベースへ到達できるプライベートエンドポイントを選択する

SSLの詳細を設定する

相互TLS(mTLS)認証が有効な場合、またはTLS認証を使い、データベースの証明書が信頼する認証局の署名ではない場合は、ウォレットが必要です。

プライベートエンドポイントを使わない場合は、SSL detailsのWallet formatに**Oracle auto-login wallet (cwallet.sso)**を選びます。

SSOウォレット内容のシークレットがなければ、Create wallet content secretをクリックし、作成します。

接続作成ページのSSO wallet content secretで、APEXGendevWalletを選択します。

図13:データベース接続のウォレットを設定する

接続のIAMポリシーで、データベースパスワードとウォレット内容の両方のシークレットを読めることを確認してください。

実行時サポートを有効にする

Advanced Optionsを展開し、Settingsを開いて、Enable Runtime Supportを有効にします。Runtime IdentityにはResource Principalを選びます。

この設定は、接続にDBTools Identityを作成するために必要です。ここで設定するのは、Database Tools接続の実行時IDです。Autonomous AI Databaseのリソースプリンシパルの設定は、後で別に説明します。

図14:Resource Principalの実行時サポートを有効にする

操作箇所: Advanced Options → Settingsで、Enable Runtime SupportとResource Principalを指定します。

Createをクリックします。Connectionsページに接続が表示されたら開き、接続できることを検証します。エラーがある場合は、Identityを作る前に解決してください。

手順5:Identityを作成して確認する

接続を開き、IdentitiesタブでCreate Identityをクリックします。

図15:Identityを作成する

分かりやすいNameを入力し、Credential KeyをAPEX_OCI_IDENTITYにします。このキーがデータベース認証情報の名前になるため、APEXで設定できるよう控えておきます。

図16:DBTools Identityと、それに関連付けたデータベース認証情報

Createをクリックします。最初はCreatingと表示し、準備が整うとActiveになります。

図17:Identityの作成中

SQLクライアントからAPP_SCHEMAとして接続し、認証情報が存在することを確認します。

select credential_name, username, comments from user_credentials where credential_name = 'APEX_OCI_IDENTITY';

図18:確認用のSQLクエリ

Creatingのままの場合は、データベースへの接続、パスワードのシークレット、ユーザーの認証情報作成権限を確認します。

手順6:Database Tools Identityをリフレッシュして検証する

ここまでで、動的グループ、IAMポリシー、Database Tools接続を用意できました。接続に戻り、IdentitiesタブでIdentityを選び、Actions → Refreshを実行します。リフレッシュ後、Validateで、データベース認証情報とリソースプリンシパルを経由する認証が動作することを確認します。

失敗する場合は、接続からVaultシークレットへのアクセス、Identityの動的グループのルール、対象サービスのポリシー、データベースへの接続、データベースから外部へのHTTPS設定を確認します。IAMポリシーの変更には反映まで時間がかかる場合があるため、有効になってから再度リフレッシュと検証を行ってください。

図19:接続を検証する

手順7:APEX Web Credentialを作成する

APEXでは、Database Tools Identityを次の2通りで利用できます。

  • インスタンス認証情報: APEXインスタンス内のワークスペースをまたいで利用できます。
  • スキーマ認証情報: 解析スキーマから、そのデータベース認証情報にアクセスできるワークスペースだけで利用できます。

インスタンス認証情報を使う

最初に、インスタンスのデータベース認証情報を有効にします。

begin
apex_instance_admin.set_parameter('INSTANCE_DBMS_CREDENTIAL_ENABLED', 'Y'); 
end;
/

データベース認証情報は、APEXエンジンスキーマからローカルオブジェクトとして参照できる必要もあります。認証情報へのEXECUTEを付与し、エンジンスキーマにシノニムを作成します。

grant execute on APP_SCHEMA.APEX_OCI_IDENTITY to APEX_260200;
create synonym APEX_260200.APEX_OCI_IDENTITY
   for APP_SCHEMA.APEX_OCI_IDENTITY;

環境に対応するAPEXエンジンスキーマを指定してください。

準備ができたら、Workspace Utilities → Web Credentialsへ進み、新しいWeb Credentialを作成します。名前を入力し、Authentication TypeをOCI Native Authenticationにして、Use Database Credentialを有効にします。認証情報のスコープにはInstanceを選びます。

データベース認証情報名は自動で入力されるはずです。入力されない場合は、APEX_OCI_IDENTITYを指定します。

プロパティ値
NameOCI Database Credential
Static IDoci-db-credential
Authentication TypeOCI Native Authentication
Use Database CredentialEnabled(有効)
Database Credential scopeInstance
Database Credential NameAPEX_OCI_IDENTITY

Createをクリックします。インスタンス認証情報なので、同じAPEXインスタンスのほかのワークスペースでも、この操作を繰り返せます。

図20:インスタンスレベルのWeb Credentialを作成する

注: 上の手順は、Oracle Database 23aiと26aiにのみ適用します。19cでは、必要なインスタンス認証情報をAPEXスキーマに直接作成してください。認証情報へのシノニムを作成する方法では動作しません。

APEXのスキーマ認証情報を使う

スキーマ認証情報では、ワークスペースの解析スキーマからアクセスできるデータベース認証情報だけを利用できます。ワークスペースのスキーマ自身が所有しているか、その認証情報へのEXECUTE権限を持ち、ローカルまたはパブリックのシノニムが存在している必要があります。

先ほどと同様に名前を入力し、Authentication TypeをOCI Native Authenticationにして、Use Database Credentialを有効にします。スコープはSchemaを選び、APEX_OCI_IDENTITYを入力します。

認証情報名の前にスキーマ名は付けられません。APP_SCHEMA.APEX_OCI_IDENTITYではなく、APEX_OCI_IDENTITYと指定してください。APEXでローカルのデータベースオブジェクトとして解決するため、必要なEXECUTE権限とシノニムを、あらかじめ用意しておく必要があります。

Createをクリックします。スキーマ認証情報は、割り当てられた解析スキーマから、そのデータベース認証情報にアクセスできるワークスペースだけで利用できます。

図21:APEXワークスペースから、Database Toolsのデータベース認証情報を参照する

手順8:REST要求をテストする

これで、RESTデータソースとAPEX_WEB_SERVICEの呼び出しにWeb Credentialを使えます。たとえば、SQL Workshop → SQL CommandsでAPP_SCHEMAを選び、テナンシ内のコンパートメント一覧を取得する、次のREST API呼び出しを実行します。

select apex_web_service.make_rest_request(
        p_url =>
           'https://identity.us-ashburn-1.oci.oraclecloud.com/20160918/'
           || 'compartments/?compartmentId=<tenancy_ocid>',
        p_http_method => 'GET',
        p_credential_static_id => 'oci-db-credential'
      ) as response
from dual;

<tenancy_ocid>を使用するテナンシのOCIDに置き換え、環境に適したOCI Identityエンドポイントを使ってください。

ここで指定するoci-db-credentialは、APEX Web CredentialのStatic IDです。このAPIにAPEX_OCI_IDENTITYを直接渡すわけではありません。APEXでWeb Credentialを基に、データベースの認証情報を探します。

正しく設定できていれば、コンパートメント情報を含むJSONが返ります。RESTデータソースでも、認証に同じWeb Credentialを選び、レスポンスの構造を検出して、作成したデータプロファイルをアプリケーションで使えます。

図22:Database Tools Identityを参照するAPEX Web Credentialで、OCIを呼び出す

Autonomous AI Databaseのリソースプリンシパルを使う

アプリケーションがAutonomous AI Databaseで動作する場合は、そのリソースプリンシパルを利用できます。Autonomous AI Databaseのリソースを含むIAM動的グループを作成し、対象サービスで必要な権限を付与します。

ADMINとして、データベースとアプリケーションの解析スキーマのリソースプリンシパルを有効にします。

begin
    dbms_cloud_admin.enable_resource_principal;
    dbms_cloud_admin.enable_resource_principal(
        username => 'APP_SCHEMA'
    );
end;
/

これらの呼び出しにより、OCI$RESOURCE_PRINCIPALを利用できるようになります。前提条件と検証は、Autonomous AI Databaseのリソースプリンシパルの設定に従ってください。

OCI Native Authenticationを使うAPEX Web Credentialを作成し、Use Database Credentialを有効にしてSchemaを選びます。データベース認証情報名にはOCI$RESOURCE_PRINCIPALを指定します。前述のアクセスルールに従い、解析スキーマからローカルオブジェクトとして解決できることを確認してください。

問題が起きたときの確認項目

症状確認すること
Database Tools IdentityがCreatingのまま接続先へ到達できるか、データベースパスワードのシークレットが正しいか、CREATE CREDENTIAL権限があるか。
APEXで認証情報を解決できない認証情報名、選んだスコープ、EXECUTE権限、必要なシノニム。
OCIで要求を拒否されるIdentityの状態、動的グループへの所属、IAMポリシー、対象リソースまたはテナンシ。
サービスに到達できないデータベースから外部への接続、適用されるネットワークACL、TLS設定。
最近のIAM変更がアクセスに反映されないDatabase Tools Identityをリフレッシュする。Autonomous AI Databaseでは、リソースプリンシパルのトークンキャッシュも考慮する。

データベースの認証情報とIAM権限を用意できれば、APEX側の設定は少なく済みます。OCI用Web Credentialを作成し、Use Database Credentialを有効にして、認証情報名を指定します。そのWeb CredentialをRESTデータソースやPL/SQLの呼び出しで使い、基になるIDはAutonomous AI DatabaseまたはDatabase Toolsで管理できます。