クラウド・オブジェクト・ストレージのURIフォーマット

この記事では、DBMS_CLOUDでの操作におけるソース・ファイルURIの形式を説明します。この形式は、使用しているオブジェクト・ストレージ・サービスによって異なります。DBMS_CLOUDは、セキュアな通信を保証し、指定するURIではHTTPSを使用する必要があります(URIの接頭辞はhttps://です)。

Oracle Cloud Infrastructure Object StorageのネイティブURI形式

ノート: Autonomous AI Databaseでは、標準層のストレージ・バケットのみがサポートされます。アーカイブ層のストレージ・バケットはサポートされていません。

商用レルム(OC1)のOracle Cloud Infrastructure Object Storageにソース・ファイルが存在する場合は、次のURI形式を使用することをお薦めします。このURI形式は、Object Storage専用エンドポイントを使用します。詳細は、オブジェクト・ストレージの専用エンドポイントを参照してください。

https://namespace-string.objectstorage.region.oci.customer-oci.com/n/namespace-string/b/bucketname/o/filename

ノート: OCI Object Store専用エンドポイントURLは、商用レルム(OC1)でのみサポートされており、19.24以降で使用できます。

ソース・ファイルがOracle Cloud Infrastructure Object Storageに存在し、商用レルム(OC1)に存在しない場合は、次の形式を使用する必要があります。

https://objectstorage.region.oraclecloud.com/n/namespace-string/b/bucket/o/filename

たとえば、商用レルム(OC1)では、Phoenixデータ・センターの*bucketname*バケット内のファイルchannels.txtのネイティブURIは、次のとおりです:

https://namespace.objectstorage.region.oci.customer-oci.com/n/namespace/b/bucketname/o/channels.txt

この例では、namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

URIはオブジェクト・ストアの右側の省略記号メニューにあるOracle Cloud Infrastructure Object Storageの「オブジェクトの詳細」から確認できます:

  1. Oracle Cloudの横にあるナビゲーション・アイコンをクリックして、Oracle Cloud Infrastructureコンソールを開きます。

  2. Oracle Cloud Infrastructureの左側のナビゲーション・メニューから、「ストレージ」をクリックします。「オブジェクト・ストレージとアーカイブ・ストレージ」で、「バケット」をクリックします。

  3. 「リスト範囲」で、コンパートメントを選択します。

  4. 「名前」列の下のバケット名をクリックします。

  5. 「オブジェクト」タブで、「アクション」を開き、目的のオブジェクトの「オブジェクト詳細の表示」をクリックします。

  6. 「オブジェクトの詳細」ページで、「URLパス(URI)」フィールドに、オブジェクトにアクセスするためのURIが表示されます。

Oracle Cloud Infrastructure Object Storage SwiftのURI形式

商用レルム(OC1)のOracle Cloud Infrastructure Object Storageにソース・ファイルが存在する場合は、次のURI形式を使用することをお薦めします。このURI形式は、Object Storage専用エンドポイントを使用します。詳細は、オブジェクト・ストレージの専用エンドポイントを参照してください。

https://namespace-string.swiftobjectstorage.region.oci.customer-oci.com/v1/namespace-string/bucket/filename

ノート: OCI Object Store専用エンドポイントURLは、商用レルム(OC1)でのみサポートされており、19.24以降で使用できます。

ソース・ファイルがOracle Cloud Infrastructure Object Storageに存在し、商用レルム(OC1)に存在しない場合は、次の形式を使用する必要があります。

https://swiftobjectstorage.region.oraclecloud.com/v1/namespace-string/bucket/filename

たとえば、商用レルム(OC1)のPhoenixデータ・センターの*bucketname*バケット内にあるファイルchannels.txtのSwift URIは、次のとおりです:

https://namespace-string.swiftobjectstorage.us-phoenix-1.oci.customer-oci.com/v1/namespace-string/bucketname/channels.txt

この例では、namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

ノート:ソース・ファイルは、オブジェクト・ストレージ層バケットに格納されている必要があります。Autonomous AI Databaseでは、アーカイブ・ストレージ層のバケットはサポートされていません。詳細は、「オブジェクト・ストレージの概要」を参照してください。

事前認証済リクエストのURLを使用したOracle Cloud Infrastructure Object StorageのURI形式

ソース・ファイルがOracle Cloud Infrastructure Object Storageに存在する場合は、Oracle Cloud Infrastructureの事前認証済URIを使用します。事前認証済リクエストの作成時に、一意のURLが生成されます。これで、事前認証済リクエストで識別されたオブジェクト・ストレージ・リソース・ターゲットにアクセスするための一意のURLを組織、パートナまたはサード・パーティのユーザーに提供できるようになります。

ノート:事前認証済アクセスに関するビジネス要件およびセキュリティの問題を慎重に評価します。事前認証済リクエストURLを作成する場合は、有効期限アクセス・タイプに注意して、それらが使用に適していることを確認します。

事前認証済リクエストURLでは、リクエストはアクティブであるかぎり、リクエストで識別されたターゲットへのURLアクセス権を持つすべてのユーザーに付与されます。事前認証済アクセスの運用ニーズを考慮することに加えて、その配布を管理することも同様に重要です。

商用レルム(OC1)のOracle Cloud Infrastructure Object Storageにソース・ファイルが存在する場合は、次のURI形式を使用することをお薦めします。このURI形式は、Object Storage専用エンドポイントを使用します。詳細は、オブジェクト・ストレージの専用エンドポイントを参照してください。

https://namespace-string.objectstorage.region.oci.customer-oci.com/p/encrypted_string/n/namespace-string/b/bucket/o/filename

ノート: OCI Object Store専用エンドポイントURLは、商用レルム(OC1)でのみサポートされており、19.24以降で使用できます。

ソース・ファイルがOracle Cloud Infrastructure Object Storageに存在し、商用レルム(OC1)に存在しない場合は、次の形式を使用する必要があります。

https://objectstorage.region.oraclecloud.com.com/p/encrypted_string/n/namespace-string/b/bucket/o/filename

たとえば、商用レルム(OC1)では、Phoenixデータ・センターのbucketnameバケット内のファイルchannels.txtの事前認証済URIのサンプルは、次のようになります:

https://namespace-string.objectstorage.us-phoenix-1.oci.customer-oci.com/p/2xN-uDtWJNsiD910UCYGue/n/namespace-string/b/bucketname/o/channels.txt

この例では、namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameはバケット名です。詳細は、オブジェクト・ストレージ・ネームスペースの理解を参照してください。

事前認証済URLは、資格証明を作成する必要なく、Oracle Cloud Infrastructureオブジェクト・ストア内のファイルにアクセスするためのURLを取得する任意のDBMS_CLOUDプロシージャで使用できます。credential_nameパラメータをNULLとして指定するか、credential_nameパラメータを指定しないようにする必要があります。

たとえば:

BEGIN
  DBMS_CLOUD.COPY_DATA(
     table_name =>'CHANNELS',
     file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/p/unique-pre-authenticated-string/n/namespace-string/b/bucketname/o/channels.txt',
     format => json_object('delimiter' value ',') );
END;
/

ノート:混合URLのリストが有効です。URLリストに事前検証済URLと認証を必要とするURLの両方が含まれている場合、DBMS_CLOUDは、指定されたcredential_nameを使用して、認証を必要とするURLにアクセスし、事前検証済URLについては指定されたcredential_nameを無視します。

詳細は、事前認証済リクエストの使用を参照してください。

Amazon S3のURI形式

ソース・ファイルがAmazon S3にある場合、ファイルにアクセスするためのURI形式の説明は、「バケットへのアクセス」を参照してください。

たとえば、次の例は、us-west-2リージョンのatpcバケット内にあるファイルchannels.txtを参照します。

https://s3-us-west-2.amazonaws.com/atpc/channels.txt

事前署名済URLは、資格証明を作成する必要なく、Amazon S3オブジェクト・ストア内のファイルにアクセスするためのURLを取得する任意のDBMS_CLOUDプロシージャで使用できます。DBMS_CLOUDプロシージャで事前署名済URLを使用するには、credential_nameパラメータをNULLとして指定するか、credential_nameパラメータを指定しないでください。

詳細は、「他のユーザーとのオブジェクトの共有」を参照してください。

ノート: DBMS_CLOUDでは、バケットにアクセスするための標準のAmazon S3エンドポイント構文がサポートされています。DBMS_CLOUDでは、Amazon S3のレガシー・エンドポイントはサポートされていません。詳細は、「レガシー・エンドポイント」を参照してください。

Azure Blob StorageのURI形式

ソース・ファイルがAzure Blob Storageに存在する場合、ファイルにアクセスするためのURI形式の詳細は、「Resource URI Syntax」を参照してください。

たとえば、次の例は、ストレージ・アカウントatpc_useratpcコンテナ内にあるファイルchannels.txtを参照します。

https://atpc_user.blob.core.windows.net/atpc/channels.txt

ノート: Shared Access Signatures (SAS) URLは、資格証明を作成する必要なく、Azure Blob Storage内のファイルにアクセスするためのURLを取得する任意のDBMS_CLOUDプロシージャで使用できます。Shared Access Signature (SAS) URLを使用するには、credential_nameパラメータをNULLとして指定するか、credential_nameパラメータを指定しないでください。

詳細は、「Shared Access Signatures (SAS)を使用したAzure Storageリソースへの制限されたアクセスの付与」を参照してください。

Amazon S3互換のURI形式

DBMS_CLOUDは、次のサービスを含むAmazon S3互換URLをサポートするオブジェクト・ストレージ・サービス実装をサポートしています:

ノート: Amazon S3互換オブジェクト・ストアでDBMS_CLOUDを使用する場合は、有効な資格証明を指定する必要があります。詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。

Amazon S3互換URIをサポートするサービス上にソース・ファイルが存在する場合は、次のURI形式を使用してファイルにアクセスします:

追加の顧客管理URI形式

DBMS_CLOUDは、事前構成済で認識されたURIsとその完全修飾ドメイン名(FQDNs)に加えて、顧客管理エンドポイントURIsの適切な認証スキームを決定できません。このような場合、DBMS_CLOUDは、適切なURIスキームを使用して、顧客管理エンドポイントの認証スキームを識別します。

URIスキーム 認証タイプ アクセス方法の説明 URIの例
基本:// 基本的な認証 データベース資格証明オブジェクトに格納されたユーザー名とパスワードは、HTTPリクエストの認証に使用されます basic://api.github.com/users/myaccount
Bearer:// Bearerトークンの認証 データベース資格証明オブジェクトのパスワード・フィールドに格納されたBearerトークンは、HTTPリクエストの認可ヘッダーを指定するために使用されます bearer://api.sendgrid.com/v3/resource
oci:// OCIのネイティブ データベース資格証明オブジェクトから取得され、OCI認証プロトコルを使用したリクエストの署名に使用されるOCI署名キー oci://objectstorage.us-ashburn-1.oraclecloud.com
public:// 認証を行いません。 パブリックURL public://cms.data.gov/
s3:// Amazon Web Services S3互換 データベース資格証明オブジェクトのユーザー名/パスワード・フィールドから取得されたアクセス・キーおよび秘密キー、およびHTTPリクエストに対して実行されるS3互換認証。 s3://bucket.myprivatesite.com/file1.csv

例:

S3互換認証を使用する顧客管理エンドポイント。

この例では、新しいURIsについて、DBMS_NETWORK_ACL_ADMINパッケージを使用してパブリックまたはプライベートのホスト名パターンを追加する方法を示します。ユーザーADMINによって実行されるコード・ブロックにより、ユーザーSCOTTHTTPSアクセスがドメイン*.myprivatesite.comのエンドポイントに対して有効になります。次に、ユーザーSCOTTが新しく有効化されたエンドポイントにアクセスする方法を示します。ユーザーSCOTTの資格証明MY_CREDには、URI接頭辞で示されるHTTPリクエストに対して実行されるS3互換認証のアクセス・キーおよび秘密キーを格納する必要があることに注意してください。

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => '*.myprivatesite.com',
         ace => xs$ace_type(privilege_list => xs$name_list('http'),
                            principal_name => 'SCOTT',
                            principal_type => xs_acl.ptype_db),
         private_target => TRUE   );
END;
/

BEGIN
   DBMS_CLOUD.get_object(
       credential_name => 'MY_CRED',
       object_uri      => 's3://bucket.myprivatesite.com/file1.csv',
       directory_name  => 'MY_DIR'  );
END;
/

パブリック・アクセスを持つ顧客管理エンドポイント

この例では、SCOTTユーザーを登録してパブリックREST APIにアクセスする方法を示します。ADMINユーザーは、SCOTTユーザーにアクセスできるように、ホストのネットワークACLを作成します。

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'data.cms.gov',
         ace => xs$ace_type(privilege_list => xs$name_list('http'),
                            principal_name => 'SCOTT',
                            principal_type => xs_acl.ptype_db)
   );
END;
/

SELECT DBMS_CLOUD.get_response_text(
          DBMS_CLOUD.send_request(
              uri     => 'public://data.cms.gov/provider-data/api/1/datastore/imports/a',
              method  => DBMS_CLOUD.METHOD_GET,
              headers => JSON_OBJECT('Accept' VALUE 'application/json')
          )
       )
   FROM DUAL;
/