IAM統合を使用したデータベース・クロステナンシへのアクセス

両方のテナンシのポリシーで許可されている場合、あるテナンシのユーザーおよびグループは別のテナンシのAutonomous Databaseインスタンスにアクセスできます。

DBaaSインスタンスへのIAMユーザーのクロステナンシ・アクセスについて

Oracle Cloud Infrastructure (OCI) DBaaSインスタンスへのクロステナンシ・アクセスは、単一のテナンシのシナリオに似ていますが、マッピングおよびトークン・リクエストにはテナンシ情報が必要であり、このクロス・テナンシ・データベース・リソース・アクセスを許可するには両方のテナンシでポリシーが必要であることを除きます。

次の図は、OCI DBaaSインスタンスへのクロステナンシ・アクセスのプロセスを示しています。

図3-1 OCI DBaaSインスタンスへのクロステナンシ・アクセス

図3-1の説明が続きます

クロステナンシ・プロセスは次のとおりです。

  1. ポリシーは、両方のテナンシでクロス・テナンシへのアクセスを承認および許可するために必要です。
  2. IAMプリンシパル(ユーザーまたはアプリケーション)は、クロステナンシ・リソースのdb-tokenをリクエストします。
  3. db-tokenが返され、別のテナンシのデータベースへのアクセスに使用されます
  4. データベースは、ユーザーのグループに対するクロステナンシ・グループ問合せを行い、プリンシパルをグローバル・スキーマおよびオプションのグローバル・ロールにマップします。

データベースが存在するリージョンと同じリージョンにユーザー・テナンシをサブスクライブする必要があります。たとえば、データベース・テナンシのデータベースがPHXおよびIADリージョンにある場合、ユーザー・テナンシをこれらのリージョンにサブスクライブする必要があります。これはホーム・リージョンではなく、ユーザー・テナンシの追加のサブスクライブ済リージョンのみです。

ポリシーの構成

クロステナンシ・データベース・アクセスを許可するには、ユーザー・テナンシとデータベース・リソース・テナンシの両方にポリシーを作成する必要があります。

ソース・ユーザー・テナンシの構成

ユーザー・テナンシでクロステナンシ・アクセスを許可するには、2つのポリシーが必要です。

最初のポリシーは、ユーザー・テナンシ・グループが別のテナンシ内のデータベースにアクセスできるようにすることです。2番目のポリシーでは、データベース・テナンシのデータベースがユーザー・テナンシのグループ情報を問い合せることができます。
  1. OCIコンソールで、「アイデンティティとセキュリティ」を選択します。
  2. 「アイデンティティ」にある「ポリシー」を選択します。
  3. 「ポリシーの作成」をクリックし、ポリシー・ビルダーで「手動エディタの表示」を選択します。
  4. DEFINE文を使用して、実際のポリシーを読みやすくします。
    次に例を示します。
    DEFINE tenancy database_tenancy as ocid1.tenancy.OCID
  5. テナンシdatabase_tenancyでdatabase_connectionsを使用するようにテナンシ・グループdomainA/xt_db_usersを承認します。
    これにより、domainAxt_db_usersグループのユーザーは、テナンシdatabase_tenancy内の任意のデータベースにアクセスできます。
    ENDORSE group domainA/xt_db_users to use database-connections in tenancy database_tenancy
  6. ADMIT文を使用して、データベース・テナンシ内の任意のデータベースで、ユーザー・テナンシ内の特定のIAMユーザーのグループ情報を問い合せることを許可する許可ポリシーを作成します。
    ADMIT any-user of tenancy database_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy

ターゲット・データベース・リソース・テナンシの構成

データベース・テナンシには、ユーザー・テナンシからのユーザーへのアクセスを有効にする照合ポリシーと、ユーザー・テナンシ内のグループ情報を問い合せる独自のデータベースを許可するポリシーが必要です

  1. OCIコンソールで、「アイデンティティとセキュリティ」を選択します。
  2. 「アイデンティティ」にある「ポリシー」を選択します。
  3. 「ポリシーの作成」をクリックし、ポリシー・ビルダーで「手動エディタの表示」を選択します。
  4. DEFINEを使用すると、ポリシーのトラブルシューティングおよび読取りが容易になります。
    DEFINE tenancy user_tenancy as ocid1.tenancy.OCID
    DEFINE group xt_db_users as ocid1.group.defg
    
  5. ADMITを使用して、ユーザー・テナンシのエンドース・ポリシーと一致するようにテナンシに許可ポリシーを作成します。
    user_tenancyのユーザーがこのテナンシ内のデータベースにアクセスできるように、許可ポリシーはユーザー・テナンシのENDORSEポリシーと一致する必要があります。
    ADMIT group xt_db_users of tenancy user_tenancy to use database-connections in tenancy
  6. エンドース・ポリシーを作成します。これは、ユーザー・テナンシで作成された許可ポリシーと一致します。
    エンドース・ポリシーにより、データベース・テナンシのデータベースがuser_tenancyからグループ情報を問い合せることができます。
    ENDORSE any-user to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy user_tenancy
While using any-user makes it easy to understand the required policies, Oracle recommends that you use stronger constraints in addition to or instead of using any-user. The any-user option will allow any principal or resource to query user groups in the user_tenancy. Ideally, you should limit this to just allowing the database resources (resource principals) to make the group queries. You can do this by adding a WHERE clause to the policies or by adding a dynamic group that limits it to the members of the dynamic group. Defining every possible way to specify dynamic groups and policies is outside the scope of this topic. You can find more information from these sources:

クロステナンシ・アクセスのポリシーの例

たとえば、WHERE句を使用してクロステナンシ構成を絞り込むことや、このタイプの構成を実行するその他の方法があります。

WHERE句を追加して、クロステナンシ・グループ問合せの実行を許可するデータベース・リソースを制限できます。

ADMIT any-user of tenancy db_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy where request.principal.type = 'dbsystem'

この許可ポリシーにより、db_tenancy内の任意のベース・データベース・サービス(リソース・タイプ: dbsystem)は、ユーザー・テナンシからユーザーのグループ情報を問い合せることができます。リソースタイプ名は次の表にあります。

ポリシーを作成する同様の方法は、Autonomous Databaseのリソース・タイプを動的グループに追加することです:

dynamic group: db_principals any {resource.type = ‘autonomousdatabase’}

この例では、any-userのかわりに動的グループを使用します。

ADMIT dynamic group db_principals of tenancy db_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy

resource.compartment.idを使用して、コンパートメント内のすべてのリソース・プリンシパルを追加することもできます。ただし、これによって、他の非データベース・リソース・プリンシパルがクロステナンシ・グループ問合せを実行できる場合もあります。

別のテナンシのユーザーおよびグループへのデータベース・スキーマおよびロールのマッピング

このタイプのマッピングを実行する場合は、テナンシOCIDをマッピング情報に追加して、データベースがクロステナンシ・アクセスであることを認識できるようにする必要があります。

SQL*PlusでCREATE USER文およびCREATE ROLE文を使用するときは、完全コロンを使用してテナンシOCIDを区切ります。
  • CREATE USER文を使用してマッピングを実行するには:
    次の例は、デフォルトおよび非デフォルト・ドメインのプリンシパルおよびグループとの排他スキーマおよび共有スキーマ・マッピングを示しています。デフォルトドメインを使用する場合、ドメイン名を含める必要はありません。
    CREATE USER schema1 IDENTIFIED GLOBALLY 
    AS 'IAM_PRINCIPAL_NAME=ocid1.tenancy.OCID:example_domain/peter.fitch@oracle.com';
    
    CREATE USER schema2 IDENTIFIED GLOBALLY 
    AS 'IAM_PRINCIPAL_NAME=ocid1.tenancy.OCID:peter.fitch@oracle.com';
    
    CREATE USER qa_db_user_group IDENTIFIED GLOBALLY 
    AS 'IAM_GROUP_NAME=ocid1.tenancy.OCID:example_domain/xt_db_users';
    
    CREATE USER qa_sales_user_group IDENTIFIED GLOBALLY 
    AS 'IAM_GROUP_NAME=ocid1.tenancy.OCID:sales_users';
    
    CREATE USER xt_ip_user IDENTIFIED GLOBALLY 
    AS 'IAM_PRINCIPAL_OCID=ocid1.instance.region1.sea.OCID';
    GRANT CREATE SESSION TO xt_ip_user;
    
    CREATE USER xt_iam_dg IDENTIFIED GLOBALLY 
    AS 'IAM_GROUP_NAME=ocid1.tenancy.region1.OCID:sales_principals';
    GRANT CREATE SESSION TO xt_iam_dg;
  • CREATE ROLE文を使用してマッピングを実行するには:
    次の例は、デフォルトドメインおよびデフォルト以外のドメイン内のグループとのグローバルな役割マッピングを示しています。デフォルトドメインを使用する場合、ドメイン名を含める必要はありません。
    CREATE ROLE globalrole1 IDENTIFIED GLOBALLY 
    AS 'IAM_GROUP_NAME=ocid1.tenancy.abcdef:example_domain/xt_db_users';
    
    CREATE ROLE globalrole2 IDENTIFIED GLOBALLY 
    AS 'IAM_GROUP_NAME=ocid1.tenancy.abcdef:sales_users';

クロステナンシ・アクセス用のデータベース・クライアントの構成

一部のデータベース・クライアントを直接構成できます。

データベース・テナンシは、OCI IAMからアクセス・トークンを直接取得するようにクライアントが構成されている場合、接続文字列またはsqlnet.oraのいずれかで識別する必要があります。特定のパラメータ値(JDBC-thin、ODP.NET-core、Managed)について、クライアント固有のドキュメントを確認します。

OCIコマンドライン・インタフェースを使用したクロステナンシ・トークンのリクエスト

クロステナンシ・リクエストのdb-tokenを取得するには、Oracle Cloud Infrastructure (OCI)コマンドライン・インタフェース・コマンドに--scopeパラメータを追加する必要があります。アクセスしているデータベースがユーザー・テナンシのホーム・リージョンとは異なるリージョンにある場合は、--regionパラメータを使用してOCI CLIコマンドにもリージョンを追加する必要があります。

oci getコマンドのオプション・パラメータの使用方法の詳細は、「オプションのパラメータ」を参照してください。

テナンシ全体に対してスコープを設定することも、テナンシのコンパートメントまたはデータベースにスコープを設定することもできます。クロス・テナンシ・コンパートメントまたはデータベースをスコープ指定する場合、コンパートメントおよびデータベースOCIDsはOCI全体で一意であるため、テナンシ情報も追加する必要はありません。

特定のクライアントは、MSEIから直接トークンをリクエストできます。MSEI OAuth2アクセス・トークンを取得するためのパラメータの設定に関するドキュメントを参照してください。