Acessando uma Tenancy Cruzada de Banco de Dados com uma Integração do Serviço IAM

Os usuários e grupos em uma tenancy poderão acessar instâncias de banco de dados DBaaS em outra tenancy se as políticas em ambas as tenancies permitirem isso.

Sobre o Acesso entre Tenancies para Usuários do Serviço IAM com Instâncias DBaaS

O acesso entre tenancies a uma instância DBaaS do OCI (Oracle Cloud Infrastructure) é semelhante a um único cenário de tenancy, exceto que as informações da tenancy são necessárias para mapeamentos e solicitações de token e uma política é necessária em ambas as tenancies para permitir esse acesso de recursos ao banco de dados entre tenancies.

A figura a seguir ilustra o processo de acesso entre tenancies a uma instância do OCI DBaaS.

Figura 3-1 Acesso entre Tenancies a uma Instância DBaaS do OCI

A descrição da Figura 3-1 é exibida a seguir
Descrição de "Figura 3-1 Acesso entre Tenancies a uma Instância DBaaS do OCI"

O processo de tenancy cruzada é o seguinte:

  1. A política é necessária em ambas as tenancies para endossar e admitir o acesso entre tenancies.
  2. O principal do IAM (usuário ou aplicativo) solicita um token de banco de dados para um recurso entre tenancies.
  3. O db-token é retornado e é usado para acessar o banco de dados em outra tenancy
  4. O banco de dados fará uma consulta de grupo entre tenancies para os grupos do usuário e mapeará o principal para o esquema global e as atribuições globais opcionais.

Você deve inscrever a tenancy do usuário nas mesmas regiões nas quais os bancos de dados estão localizados. Por exemplo, se os bancos de dados na tenancy do banco de dados estiverem nas regiões PHX e IAD, você deverá inscrever a tenancy do usuário nessas regiões. Esta não é a região home, apenas as regiões inscritas adicionais na tenancy do usuário.

Configurando Políticas

Crie políticas na tenancy do usuário e na tenancy do recurso de banco de dados para permitir o acesso ao banco de dados entre tenancies.

Configurando a Tenancy do Usuário de Origem

São necessárias duas políticas para permitir acesso entre tenancies na tenancy do usuário.

A primeira política é permitir que um grupo de tenancies do usuário acesse um banco de dados em outra tenancy. A segunda política permite que um banco de dados na tenancy do banco de dados consulte informações do grupo na tenancy do usuário.
  1. Na console do OCI, selecione Identidade e Segurança.
  2. Em Identidade, selecione Políticas.
  3. Clique em Criar Política e, no Criador de Política, selecione Mostrar editor manual.
  4. Use a instrução DEFINE para facilitar a leitura das políticas reais.
    Por exemplo:
    DEFINE tenancy database_tenancy as ocid1.tenancy.OCID
  5. Endossar o grupo de tenancies domainA/xt_db_users para usar database_connections na tenancy database_tenancy.
    Isso permite que os usuários do grupo xt_db_users em domainA acessem qualquer banco de dados na tenancy database_tenancy.
    ENDORSE group domainA/xt_db_users to use database-connections in tenancy database_tenancy
  6. Use a instrução ADMIT para criar uma política de Admissão para permitir que qualquer banco de dados na tenancy do banco de dados consulte informações do grupo para usuários específicos do serviço IAM na tenancy do usuário.
    ADMIT any-user of tenancy database_tenancy to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy

Configurando a Tenancy do Recurso do Banco de Dados de Destino

A tenancy do banco de dados precisará de políticas correspondentes para permitir o acesso aos usuários da tenancy do usuário, bem como permitir que seus próprios bancos de dados consultem informações do grupo na tenancy do usuário

  1. Na console do OCI, selecione Identidade e Segurança.
  2. Em Identidade, selecione Políticas.
  3. Clique em Criar Política e, no Criador de Política, selecione Mostrar editor manual.
  4. Use DEFINE para facilitar a solução de problemas e a leitura das políticas.
    DEFINE tenancy user_tenancy as ocid1.tenancy.OCID
    DEFINE group xt_db_users as ocid1.group.defg
    
  5. Use ADMIT para criar uma política de Admissão na tenancy para corresponder à política de Aprovação da tenancy do usuário.
    A política de Admissão deve corresponder à política ENDORSE na tenancy do usuário para que ela possa permitir que os usuários do user_tenancy acessem bancos de dados nesta tenancy.
    ADMIT group xt_db_users of tenancy user_tenancy to use database-connections in tenancy
  6. Crie uma política de Aprovação, que corresponderá à política de Admissão criada na tenancy do Usuário.
    A política Endossar permitirá que os bancos de dados na tenancy do banco de dados consultem informações do grupo em user_tenancy.
    ENDORSE any-user to {GROUP_MEMBERSHIP_INSPECT, AUTHENTICATION_INSPECT} in tenancy user_tenancy
Embora o uso de any-user facilite o entendimento das políticas necessárias, a Oracle recomenda que você use restrições mais fortes além de ou em vez de usar any-user. A opção any-user permitirá que qualquer principal ou recurso consulte grupos de usuários no user_tenancy. Idealmente, você deve limitar isso apenas para permitir que os recursos de banco de dados (principais de recursos) façam as consultas de grupo. Você pode fazer isso adicionando uma cláusula WHERE às políticas ou adicionando um grupo dinâmico que a limite aos membros do grupo dinâmico. A definição de todas as formas possíveis de especificar grupos dinâmicos e políticas está fora do escopo deste tópico. Você pode encontrar mais informações destas origens:

Exemplos de Política para Acesso a Tenancy Cruzada

Os exemplos incluem o uso de uma cláusula WHERE para refinar a configuração entre tenancies e outros métodos de executar esse tipo de configuração.

Você pode adicionar uma cláusula WHERE para limitar os recursos do banco de dados permitidos para fazer a consulta de grupo entre tenancies:

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

Essa política de Admissão permite que qualquer Base Database Service (tipo de recurso: dbsystem) no db_tenancy consulte as informações do grupo de um usuário na tenancy do usuário. Os nomes de tipo de recurso estão na tabela abaixo.

Um método semelhante pode ser feito colocando-se o mesmo tipo de recurso em um grupo dinâmico:

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

O grupo dinâmico no exemplo anterior inclui instâncias de banco de dados para o Oracle Base Database Service (dbsystem), o Oracle Exadata Cloud@Customer (vmcluster) e o Oracle Exadata Database Service (cloudvmcluster).

Este exemplo usa um grupo dinâmico em vez de any-user:

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

Você também pode adicionar todos os controladores de recursos em um compartimento usando resource.compartment.id. No entanto, isso também pode permitir que outros controladores de recursos que não sejam do banco de dados façam a consulta entre grupos de tenancies. A tabela a seguir fornece um mapeamento dos vários tipos de recursos com o nome da plataforma DBaaS:

DBaaS Nome da Plataforma Nome do Tipo de Recurso

ADB-S

autonomousdatabase

ADB-D (OPC)

cloudautonomousvmcluster*

DBS Base

dbsystem

ExaCS

cloudvmcluster

ExaCC

vmcluster

* Instâncias ADBD mais antigas ainda podem estar usando o tipo de recurso autonomousexainfrastructure.

Mapeando Esquemas e Atribuições de Banco de Dados para Usuários e Grupos em Outra Tenancy

Ao executar esse tipo de mapeamento, adicione o OCID da tenancy às informações de mapeamento para que o banco de dados saiba que ele é acesso entre tenancies.

Use dois-pontos completos para separar o OCID da tenancy ao usar as instruções CREATE USER e CREATE ROLE no SQL*Plus.
  • Para usar a instrução CREATE USER para executar o mapeamento:
    Os exemplos a seguir mostram o mapeamento de esquema exclusivo e compartilhado com principais e grupos em domínios padrão e não padrão. Ao usar domínios padrão, você não precisa incluir um nome de domínio.
    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;
  • Para usar a instrução CREATE ROLE para executar o mapeamento:
    Os exemplos a seguir mostram o mapeamento de atribuição global com grupos em domínios padrão e não padrão. Ao usar domínios padrão, você não precisa incluir um nome de domínio.
    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';

Configurando Clientes de Banco de Dados para Acesso entre Tenancies

Você pode configurar alguns clientes de banco de dados diretamente.

A tenancy do banco de dados deverá ser identificada na string de conexão ou em sqlnet.ora se o cliente estiver configurado para obter diretamente o token de acesso do OCI IAM. Revise a documentação específica do cliente para valores de parâmetro específicos (JDBC-thin, ODP.NET-core, gerenciado).

Solicitando Tokens entre Tenancies com a Interface de Linha de Comando do OCI

Adicione o parâmetro --scope ao comando de interface da linha de comando do OCI (Oracle Cloud Infrastructure) para obter um db-token para uma solicitação entre tenancies. Se o banco de dados que você está acessando estiver em uma região diferente da região home da tenancy do usuário, a região também deverá ser adicionada ao comando da CLI do OCI usando o parâmetro --region.

Consulte Parâmetros Opcionais para obter mais detalhes sobre o uso dos parâmetros opcionais do comando oci get.

Você pode defini-lo para toda a tenancy ou defini-lo como escopo para um compartimento ou banco de dados na tenancy. Ao definir o escopo do compartimento ou banco de dados entre tenancies, você não precisa adicionar também as informações da tenancy porque os OCIDs do compartimento e do banco de dados são exclusivos no OCI.

Certos clientes podem solicitar os tokens diretamente do MSEI. Consulte a documentação deles sobre como definir os parâmetros para obter os tokens de acesso OAuth2 do MSEI.