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

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

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

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

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

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

図3-1の説明が続きます
「図3-1 OCI DBaaSインスタンスへのクロステナンシ・アクセス」の説明

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

  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を使用して、ユーザー・テナンシの承認ポリシーと一致するようにテナンシに許可ポリシーを作成します。
    許可ポリシーはユーザー・テナンシのENDORSEポリシーと一致する必要があります。これにより、user_tenancyのユーザーがこのテナンシ内のデータベースにアクセスできるようになります。
    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
any-userを使用すると、必要なポリシーを簡単に認識しやすくなりますが、Oracleでは、any-userに加えて、またはこれを使用するかわりに、より強力な制約を使用することをお薦めします。any-userオプションを使用すると、すべてのプリンシパルまたはリソースがuser_tenancy内のユーザー・グループを問い合せることができます。理想的には、これを制限して、データベース・リソース(リソース・プリンシパル)がグループ問合せを実行できるようにする必要があります。これを実行するには、ポリシーにWHERE句を追加するか、動的グループのメンバーに制限するための動的グループを追加します。動的グループおよびポリシーを指定する可能なすべての方法の定義は、このトピックの範囲外です。詳細は、次のソースを参照してください:

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

たとえば、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)は、ユーザー・テナンシからユーザーのグループ情報を問い合せることができます。リソース・タイプ名は次の表にあります。

同じリソース・タイプを動的グループに配置すると、同様の方法を実行できます:

dynamic group: db_principals
any {resource.type = 'dbsystem', resource.type = 'vmcluster', resource.type = 'cloudvmcluster'}

前述の例の動的グループには、Oracle Base Database Service (dbsystem)、Oracle Exadata Cloud@Customer (vmcluster)およびOracle Exadata Database Service (cloudvmcluster)のデータベース・インスタンスが含まれます。

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

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

resource.compartment.idを使用して、コンパートメント内のすべてのリソース・プリンシパルを追加することもできます。ただし、これによって、他の非データベース・リソース・プリンシパルがクロステナンシ・グループ問合せを実行できる場合もあります。次の表に、様々なリソース・タイプとDBaaSプラットフォーム名のマッピングを示します:

DBaaSプラットフォーム名 リソース・タイプ名

ADB-S

autonomousdatabase

ADB-D(OPC)

cloudautonomousvmcluster*

ベースDBS

dbsystem

ExaCS

cloudvmcluster

ExaCC

vmcluster

* 古いADBDインスタンスは、引き続きautonomousexainfrastructureリソース・タイプを使用している可能性があります。

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

このタイプのマッピングを実行する場合は、テナンシ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アクセス・トークンを取得するためのパラメータの設定に関するドキュメントを参照してください。