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

Oracle Cloud Infrastructureリソース・プリンシパルは、Autonomous Databaseで使用できます。ユーザーまたはテナンシ管理者は、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 Object Storeへのアクセスがテナンシのオブジェクト・ストア内のバケットおよびオブジェクトを管理できるようにするポリシーを作成するには:

      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 
                 owner = 'ADMIN';
    
    GRANTEE   TABLE_NAME                GRANTOR
    --------- -----------------------   -------------
    ADB_USER  OCI$RESOURCE_PRINCIPAL    ADMIN

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

Autonomous Databaseでのリソース・Principalの無効化

すべての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の資格証明の作成は必要ありません。