IAM統合を使用したデータベース・クロステナンシへのアクセス
あるテナンシ内のユーザーおよびグループは、両方のテナンシ内のポリシーで許可されている場合、別のテナンシのAutonomous AI Databaseインスタンスにアクセスできます。
DBaaSインスタンスへのIAMユーザーのクロステナンシ・アクセスについて
Oracle Cloud Infrastructure (OCI) DBaaSインスタンスへのクロス・テナンシ・アクセスは、単一のテナンシ・シナリオに似ていますが、マッピングおよびトークン・リクエストにテナンシ情報が必要であり、このクロス・テナンシ・データベース・リソース・アクセスを許可するために両方のテナンシでポリシーが必要である点を除きます。
次の図は、OCI DBaaSインスタンスへのクロステナンシ・アクセスのプロセスを示します。

クロステナンシ・プロセスは次のとおりです:
-
ポリシーは、両方のテナンシでクロステナンシへのアクセスを承認および許可するために必要です。
-
IAMプリンシパル(ユーザーまたはアプリケーション)は、クロステナンシ・リソースのdb-tokenをリクエストします。
-
db-tokenが返され、別のテナンシのデータベースへのアクセスに使用されます -
データベースは、ユーザーのグループのクロステナンシ・グループ問合せを行い、プリンシパルをグローバル・スキーマおよびオプションのグローバル・ロールにマップします。
データベースが存在するリージョンと同じリージョンにユーザー・テナンシをサブスクライブする必要があります。たとえば、データベース・テナンシのデータベースがPHXおよびIADリージョンにある場合、ユーザー・テナンシをこれらのリージョンにサブスクライブする必要があります。これはホーム・リージョンではなく、ユーザー・テナンシの追加のサブスクライブ済リージョンです。
ポリシーの設定
クロス・テナンシ・データベース・アクセスを許可するために、ユーザー・テナンシとデータベース・リソース・テナンシの両方にポリシーを作成する必要があります。
ソース・ユーザー・テナンシの構成
ユーザー・テナンシでクロス・テナンシ・アクセスを許可するには、2つのポリシーが必要です。
最初のポリシーは、ユーザー・テナンシ・グループが別のテナンシ内のデータベースにアクセスできるようにします。2番目のポリシーでは、データベース・テナンシのデータベースがユーザー・テナンシのグループ情報を問い合せることができるようにします。
-
OCIコンソールで、「アイデンティティおよびセキュリティ」を選択します。
-
「アイデンティティ」にある「ポリシー」を選択します。
-
「ポリシーの作成」をクリックし、ポリシー・ビルダーで「手動エディタの表示」を選択します。
-
DEFINE文を使用して、実際のポリシーを読みやすくします。たとえば:
DEFINE tenancy database_tenancy as ocid1.tenancy.OCID -
テナンシ
database_tenancyでdatabase_connectionsを使用するようにテナンシ・グループdomainA/xt_db_usersを承認します。これにより、
domainAのxt_db_usersグループのユーザーは、テナンシdatabase_tenancy内の任意のデータベースにアクセスできます。ENDORSE group domainA/xt_db_users to use database-connections in tenancy database_tenancy -
ADMIT文を使用して、データベース・テナンシ内の任意のデータベースで、ユーザー・テナンシ内の特定のIAMユーザーのグループ情報を問い合せることを許可する許可ポリシーを作成します。ADMIT any-user of tenancy database_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy
ターゲット・データベース・リソース・テナンシの構成
データベース・テナンシでは、ユーザー・テナンシからのユーザーへのアクセスを有効にする照合方針と、ユーザー・テナンシ内のグループ情報を問い合せする独自のデータベースを許可する照合方針が必要です
-
OCIコンソールで、「アイデンティティおよびセキュリティ」を選択します。
-
「アイデンティティ」にある「ポリシー」を選択します。
-
「ポリシーの作成」をクリックし、ポリシー・ビルダーで「手動エディタの表示」を選択します。
-
DEFINEを使用すると、ポリシーのトラブルシューティングおよび読取りが容易になります。DEFINE tenancy user_tenancy as ocid1.tenancy.OCID DEFINE group xt_db_users as ocid1.group.defg -
ADMITを使用して、ユーザー・テナンシの承認ポリシーと一致するようにテナンシに許可ポリシーを作成します。許可ポリシーはユーザー・テナンシの
ENDORSEポリシーと一致する必要があります。これにより、user_tenancyのユーザーがこのテナンシ内のデータベースにアクセスできるようになります。ADMIT group xt_db_users of tenancy user_tenancy to use database-connections in tenancy -
承認ポリシーを作成します。これは、ユーザー・テナンシで作成された許可ポリシーと一致します。
承認ポリシーにより、データベース・テナンシのデータベースが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)は、ユーザー・テナンシからユーザーのグループ情報を問い合せることが可能です。リソース・タイプ名は次の表にあります。
ポリシーを作成する同様の方法は、Autonomous AI 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 tenancyresource.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アクセス・トークンを取得するためのパラメータの設定に関するドキュメントを参照してください。