Accesso a una cross-tenancy del database mediante un'integrazione IAM

Gli utenti e i gruppi di una tenancy possono accedere alle istanze di database DBaaS in un'altra tenancy se i criteri di entrambe le tenancy lo consentono.

Informazioni sull'accesso cross-tenancy per gli utenti IAM alle istanze DBaaS

L'accesso cross-tenancy a un'istanza DBaaS di Oracle Cloud Infrastructure (OCI) è simile a uno scenario a tenancy singolo, ad eccezione del fatto che le informazioni sulla tenancy sono necessarie per i mapping e le richieste di token e che un criterio è necessario in entrambe le tenancy per consentire l'accesso alle risorse del database tra tenancy.

La figura riportata di seguito illustra il processo per un accesso cross-tenancy a un'istanza DBaaS OCI.

Figura 3-1 Accesso cross-tenancy a un'istanza DBaaS OCI

Segue la descrizione della Figura 3-1
Descrizione della "Figura 3-1 Accesso cross-tenancy a un'istanza DBaaS OCI"

Il processo cross-tenancy è il seguente:

  1. Il criterio è necessario in entrambe le tenancy per approvare e ammettere l'accesso tra tenancy.
  2. Il principal IAM (utente o applicazione) richiede un token DB per una risorsa cross-tenancy.
  3. Viene restituito il file db-token che viene utilizzato per accedere al database in una tenancy diversa
  4. Il database eseguirà una query di gruppo cross-tenancy per i gruppi dell'utente e mapperà il principal allo schema globale e ai ruoli globali facoltativi.

È necessario eseguire la sottoscrizione della tenancy utente alle stesse aree in cui si trovano i database. Ad esempio, se i database nella tenancy del database si trovano nelle aree PHX e IAD, è necessario eseguire la sottoscrizione della tenancy utente a queste aree. Questa non è l'area di origine, ma solo le aree sottoscritte aggiuntive nella tenancy utente.

Configurazione dei criteri

È necessario creare criteri sia nella tenancy utente che nella tenancy delle risorse del database per consentire l'accesso al database cross-tenancy.

Configurazione della tenancy dell'utente di origine

Per consentire l'accesso cross-tenancy nella tenancy utente sono necessari due criteri.

Il primo criterio consiste nel consentire a un gruppo di tenancy utente di accedere a un database in una tenancy diversa. Il secondo criterio consente a un database nella tenancy del database di eseguire query sulle informazioni dei gruppi nella tenancy utente.
  1. Nella console OCI, selezionare Identità e sicurezza.
  2. In Identità, selezionare Criteri.
  3. Fare clic su Crea criterio e in Policy Builder selezionare Mostra editor manuale.
  4. Utilizzare l'istruzione DEFINE per semplificare la lettura dei criteri effettivi.
    Ad esempio:
    DEFINE tenancy database_tenancy as ocid1.tenancy.OCID
  5. Approvare il gruppo di tenancy domainA/xt_db_users per utilizzare database_connections nella tenancy database_tenancy.
    Ciò consente agli utenti del gruppo xt_db_users in domainA di accedere a qualsiasi database nella tenancy database_tenancy.
    ENDORSE group domainA/xt_db_users to use database-connections in tenancy database_tenancy
  6. Utilizzare l'istruzione ADMIT per creare un criterio di ammissione per consentire a qualsiasi database nella tenancy del database di eseguire query sulle informazioni dei gruppi per utenti IAM specifici nella tenancy utente.
    ADMIT any-user of tenancy database_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy

Configurazione della tenancy delle risorse del database di destinazione

La tenancy del database avrà bisogno di criteri corrispondenti per abilitare l'accesso agli utenti dalla tenancy dell'utente e consentire ai propri database di eseguire query sulle informazioni sui gruppi nella tenancy dell'utente

  1. Nella console OCI, selezionare Identità e sicurezza.
  2. In Identità, selezionare Criteri.
  3. Fare clic su Crea criterio e in Policy Builder selezionare Mostra editor manuale.
  4. Utilizzare DEFINE per semplificare la risoluzione dei problemi e la lettura dei criteri.
    DEFINE tenancy user_tenancy as ocid1.tenancy.OCID
    DEFINE group xt_db_users as ocid1.group.defg
    
  5. Utilizzare ADMIT per creare un criterio di ammissione nella tenancy che corrisponda al criterio di approvazione dalla tenancy dell'utente.
    Il criterio di ammissione deve corrispondere al criterio ENDORSE nella tenancy dell'utente in modo che possa consentire agli utenti di user_tenancy di accedere ai database in questa tenancy.
    ADMIT group xt_db_users of tenancy user_tenancy to use database-connections in tenancy
  6. Creare un criterio di approvazione che corrisponda al criterio di ammissione creato nella tenancy dell'utente.
    Il criterio di approvazione consentirà ai database nella tenancy del database di eseguire query sulle informazioni dei gruppi dal file user_tenancy.
    ENDORSE any-user to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy user_tenancy
Sebbene l'utilizzo di any-user semplifichi la comprensione dei criteri richiesti, Oracle consiglia di utilizzare vincoli più rigorosi oltre a o anziché utilizzare any-user. L'opzione any-user consente a qualsiasi principal o risorsa di eseguire query sui gruppi di utenti nel file user_tenancy. Idealmente, dovresti limitarlo a consentire solo alle risorse del database (principali delle risorse) di eseguire query di gruppo. È possibile eseguire questa operazione aggiungendo una clausola WHERE ai criteri o aggiungendo un gruppo dinamico che la limita ai membri del gruppo dinamico. La definizione di ogni possibile modo per specificare gruppi dinamici e criteri non rientra nell'ambito di questo argomento. È possibile trovare ulteriori informazioni da queste fonti:

Esempi di criteri per l'accesso cross-tenancy

Ad esempio, è possibile utilizzare una clausola WHERE per perfezionare la configurazione cross-tenancy e altri metodi per eseguire questo tipo di configurazione.

È possibile aggiungere una clausola WHERE per limitare le risorse di database consentite per eseguire la query del gruppo cross-tenancy:

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

Questo criterio di ammissione consente a qualsiasi servizio di Base Database (tipo di risorsa: dbsystem) in db_tenancy di eseguire query sulle informazioni di gruppo di un utente dalla tenancy utente. I nomi dei tipi di risorsa si trovano nella tabella riportata di seguito.

Un metodo simile può essere eseguito inserendo lo stesso tipo di risorsa in un gruppo dinamico:

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

Il gruppo dinamico nell'esempio precedente include le istanze di database per Oracle Base Database Service (dbsystem), Oracle Exadata Cloud@Customer (vmcluster) e Oracle Exadata Database Service (cloudvmcluster).

In questo esempio viene utilizzato un gruppo dinamico anziché any-user:

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

È inoltre possibile aggiungere tutti i principal risorsa in un compartimento utilizzando resource.compartment.id. Tuttavia, ciò potrebbe anche consentire ad altri principal di risorse non di database di eseguire la query del gruppo cross-tenancy. La tabella riportata di seguito fornisce un mapping dei vari tipi di risorsa con il nome della piattaforma DBaaS.

DBaaS Nome piattaforma Nome tipo di risorsa

ADB-S

autonomousdatabase

ADB-D (OPC)

cloudautonomousvmcluster*

DBS di base

dbsystem

ExaCS

cloudvmcluster

ExaCC

vmcluster

* Le istanze ADBD precedenti potrebbero ancora utilizzare il tipo di risorsa autonomousexainfrastructure.

Mapping di schemi e ruoli del database a utenti e gruppi in un'altra tenancy

Quando si esegue questo tipo di mapping, è necessario aggiungere l'OCID della tenancy alle informazioni di mapping in modo che il database sappia che si tratta di accesso cross-tenancy.

Utilizzare i due punti completi per separare l'OCID della tenancy quando si utilizzano le istruzioni CREATE USER e CREATE ROLE in SQL*Plus.
  • Per utilizzare l'istruzione CREATE USER per eseguire il mapping, effettuare le operazioni riportate di seguito.
    Gli esempi riportati di seguito mostrano il mapping esclusivo e condiviso dello schema con principal e gruppi nei domini predefiniti e non predefiniti. Quando si utilizzano i domini predefiniti, non è necessario includere un nome di dominio.
    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;
  • Per utilizzare l'istruzione CREATE ROLE per eseguire il mapping, effettuare le operazioni riportate di seguito.
    Gli esempi riportati di seguito mostrano il mapping dei ruoli globali con gruppi nei domini predefiniti e non predefiniti. Quando si utilizzano i domini predefiniti, non è necessario includere un nome di dominio.
    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';

Configurazione dei client di database per l'accesso multi-tenancy

È possibile configurare direttamente alcuni client di database.

La tenancy del database deve essere identificata nella stringa di connessione o in sqlnet.ora se il client è configurato per ottenere direttamente il token di accesso da IAM OCI. Consultare la documentazione specifica del client per i valori dei parametri specifici (JDBC-thin, ODP.NET-core, gestito).

Richiesta di token cross-tenancy mediante l'interfaccia della riga di comando OCI

È necessario aggiungere il parametro --scope al comando dell'interfaccia della riga di comando di Oracle Cloud Infrastructure (OCI) per ottenere un valore db-token per una richiesta cross-tenancy. Se il database a cui si sta accedendo si trova in un'area diversa dall'area di origine della tenancy dell'utente, è necessario aggiungere l'area anche al comando CLI OCI utilizzando il parametro --region.

Per ulteriori informazioni sull'utilizzo dei parametri opzionali del comando oci get, vedere Parametri opzionali.

Puoi applicarlo all'intera tenancy o applicarlo a un compartimento o a un database nella tenancy. Quando si applica l'ambito per il compartimento o il database tra tenancy, non è necessario aggiungere anche le informazioni sulla tenancy perché gli OCID del compartimento e del database sono univoci in OCI.

Alcuni clienti possono richiedere i token direttamente da MSEI. Fare riferimento alla documentazione relativa all'impostazione dei parametri per ottenere i token di accesso MSEI OAuth2.