2022年3月2日水曜日

Autonomous Databaseが提供するツールをブロックする

 オラクルの公式ブログにて、製品マネージャのTodd BottgerさんがAutonomous Databaseが提供しているツールにアクセスするURLの一覧を載せています。こちらの記事になります。

Oracle Autonomous Database Vanity URLs Part 3: Blocking ORDS-Provided Developer and Administrator Tools

それぞれのパスについて説明されていますが、作成直後のAlways FreeのAutonomous Databaseにアクセスして、どのようなサービスが提供されているか確認してみました。

ブロックする対象:/sql-developer (末尾一致)


データベース・アクションの入り口です。

https://[エンドポイント名]/ords/sql-developer


ブロックする対象:/sign-in/ (末尾一致)


データベース・アクションの入り口でユーザー名を入力し、をクリックすると開く画面です。

https://[エンドポイント名]/ords/[REST別名]/sign-in/?username=ユーザー名&r=_sdw%2F


Autonomous Databaseの管理者ユーザー名はADMINで固定されていますが、アクセスするパスは変更可能です。ユーザーの編集を実行し、ドロワーよりREST別名をデフォルトのユーザー名から変更します。


REST別名(ユーザーの一覧ではORDS別名として表示されます)を変更した場合、データベース・アクションの入り口(/sql-developerへのアクセスで表示される画面)に入力するユーザー名は、このREST別名になります。次に表示される画面(/sign-in/へのアクセスで表示される画面)でデータベースのユーザー名パスワードを入力します。

この他にWebアクセス拡張機能に含まれる設定項目として、承認が必要URLマッピング・タイプがあります。これらはプロシージャORDS_ADMIN.ENABLE_SCHEMAの引数p_auto_rest_authp_url_mapping_typeに対応します。

承認が必要ONにすると、以下のパスから取得できるOpenAPIのドキュメントに認証が必要になります。

https://[エンドポイント名]/ords/[REST別名]/metadata-calalog/

OpenAPIのドキュメントなのでアクセス不可にする必要はないかもしれませんが、禁止する場合はルールに追加する必要があります。英語の元記事のSource Path to Blockには含まれていません


ブロックする対象:/signed-out/ (末尾一致)


データベース・アクションからサインアウトするとリダイレクトされるパスです。


https://[エンドポイント名]/ords/[REST別名]/signed-out/?r=%2Fords%2Fsql-developer



ブロックする対象:/sign-in/session (末尾一致)


ORDSのユーザー・セッションの情報を返します。

https://[エンドポイント名]/ords/[REST別名]/sign-in/session


ブロックする対象:/_/sql (末尾一致)


REST対応SQLを実行するパスです。データベースのユーザー名パスワードによる認証が必要です。

https://[エンドポイント名]/ords/[REST別名]/_/sql

% curl -X POST https://エンドポイント名/ords/admin/_/sql --user ユーザー名:パスワード --header "Content-Type: application/sql" --data $'SELECT * FROM DUAL'


{"env":{"defaultTimeZone":"UTC"},"items":[{"statementId":1,"statementType":"query","statementPos":{"startLine":1,"endLine":2},"statementText":"SELECT * FROM DUAL","resultSet":{"metadata":[{"columnName":"DUMMY","jsonColumnName":"dummy","columnTypeName":"VARCHAR2","precision":1,"scale":0,"isNullable":1}],"items":[{"dummy":"X"}],"hasMore":false,"limit":10000,"offset":0,"count":1},"response":[],"result":0}]}%                                                                              % 



ブロックする対象:/ords/<schema-name>/_sdw/ (先頭一致)


データベース・アクションの画面です。

https://[エンドポイント名]/ords/[REST別名]/_sdw/



ブロックする対象:/ords/_/db-api/ (先頭一致)


データベースAPI呼び出しのパスです。データベースAPIについては、以下を参照のこと。

Oracle REST Data Services API

https://[エンドポイント名]/ords/_/db-api/metadata-catalog/

% curl https://エンドポイント名/ords/_/db-api/stable/metadata-catalog/


{"items":[{"name":"default","links":[{"rel":"canonical","href":"https://エンドポイント名/ords/_/db-api/stable/metadata-catalog/openapi.json","mediaType":"application/vnd.oai.openapi+json;version=3.0"}]}],"links":[{"rel":"self","href":"https://エンドポイント名/ords/_/db-api/stable/metadata-catalog/"},{"rel":"describes","href":"https://エンドポイント名/ords/_/db-api/stable/"}]}

%                                                                                             



ブロックする対象:/ords/<schema-name>/_/db-api/ (先頭一致)


スキーマごとのデータベースAPI呼び出しのパスです。呼び出しに指定したデータベース・ユーザーの権限で、データベースの操作が可能になります。

https://[エンドポイント名]/ords/[REST別名]/_/db-api/stable/database/objects/tables/\?limit=1

% curl --user ユーザー名:パスワード https://エンドポイント名/ords/admin/_/db-api/stable/database/objects/tables/\?limit=1

{"items":[{"owner":"SYS","table_name":"IND$","tablespace_name":"SYSTEM","cluster_name":"C_OBJ#","iot_name":null,"status":"VALID","pct_free":0,"pct_used":0,"ini_trans":0,"max_trans":0,"initial_extent":139264,"next_extent":204800,"min_extents":1,"max_extents":2147483645,"pct_increase":null,"freelists":1,"freelist_groups":1,"logging":"YES","backed_up":"N","num_rows":4361,"blocks":3131,"empty_blocks":0,"avg_space":0,"chain_cnt":0,"avg_row_len":94,"avg_space_freelist_blocks":0,"num_freelist_blocks":0,"degree":"         1","instances":"         1","cache":"    N","table_lock":"ENABLED","sample_size":4361,"last_analyzed":"2022-03-02T06:35:56Z","partitioned":"NO","iot_type":null,"temporary":"N","secondary":"N","nested":"NO","buffer_pool":"DEFAULT","flash_cache":"DEFAULT","cell_flash_cache":"DEFAULT","row_movement":"DISABLED","global_stats":"YES","user_stats":"NO","duration":null,"skip_corrupt":"DISABLED","monitoring":"YES","cluster_owner":"SYS","dependencies":"DISABLED","compression":"DISABLED","compress_for":null,"dropped":"NO","read_only":"NO","segment_created":"YES","result_cache":"DEFAULT","clustering":"NO","activity_tracking":null,"dml_timestamp":null,"has_identity":"NO","container_data":"NO","inmemory":"DISABLED","inmemory_priority":null,"inmemory_distribute":null,"inmemory_compression":null,"inmemory_duplicate":null,"default_collation":"USING_NLS_COMP","duplicated":"N","sharded":"N","external":"NO","hybrid":"NO","cellmemory":null,"containers_default":"NO","container_map":"NO","extended_data_link":"NO","extended_data_link_map":"NO","inmemory_service":null,"inmemory_service_name":null,"container_map_object":"NO","memoptimize_read":"DISABLED","memoptimize_write":"DISABLED","has_sensitive_column":"NO","admit_null":"NO","data_link_dml_enabled":"NO","logical_replication":"ENABLED","staging":"NO","row_change_tracking":"NO","links":[{"rel":"self","href":"https://エンドポイント名/ords/admin/_/db-api/stable/database/objects/tables/SYS,IND%24"}]}],"hasMore":true,"limit":1,"offset":0,"count":1,"links":[{"rel":"self","href":"https://エンドポイント名/ords/admin/_/db-api/stable/database/objects/tables/"},{"rel":"describedby","href":"https://エンドポイント名/ords/admin/_/db-api/stable/metadata-catalog/"},{"rel":"first","href":"https://エンドポイント名/ords/admin/_/db-api/stable/database/objects/tables/?limit=1"},{"rel":"next","href":"https://エンドポイント名/ords/admin/_/db-api/stable/database/objects/tables/?offset=1&limit=1"}]}

%                                                                                             



ブロックする対象:/ords/<schema-name>/soda/  (先頭一致)


SODA for RESTのAPI呼び出しのパスです。HTTP操作のURIについては、こちらのマニュアルに記載があります。

https://[エンドポイント名]/ords/[REST別名]/soda/latest

% curl --user ユーザー名:パスワード https://エンドポイント名/ords/admin/soda/latest


{"items":[],"hasMore":false}% 


テストした環境ではSODAコレクションを作成していないので、データは返ってこなかったですが、呼び出しは成功しています。

ブロックする対象:/_/public-properties/ (末尾一致)


ORDSが公開している各種のプロパティを返すパスとのことです。

https://[エンドポイント名]/ords/[REST別名]/_/public-properties/

% curl https://エンドポイント名/ords/admin/_/public-properties/


{"items":[],"count":0,"hasMore":false}

% 



ユーザー名の指定がなくても、呼び出しは成功しています。


ブロックする対象:/ords/<schema-name>/_adp (先頭一致)



データ・ロードなどの機能を呼び出すパスです。データ・ロードはデータベース・アクションから呼び出されます。

https://[エンドポイント名]/ords/[REST別名]/_sdw/../adpmld/_services/objects/search/



元記事では、これらのパスをロード・バランサでブロックする方法について説明されています。

以上になります。

公開が不要なエンドポイントについては、できるだけブロックしておいた方が良いでしょう。