リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセス

Autonomous Databaseでは、Oracle Cloud Infrastructureリソース・プリンシパルを使用できます。お客様またはテナンシ管理者は、Oracle Cloud Infrastructureポリシーと、リソース・プリンシパルがOracle Cloud Infrastructureリソースにアクセスできるようにする動的グループを定義します。資格証明オブジェクトを作成する必要はなく、Autonomous Databaseは、指定したOracle Cloud Infrastructureリソースへのアクセスに使用するリソース・プリンシパル資格証明を作成および保護します。

リソース・プリンシパルを使用したOracle Cloud Infrastructureリソースへのアクセスについて

リソース・プリンシパルを使用して、Oracle Cloud Infrastructureリソースを認証およびアクセスできます。

リソース・プリンシパルは、データベースが他のOracle Cloud Infrastructureサービスに対して自身を認証できるようにする一時セッション・トークンおよびセキュアな資格証明で構成されます。リソース・プリンシパルを使用してサービスにアクセスする場合、Autonomous Databaseの資格証明とともに格納されるトークンは、動的グループにアクセス権が付与されているリソースに対してのみ有効です。

リソース・プリンシパルを使用するには、ユーザーまたはテナンシ管理者が、リソース・プリンシパルを使用してOracle Cloud InfrastructureリソースにアクセスできるようにするOracle Cloud Infrastructureポリシーおよび動的グループを定義します。資格証明オブジェクトを作成する必要はなく、Autonomous Databaseは、指定したOracle Cloud Infrastructureリソースへのアクセスに使用するリソース・プリンシパル資格証明を作成および保護します。

たとえば、Autonomous Databaseの使用中に、Oracle Cloud Infrastructureリソースを使用して次のことを実行できます:

  • オブジェクト・ストレージ・バケットからデータにアクセスし、データに対してなんらかの操作を実行し、変更したデータをオブジェクト・ストレージ・バケットに書き戻します。
  • ボールト、キーまたはシークレットにアクセスします。

  • 作業リクエストをリストするか、作業リクエスト・エラーをリストします。

データベースを操作する場合、データベース・ユーザーとして認証してアクセスします。Autonomous DatabaseユーザーにはOracle Cloud Infrastructure Identity and Access Management (IAM)アイデンティティがないため、Autonomous Databaseユーザーは、データベース資格証明を使用してOracle Cloud Infrastructureサービスにアクセスできません。リソース・プリンシパルを使用しない場合は、Oracle Cloud Infrastructureリソースにアクセスするための資格証明を取得し、Autonomous Databaseからリソースにアクセスするための資格証明オブジェクトを作成する必要があります。

リソース・プリンシパルにより、Oracle Cloud Infrastructureサービスに対するアクションの実行が許可されるリソースを認可できます。各リソースには、それぞれのアイデンティティがあり、追加された証明書を使用して認証を行います。これらの証明書は自動的に作成され、リソースに割り当てられ、ローテーションされるため、リソースにアクセスするために独自の資格証明を作成および管理する必要がなくなります。

Autonomous Databaseでは、リソース・プリンシパルを使用して、次のインタフェースを使用してOracle Cloud Infrastructure APIに対して認証できます:

  • 資格証明引数を取るDBMS_CLOUDプロシージャおよびファンクション
  • Oracle Cloud Infrastructure PL/SQL SDK API

リソース・プリンシパルを使用して認証する場合、Autonomous Databaseには、Oracle Cloud Infrastructureリソースにアクセスするためのセキュアな方法が用意されています。

Autonomous Databaseでリソース・プリンシパルを設定するには、いくつかのステップが必要です:

リソース・プリンシパルを使用して認証する場合、Oracle Cloud Infrastructureリソースにアクセスするための資格証明を作成および管理する必要はありません。Autonomous Databaseにより、リソース・プリンシパルが使用可能になり、リソース・プリンシパルを保護されます。

Autonomous Databaseでリソース・プリンシパルを使用するための前提条件の実行

リソース・プリンシパルを使用してOracle Cloud Infrastructureリソースをコールする前に、Oracle Cloud Infrastructureテナンシ管理者は、リソース・プリンシパル権限を定義するOracle Cloud Infrastructureポリシー、動的グループおよびルールを作成する必要があります。

Autonomous Databaseでリソース・プリンシパルを使用する前に、次のステップを実行します:

  1. Oracle Cloud Infrastructureの動的グループを作成します。
    1. Oracle Cloud Infrastructureコンソールで「アイデンティティとセキュリティ」をクリックし、「動的グループ」をクリックします。
    2. 「動的グループの作成」をクリックし、「名前」「説明」およびルールを入力するか、「Rule Builder」を使用してルールを追加します。
    3. 「作成」をクリックします。

    ルール基準を満たすリソースは、動的グループのメンバーです。動的グループのルールを定義する場合は、どのリソースへのアクセス権を他のリソースに付与するかを検討します。

    たとえば、次のような例を考えてみます。

    • 特定のAutonomous Databaseインスタンスにリソースへのアクセスを許可します。

      Autonomous Databaseは、OCIDを使用してresource.idパラメータで指定します:

      resource.id = 'your_Autonomous_Database_instance_OCID'

      テナンシでアイデンティティ・ドメインを使用する場合は、ドメイン名を追加する必要があります。たとえば:

      resource.id = 'identity_domain_name/your_Autonomous_Database_instance_OCID'
    • コンパートメント内のすべてのAutonomous Databasesを許可します。

      Autonomous Databasesはresource.typeパラメータで指定され、コンパートメントはresource.compartment.idパラメータで指定されたOCIDで識別されます:

      ALL {resource.type = 'autonomousdatabase', resource.compartment.id = 'your_Compartment_OCID'}
    • コンパートメントのすべてのリソースを許可します

      OCIDで識別されるリソース・タイプで、resource.compartment.idパラメータで指定されます。

      ALL
              {resource.compartment.id='your_Compartment_OCID'}

    動的グループの作成およびグループにリソースを追加するルールの作成の詳細は、動的グループの管理を参照してください。

  2. Oracle Cloud Infrastructureリソースへのアクセスを有効にするための動的グループのポリシー・ステートメントを記述します。
    1. Oracle Cloud Infrastructureコンソールで「アイデンティティとセキュリティ」をクリックし、「ポリシー」をクリックします。
    2. 動的グループのポリシーを記述するには、「ポリシーの作成」をクリックし、「名前」および「説明」を入力します。
    3. ポリシー・ビルダーを使用してポリシーを作成します。

      たとえば、テナンシのオブジェクト・ストア内のバケットおよびオブジェクトを管理するためにOracle Cloud Infrastructureオブジェクト・ストアへのアクセスを許可するポリシーを作成するには:

      Allow dynamic-group Example5 to manage buckets in tenancy
      Allow dynamic-group Example5 to manage objects in tenancy

      テナンシでアイデンティティ・ドメインを使用する場合は、ドメイン名を追加する必要があります。たとえば:

      Allow dynamic-group identity_domain_name/Example5 to manage buckets in tenancy
      Allow dynamic-group identity_domain_name/Example5 to manage objects in tenancy
    4. 「作成」をクリックします。
ノート

リソース・プリンシパル・トークンは2時間キャッシュされます。したがって、ポリシーまたは動的グループを変更した場合、変更の影響を確認するために、2時間待つ必要がある。

ポリシーの詳細は、ポリシーの仕組みおよびポリシーの管理を参照してください。

Oracle Cloud Infrastructureリソースにアクセスするためのリソース・プリンシパルの有効化

次のステップを実行して、Autonomous Databaseでリソース・プリンシパルを有効にします。

前提条件として、動的グループおよびポリシーを構成します。詳細は、Autonomous Databaseでリソース・プリンシパルを使用するための前提条件の実行を参照してください。

Autonomous Databaseでリソース・プリンシパルを有効にするには:

  1. ADMINユーザーとして、Autonomous Databaseインスタンスのリソース・プリンシパルを有効にします。

    たとえば:

    EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();
    
    PL/SQL procedure successfully completed. 
    
    詳細は、ENABLE_RESOURCE_PRINCIPALプロシージャを参照してください。

    これにより、資格証明OCI$RESOURCE_PRINCIPALが作成されます。

  2. (オプション)このステップが必要なのは、ADMINユーザー以外のデータベース・ユーザーにリソース・プリンシパル資格証明へのアクセス権を付与する場合のみです。ADMINユーザーとして、指定したデータベース・ユーザーのリソース・プリンシパルを有効にします。

    たとえば:

    EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'adb_user');
    
    PL/SQL procedure successfully completed. 
    

    これは、ユーザーadb_userに資格証明OCI$RESOURCE_PRINCIPALへのアクセスを付与します。

    指定したユーザーに、他のユーザーのリソース・プリンシパルを有効にする権限を与える場合は、grant_optionパラメータをTRUEに設定します。

    たとえば:

    BEGIN
    DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(
         username => 'adb_user',
         grant_option => TRUE);
    END;
    /

    このコマンドを実行すると、adb_userは別のユーザーのリソース・プリンシパルを有効にできます。たとえば、adb_userとして接続する場合は、次のコマンドを実行できます。

    EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'adb_user2');
    
    詳細は、ENABLE_RESOURCE_PRINCIPALプロシージャを参照してください。
  3. リソース・プリンシパル資格証明が有効になっていることを確認します。

    たとえば、ADMINユーザーとしてビューDBA_CREDENTIALSを問い合せます。

    SELECT owner, credential_name FROM dba_credentials 
            WHERE credential_name = 'OCI$RESOURCE_PRINCIPAL' AND owner = 'ADMIN'; 
    
    OWNER  CREDENTIAL_NAME
    -----  ----------------------
    ADMIN  OCI$RESOURCE_PRINCIPAL 
    

    たとえば、ADMIN以外のユーザーとして、ビューALL_TAB_PRIVSを問い合せます。

    SELECT grantee, table_name, grantor FROM ALL_TAB_PRIVS
       WHERE grantee = 'ADB_USER' 
            AND table_name = 'OCI$RESOURCE_PRINCIPAL' 
            AND table_schema = 'ADMIN';
    
    GRANTEE   TABLE_NAME                GRANTOR
    --------- -----------------------   -------------
    ADB_USER  OCI$RESOURCE_PRINCIPAL    ADMIN

Autonomous Databaseインスタンスでリソース・プリンシパルの有効化は、1回かぎりの操作です。DBMS_CLOUD_ADMIN.DISABLE_RESOURCE_PRINCIPALを実行してリソース・プリンシパルを無効にしないかぎり、リソース・プリンシパルを再度有効にする必要はありません。

Autonomous Databaseでのリソース・プリンシパルの無効化

すべてのAutonomous Databaseユーザーまたは指定したユーザーのリソース・プリンシパルを無効にするステップを示します。

  1. すべてのユーザーのリソース・プリンシパルを無効にするには、ADMINユーザーとして次のコマンドを実行します。
    EXEC DBMS_CLOUD_ADMIN.DISABLE_RESOURCE_PRINCIPAL();

    これにより、資格証明OCI$RESOURCE_PRINCIPALが削除されます。

  2. リソース・プリンシパル資格証明が無効になっていることを確認します。

    たとえば:

    SELECT owner, credential_name FROM dba_credentials 
            WHERE credential_name = 'OCI$RESOURCE_PRINCIPAL' AND owner = 'ADMIN';
    
    No rows selected
    

指定されたデータベース・ユーザーのリソース・プリンシパル資格証明へのアクセスを削除するには、usernameパラメータを含めます。これにより、OCI$RESOURCE_PRINCIPAL資格証明への指定されたユーザー・アクセスが拒否されます。

たとえば:

EXEC DBMS_CLOUD_ADMIN.DISABLE_RESOURCE_PRINCIPAL(username => 'ADB_USER');

詳細は、DISABLE_RESOURCE_PRINCIPALプロシージャを参照してください。

リソース・プリンシパルとDBMS_CLOUDの使用

DBMS_CLOUDコールでリソース・プリンシパル資格証明を指定すると、データベースによってOracle Cloud Infrastructureリクエストが認証され、データベースはOracle Cloud Infrastructureリソースにアクセスするための資格証明を提供します。

まだ実行していない場合は、必要な前提条件ステップを実行します。

リソース・プリンシパル資格証明でDBMS_CLOUDプロシージャを使用するには:

  1. DBMS_CLOUDプロシージャまたはファンクションを使用し、資格証明名としてOCI$RESOURCE_PRINCIPALを指定します。

    たとえば、リソース・プリンシパルを使用してOracle Cloud Infrastructure Object Storageにアクセスできます。

    CREATE TABLE CHANNELS
       (channel_id CHAR(1),
        channel_desc VARCHAR2(20),
        channel_class VARCHAR2(20)
       );
    /
    
    BEGIN
     DBMS_CLOUD.COPY_DATA(
        table_name =>'CHANNELS',
        credential_name =>'OCI$RESOURCE_PRINCIPAL',
        file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/channels.txt',
        format => json_object('delimiter' value ',')
     );
    END;
    /
    

「資格証明の作成および既存の表へのデータのコピー」に示すように、オブジェクト・ストレージへのアクセスに必要なステップを比較する場合は、システム定義のOCI$RESOURCE_PRINCIPAL資格証明を使用しているため、リソース・プリンシパルを使用する場合、ステップ1では資格証明の作成は必要ありません。