※本記事は、Todd Bottger による“Oracle Autonomous Database Vanity URLs Part 2: Blocking Developer and Administrator Tools”を翻訳したものです。
2021年 10月 15日
Oracle Autonomous Database on Shared Infrastructure (ADB)の最近の進歩により、顧客がアプリケーションを「VanityURL」で実行できるようになりました。しかしアプリケーション・ランタイムのユーザーに公開し続けながら、このURLで開発者ツールおよび管理者ツールへのアクセスをブロックするかが課題となる場合があります。このブログ記事では、特定のOracle APEXページ、Vanity URLのすべてのデータベース・アクションおよびREST対応SQLをブロックしながら、ユーザーがランタイムAPEXアプリケーションおよびカスタムRESTエンドポイントにアクセスできるようにする、ADB VanityィURLアーキテクチャに対するオプションの拡張について説明します。
前提条件
続行する前にいくつかの項目を設定する必要があります。まだ行っていない場合は、ブログ投稿「Oracle Autonomous DatabaseでのAPEXおよびORDSのバニティURLの概要」の説明に従って、ADBでバニティURLを構成します。次の構成ステップは、ブログ投稿の追加情報です。
ADBおよびロード・バランサが実行中であり、アクセス可能であることを確認します。OCIコンソールでADBおよびロード・バランサのステータスを確認します。仮想クラウド・ネットワーク(VCN)でADBにアクセスできることを確認します。バニティURLで、VCNの外部にあるAPEXサインインページをロードできることを確認します。
また、ADBで1回かぎりのAPEX設定ステップを実行する必要があります。完了時には、APEXワークスペース、ワークスペースへのアクセス権を持つ開発者アカウント、およびワークスペースで実行されている少なくとも1つのアプリケーションがあります。APEXを初めて使用する場合は、APEXを始めるで説明されている設定ステップに従います。
このブログ投稿のデモンストレーションでは、HRAppsワークスペース、ProjectTasksアプリケーション、DevUserアカウントおよびapex.example.comドメインを使用します。
デフォルトのAPEXアプリケーションの設定
最初は、ベース・バニティURLにAPEXサインイン・ページが表示され、APEXアプリケーション・ビルダー、SQLワークショップなどの開発者ツールにアクセスできます。このサインイン・ページには、APEX管理サービスへのリンクも表示されます。後で、バニティURLのすべての開発者ツールおよび管理者ツールへのアクセスをブロックしますが、まずデフォルトのサインイン・ページをライブAPEXアプリケーションに置き換える必要があります。
ステップ1 – デフォルト・アプリケーションの選択
新しいブラウザ・タブで、バニティURLに移動し、APEXワークスペースにサインインして、アプリケーション・ビルダーを開きます。ワークスペースにデプロイされたアプリケーションのリストを確認します。APEXインスタンスに複数のワークスペースがある場合は、他のワークスペースにサインインし、アプリケーション・ビルダーでそれらのアプリケーション・リストを確認します。
ベース・バニティURLに表示する特定のアプリケーションを選択する必要があります。APEXインスタンスに1つのアプリケーションしかない場合は、それがデフォルトのアプリケーションです。APEXインスタンスに複数の重要なアプリケーションがある場合は、それらのアプリケーションへの参照およびリンクを含むページで新規アプリケーションを作成し、それをデフォルトとして選択することを検討してください。決定は、必要に応じて後で変更できます。デフォルト・アプリケーションを決定したら、アプリケーション・ビルダーでこのアプリにドリルして編集のために開きます。

ステップ2 – アプリケーションの別名の検索
アプリケーション・ビルダーのアプリケーション・ホームページで、「アプリケーション・プロパティの編集」をクリックします。

「アプリケーション定義の編集」ページで、「アプリケーションの別名」を見つけます。この別名は後で必要になるため、覚えておいてください。別名では大文字と小文字は区別されません。変更内容を破棄して終了するには、「取消」をクリックします。

ステップ3 – アプリケーションURLの決定
ステップ2のアプリケーションの別名を使用して、APEXアプリケーションを起動してランディング・ページを表示するためのバニティURLを決定します。このURLの形式は次のとおりです。
https://<domain>/ords/r/<workspace>/<alias>
例: https://apex.example.com/ords/r/hrapps/projecttasks
この形式で、独自のドメイン、ワークスペース、および別名を入力します。このURLでアプリケーションにアクセスできることを確認します。続行する前に完全なURLをメモします。
ステップ4 – URLリダイレクト・ルールの作成
次に、ベース・バニティURLページ(APEXサインイン・ページ)をステップ1で選択したAPEXアプリケーションと置き換えるようにロード・バランサに指示する、ロード・バランサ・ルール・セットを作成します。このルール・セットには、選択したアプリケーションにベース・バニティURLへのリクエストを渡す、単一のサーバー側のURLリダイレクト・ルールが含まれます。
まず、別のブラウザ・タブを開き、OCIコンソールにサインインして、「ロード・バランサの詳細」ページにナビゲートします。

「リソース」までスクロールし、「ルール・セット」を選択して、「ルール・セットの作成」をクリックします。

「ルール・セットの作成」ダイアログで、ルール・セットに「名前」を指定し、「URLリダイレクト・ルールの指定」を選択し、次に示すように/ords/ソース・パスのルールを作成します。「一致タイプ」で「接尾辞一致」を選択し、「プロトコル」で「HTTPS」を選択します。「ホスト」にバニティURLのドメインを入力し、「パス」にステップ3のURLパスを入力します。このパスは /ordsで始まり、別名で終わる必要があります。他のフィールドはデフォルトのままでかまいません。完了後、「作成」をクリックします。

「作業リクエスト送信済」メッセージ・ボックスが表示されます。表示された「ステータス」が「成功」に変更されるまで待機し、「閉じる」をクリックして続行します。

「ルール・セット」に戻り、新しいルール・セットがリストに表示されることを確認します。ルールは、ロード・バランサ・リスナーが更新されるまで有効にならないことに注意してください。これは、以降のステップで行います。

APEXツールのブロック
ロード・バランサ・ルール・セットをAPEXの特別な機能と組み合せて、APEXアプリケーション・ビルダー、SQLワークショップ、管理サービスおよびその他のツールへのバニティURLアクセスをブロックすることは簡単です。ロード・バランサに送信されるすべてのリクエストにヘッダーを追加する新しいリクエスト・ヘッダー・ルールを作成します。また、APEXで、ヘッダーが存在する場合に開発者ツールおよび管理者ツールへのアクセスをブロックするパラメータを設定します。
ステップ5 – リクエスト・ヘッダー・ルールの作成
「ルール・セット」のリストで、新しいルール・セットにドリルダウンして、その「ルール・セットの詳細」ページを表示します。上部にある「編集」ボタンを見つけます。クリックして続行します。

「ルール・セットの編集」ダイアログで、「リクエスト・ヘッダー・ルールの指定」を選択し、次に示すように新しいルールを作成します。「リクエスト・ヘッダーの追加」が選択されていることを確認します。「ヘッダー」に名前を入力し、その「値」を1に設定します。完了したら「変更の保存」をクリックし、作業リクエストが成功するのを待機します。

「ルール・セットの詳細」ページの「リソース」で、「リクエスト・ヘッダー・ルール」の数が1ずつ増加していることを確認します。ルールは、ロード・バランサ・リスナーが更新されるまで有効にならないことに注意してください。
ステップ6 – APEXパラメータの設定
ここでは、必要なAPEXパラメータを設定するための短いPL/SQLスクリプトを実行します。このスクリプトは、データベース・アクションのコンポーネントであるSQL Developer Webを使用して実行するため、バニティURLでデータベース・アクションをブロックする前に、このステップを完了することが重要です。
新しいブラウザ・タブでデータベース・アクションを開きます。バニティURLのデータベース・アクションへの直接リンクは次のようになります。
https://<domain>/ords/sql-developer
例: https://apex.example.com/ords/sql-developer
プロンプトで、管理者アカウントを使用してADBにサインインします。「ユーザー名」にADMINを入力します。「パスワード」にデータベースを作成するときに設定したパスワードを入力します。

「データベース・アクションの起動パッド」ページで、「SQL」をクリックします。

SQL Developer Webが表示されます。「ワークシート」ペインには、SQL文およびPL/SQLスクリプトを開発および実行するための空のワークシートが含まれています。次のコード・スニペットをコピーして、このワークシートに貼り付けます。
begin
apex_instance_admin.set_parameter(‘RESTRICT_DEV_HEADER’, ‘ADB-Public-Access’);
commit;
end;
/
「ワークシート」ペインの上部にある「スクリプトの実行」ボタンを見つけてクリックします。スクリプトが実行されるまで数秒待ちます。

「問合せ結果」ペインで、スクリプトが正常に完了したことを確認します。

データベース・アクションのブロック
次に、追加のロード・バランサ・ルールを作成して、SQL Developer Web、Data Modeler、データベース・ユーザーおよびその他のデータベース・アクション・ツールへのバニティURLアクセスをブロックします。特定のソース・パスでロード・バランサに着信するリクエストをブロックするためのURLリダイレクト・ルールを追加します。このパスがブロックされると、ユーザーにはデータベース・アクションのサインイン・プロンプトが引き続き表示されますが、サインインは正常に完了せず、ユーザーはデータベース・アクション・コンポーネントにアクセスできません。
ステップ7 – 別のURLリダイレクト・ルールの追加
このステップは、ステップ4とステップ5で行ったものと似ています。「ルール・セットの詳細」が表示されているブラウザ・タブに戻ります。「編集」をクリックして、「ルール・セットの編集」ダイアログを再度開きます。以前に「URLリダイレクト・ルールの指定」を選択した場合は、次に示すように、/_sdw/ソース・パスに別のルールを追加します。「照合タイプ」で「接尾辞一致」を選択します。存在しないURLパス/ords/blockedにリダイレクトし、最終的に404エラーがクライアントに返されます。前と同様に他のフィールドに入力します。次のステップに進むには、移動しないでください。

REST対応SQLのブロック
まだルール・セットの編集中に、REST対応SQLへのアクセスをブロックするための最終URLリダイレクト・ルールを追加します。このADBサービスは、ユーザーがRESTを介して任意のSQL文を実行できるようにするため、ランタイムのみの環境でブロックする必要があります。ルールは、ADBで構成するカスタムRESTエンドポイントへのアクセスをブロックしません。
ステップ8 – 最終URLリダイレクト・ルールの追加
「URLリダイレクト・ルールの指定」で、次に示すように、/_/sql ソース・パスに別のルールを追加します。完了したら「変更の保存」をクリックし、作業リクエストが成功するのを待機します。ルールは、次のステップが完了するまで有効にならないことに注意してください。

変更のデプロイ
ステップ9 – リスナーへのルール・セットのアタッチ
ルール・セットを有効にするには、ロード・バランサ・リスナーにルール・セットをアタッチする必要があります。ブラウザで、「ロード・バランサ詳細」にナビゲートします。「リソース」までスクロールし、「リスナー」を選択します。このリストでリスナーを見つけ、右端にあるドロップダウン・メニューをクリックして、「編集」を選択します。

「リスナーの編集」ダイアログで、「ルール・セット」までスクロールし、新しいルール・セットを追加します。完了したら「変更の保存」をクリックし、作業リクエストが完了するまでしばらく待機します。

テストおよび検証
ステップ10 – ツールへのアクセスの試行
これでテストの準備ができました。使用しているブラウザとは異なるブラウザを開き、キャッシュをクリアします。バニティURLでブロックされたツールへのアクセスを試行します。次のことを確認します。
- ベース・バニティURLにデフォルトのAPEXアプリケーションが表示されます。
- https://<domain>およびhttps://<domain>/ords/にナビゲートし、アプリケーションの別名を含む完全なURLにデフォルト・アプリケーションが表示されていることを確認します。
- 例: https://apex.example.com
- APEX管理サービス、アプリケーション・ビルダーまたはSQLワークショップにアクセスできません。
- https://<domain>/ords/f?p=4500およびhttps://<domain>/ords/f?p=4050にナビゲートし、404エラーが表示されることを確認します。
- 例: https://apex.example.com/ords/f?p=4500
- データベース・アクションURLパスへのリクエストに404エラーが返されます。
- https://<domain>/ords/sql-developerにナビゲートします。管理者としてサインインを試行した後、/ords/admin/_sdw/のデータベース・アクション・ページの表示が404エラーで/ords/blockedにリダイレクトされることを確認します。
- 例: https://apex.example.com/ords/sql-developer
- REST対応SQL URLパスへのリクエストに404エラーが返されます。
- https://<domain>/ords/admin/_/sqlにナビゲートし、404エラーで/ords/blockedにリダイレクトされることを確認します。
- 例: https://apex.example.com/ords/admin/_/sql
バニティURLで開発者ツールおよび管理者ツールへのアクセスをブロックしました。
まとめ
開発者ツールおよび管理者ツールへのアクセスのブロックは、Oracle Autonomous Database Vanity URLアーキテクチャの重要なオプションの拡張機能です。ロード・バランサ・ルール・セットと特殊なAPEXパラメータを使用して、これを実行できるようになりました。ルールを作成してパラメータを設定すると、ランタイムAPEXアプリケーションおよびカスタムRESTエンドポイントにアクセス可能なまま、ツールはバニティURLでブロックされます。
このブログ投稿は、可能なADBバニティURL拡張に焦点を当てていますが、構成を拡張して適応できる多くの方法があります。たとえば、オプションで、ロード・バランサの前にWeb Application Firewall (WAF)を配置したり、同じドメイン上で静的WebページをホストするWebサーバーを指す2つ目のバックエンドを追加したりできます。
* * * * * * * * * * * * *
戻る<< Oracle Autonomous Database での APEX および ORDS のVanity URL の概要

Todd Bottger
Todd Bottgerは、オラクル社のOracle Databaseチームの製品管理ディレクターです。
