2024年1月17日水曜日

APEXのWeb資格証明を作成してAzure Blob Storageを操作する

前回の記事ではAutonomous Database上にAzureのリソース・プリンシパルを作成し、それをDBMS_CLOUDにクリデンシャルとして与えてAzure Blob Storageを操作しました。

今回はAzure Blob Storageを操作するために、APEXのWeb資格証明を作成します。作成したWeb資格証明をAPEX_WEB_SERVICE.MAKE_REST_REQUESTに与えて、Azure Blob Storageを操作します。

前回の記事で準備したストレージアカウントおよびコンテナーをそのまま使用します。

Microsoft Entra ID概要を開きます。テナントIDはOAuth2認証で呼び出すトークンURLに含めるため、記録しておきます。

サービスプリンシパルとなるアプリケーションを登録します。

アプリの登録を開きます。


新規作成をクリックします。


名前Azure for APEXとします。サポートされているアカウントの種類として、この組織ディレクトリのみに含まれるアカウント(既定のディレクトリのみ - シングルテナント)を選択します。

登録をクリックします。


アプリケーションAzure for APEXが作成されます。

アプリケーション(クライアント)IDは、APEXのWeb資格証明に設定する値なので記録しておきます。


証明書とシークレットを開きます。クライアントシークレットを新規作成します。

クライアントシークレットを開き、新しいクライアントシークレットをクリックします。


説明および有効期限に適当な値を入力し、追加をクリックします。


追加されたクライアントシークレットをコピーします。シークレットIDではありません。この値はAPEXでWeb資格証明を作成する際に使用します。

作成直後しか値を参照することはできないので、忘れずにコピーして記録しておきます。


APIのアクセス許可を開き、アクセス許可を追加します。

アクセス許可の追加をクリックします。


APIアクセス許可の要求が開きます。

Microsoft APIAzure Storageを選択します。


アクセス許可user_impersonationにチェックを入れます。

アクセス許可の追加をクリックします。


アクセス許可としてuser_impersonationが追加されます。

これをクリックして開き、Resource App IDを確認します。


Resource App IDをコピーします。この値がOAuth2認証のスコープになります。


APEXからアクセスするAzureのストレージアカウントを開きます。

アクセス制御(IAM)を開き、ロールの割り当ての追加をクリックします。


割り当てるロールとしてストレージBLOBデータ所有者を選択します。

次へ進みます。


アクセスの割り当て先としてユーザー、グループ、またはサービスプリンシパルを選択します。

メンバーを選択するをクリックして、メンバーとして先ほど作成したアプリケーションAzure for APEX選択します。

レビューと割り当てをクリックします。レビュー画面が表示されるので、再度レビューと割り当てをクリックします。


ストレージアカウントにロールの割り当てが完了したら、Azure側の構成は完了です。


APEXの作業に移ります。

ワークスペース・ユーティリティWeb資格証明を開きます。

作成をクリックします。


名前Azure for APEX静的IDAZURE_FOR_APEXとします。認証タイプOAuth2クライアント資格証明フローを選択します。

OAuthスコープとしてAPIのアクセス許可user_impersonationResource App IDの末尾に/.defaultを加えた文字列を設定します。

クライアントIDまたはユーザー名には、アプリケーションAzure for APEXアプリケーション(クライアント)IDを設定します。

クライアント・シークレットまたはパスワードに、クライアントシークレットの値を設定します。

作成をクリックします。


Web資格証明としてAzure for APEXが作成されました。


以上でAPEXからAzure Blob Storageを操作する準備ができました。

SQLワークショップSQLコマンドから、Azure Blob Storageの操作を行います。

最初にファイルをアップロードします。以下のコードを実行します。

引数p_token_urlにOAuth2のアクセス・トークンを要求するURLを与えます。テナントIDの部分を置き換える必要があります。また、ストレージアカウントやコンテナーも環境に合わせて置き換えます。

本文がmy first uploadであるファイルをtest.txtとしてアップロードしています。



ファイルtest.txtがアップロードされたかどうか確認します。コンテナーに含まれるBlobを一覧します。


ファイルtest.txtがリストに含まれていることが確認できます。


アップロードされたファイルtest.txt取得して、内容を表示します。


ファイルの内容としてmy first uploadが表示されます。


ファイルtest.txt削除します。



再度、コンテナーに含まれるBlobを一覧します。ファイルtest.txtが消去されていることが確認できます。


APEXのREST API呼び出しの仕組みを使って、Azure Blob Storageの操作ができることが確認できました。

Oracle APEXのアプリケーション作成の参考になれば幸いです。