Usar a Conta do Google Service para Acessar Recursos do Google Cloud Platform

Você pode usar uma conta de serviço do Google para acessar recursos do Google Cloud Platform (GCP) em uma instância do Autonomous Database.

Sobre como Usar uma Conta do Google Service para Acessar Recursos do Google Cloud

Quando você usa a autenticação baseada em contas de serviço do Google com o Autonomous Database, um aplicativo pode acessar com segurança os recursos do Google Cloud Platform (GCP) sem criar e salvar credenciais com base nas chaves de acesso do IAM de longo prazo para os recursos do GCP.

Uma conta de serviço do Google é um tipo especial de conta GCP usada por um aplicativo. Você pode usar uma conta de serviço do Google para fazer chamadas de API REST do GCP autorizadas de um aplicativo (depois que a conta de serviço receber permissões de acesso por meio da configuração de atribuição do IAM). Quando um aplicativo faz chamadas com autenticação baseada na conta de serviço do GCP, a chamada inicial gera um token de acesso temporário por meio do OAuth2.0. O token de acesso OAuth2.0 é válido durante uma hora. As solicitações subsequentes dentro de uma hora usam o token de acesso OAuth2.0 para fazer chamadas autorizadas da API REST do GCP.

Por exemplo, talvez você queira carregar dados do Google Cloud Storage no seu Autonomous Database, executar alguma operação nos dados e, em seguida, gravar os dados modificados de volta no Google Cloud Storage. Você pode fazer isso sem usar uma conta de serviço se tiver credenciais de usuário do GCP para acessar o Google Cloud Storage. No entanto, o uso de uma conta de serviço do Google baseada em atribuição para acessar recursos do GCP no Autonomous Database tem os seguintes benefícios:

  • Você pode criar acesso baseado em atribuição, com diferentes políticas para diferentes usuários ou esquemas que precisam de acesso aos recursos do GCP por meio de uma instância do Autonomous Database. Assim, você permite definir uma política para limitar o acesso aos recursos por função. Por exemplo, definir uma política limitada ao acesso somente para leitura, por atribuição, a um bucket do Google Cloud Storage.
  • As credenciais baseadas na conta de serviço do Google oferecem melhor segurança, pois você não precisa fornecer credenciais de usuário de longo prazo no código quando seu aplicativo acessa os recursos do GCP. O Autonomous Database gerencia as credenciais temporárias da conta de serviço do Google e não precisa armazenar as credenciais do usuário do recurso do GCP no banco de dados.

Consulte Contas de serviço para obter informações sobre contas de serviço do Google.

Ativar Conta do Google Service e Localizar o Nome da Conta do GCP Service

Antes de usar um recurso do Google Cloud Platform (GCP) com uma conta de serviço do Google, você precisa ativar o acesso do GCP para sua instância do Autonomous Database.

  1. Ative a autenticação da conta de serviço do Google com DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH.

    Por exemplo, para ativar a autenticação da conta de serviço do Google para o usuário ADMIN:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP' );
    END;
    /

    Ative a autenticação da conta de serviço do Google para um usuário não ADMIN, adb_user da seguinte forma:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user');
    END;
    /

    Se você quiser que o usuário especificado tenha privilégios para ativar a autenticação da conta de serviço do Google para outros usuários, defina o parâmetro params grant_option como TRUE.

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user',
            params   => JSON_OBJECT('grant_option' value TRUE));
    END;
    /

    Depois que você executar DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH com grant_option definido como TRUE, o adb_user poderá ativar a autenticação da conta de serviço do Google para outro usuário. Por exemplo, se você se conectar como adb_user, poderá executar o seguinte comando para ativar o acesso à conta de serviço do GCP para adb_user2:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user2');
    END;
    /
  2. Quando o DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH é executado, ele cria uma conta de serviço do Google. Consulte CLOUD_INTEGRATIONS para obter os detalhes da conta de serviço da sua instância do Autonomous Database.
    SELECT * FROM CLOUD_INTEGRATIONS WHERE param_name = 'gcp_service_account';
    
    PARAM_NAME           PARAM_VALUE
    ---------------------------------------------------------------------------
    gcp_service_account  GCP-SA-22222-32222@gcp-example.iam.gserviceaccount.com
  3. Observe o valor do parâmetro gcp_service_account, pois você deve fornecer esse valor ao configurar recursos do GCP.

Consulte Procedimento ENABLE_PRINCIPAL_AUTH para obter mais informações.

Designar Atribuições à Conta do Google Service e Fornecer Acesso para Recursos do GCP

Para usar recursos do Google Cloud Platform (GCP) de uma instância do Autonomous Database, você ou um Administrador do Google Cloud deve designar atribuições e privilégios à conta de serviço do Google que seu aplicativo acessa. Além de designar atribuições para a conta de serviço do Google, para quaisquer recursos do GCP que você deseja usar um administrador do Google Cloud, adicione controladores do Google IAM.

Como pré-requisito, primeiro ative a conta de serviço do Google em sua instância do Autonomous Database. Consulte Ativar Conta do Google Service e Localizar o Nome da Conta do GCP Service para obter mais informações.

  1. Abra o Google Cloud Console da sua conta.
  2. Crie atribuições com as permissões especificadas.
    1. No menu de navegação, selecione IAM e Admin.
    2. No navegador do IAM & Admin, selecione Atribuições.
    3. Na página Atribuições, clique em Mais Ações e selecione + CRIAR Atribuição.

    Por exemplo, você pode criar uma atribuição Leitura e Gravação do Armazenamento de Objetos para controlar o uso de um bucket do Armazenamento de Objetos.

    Veja a seguir a descrição da ilustração gcp_iam_roles_create.png
    Descrição da ilustração gcp_iam_roles_create.png
  3. Na página Criar Função, clique em + ADICIONAR PERMISSÕES.
    1. Selecione filtros para limitar a lista de permissões.

      Por exemplo, digite o filtro Permissão: Storage.Objects para mostrar apenas as permissões do Armazenamento de Objetos.

      Veja a seguir a descrição da ilustração gcp_iam_roles_add_permissions.png
      Descrição da ilustração gcp_iam_roles_add_permissions.png
    2. Na caixa de diálogo Adicionar permissões, clique em ADICIONAR.
  4. Na página Criar Atribuição, clique em CRIAR.
  5. Adicione atribuições e principais do recurso que você deseja acessar.

    Por exemplo, se você quiser acessar o Google Cloud Storage usando a atribuição que acabou de criar, Leitura/Gravação do Armazenamento de Objetos:

    1. No navegador, selecione Cloud Storage e Buckets.
    2. Selecione o bloco que deseja usar e clique em PERMISSÕES.
    3. Clique em + ADICIONAR PRINCIPAL.
  6. Na caixa de diálogo Conceder acesso à caixa de diálogo "bucketname", adicione atribuições e um controlador para o recurso selecionado.
    1. Em Adicionar principais , adicione o valor do parâmetro gcp_service_account da instância do Autonomous Database.
    2. Na caixa de diálogo Conceder acesso ao "bucketname", informe atribuições em Designar Atribuições e clique em SAVE.

Depois de concluir essas etapas, as atribuições e os principais serão designados. Isso permite que seu aplicativo em execução na instância do Autonomous Database acesse o recurso GCP com uma conta de serviço do Google.

Usar a Conta do Google Service com DBMS_CLOUD

Quando você faz chamadas DBMS_CLOUD para acessar os recursos do Google Cloud Platform (GCP) e especifica o nome da credencial como GCP$PA, a autenticação no lado do Google Cloud Platform acontece usando uma conta de serviço do Google.

Caso ainda não tenha feito isso, execute as etapas de pré-requisito:

Para usar um procedimento ou função DBMS_CLOUD com autenticação de conta de serviço do Google:

  1. Use GCP$PA como o nome da credencial.
  2. Construa o URI para acessar o recurso GCP usando estilo hospedado virtual:

    https://BUCKET_NAME.storage.googleapis.com/OBJECT_NAME

    Por exemplo, você pode acessar o Google Cloud Storage usando as credenciais da conta de serviço do Google da seguinte forma:

    SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('GCP$PA', 'https://treetypes.storage.googleapis.com/' );
    
    OBJECT_NAME BYTES CHECKSUM                         CREATED LAST_MODIFIED
    ----------- ----- -------------------------------- ------- ------------------------
    trees.txt      58 682075a8c38f5686c32c25c6fb67dcbe         2022-10-05T20:03:55.253Z 
    

Para obter mais informações, consulte:

Desativar Conta do Google Service

Para desativar o acesso da conta do serviço Google aos recursos do Google Cloud Platform (GCP), use DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH.

Quando o valor provider é GCP e username é um usuário diferente de ADMIN, o procedimento revoga os privilégios do usuário especificado. Nesse caso, o usuário ADMIN e outros usuários podem continuar a usar GCP$PA.

Por exemplo, para revogar privilégios de adb_user:

BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
        provider => 'GCP',
        username => 'adb_user');
END;
/

Quando o valor provider é GCP e username é ADMIN, o procedimento desativa o acesso da conta de serviço do Google na instância do Autonomous Database. O valor padrão para username é ADMIN.

Por exemplo:

BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH(
        provider => 'GCP' );
END;
/

Consulte Procedimento DISABLE_PRINCIPAL_AUTH para obter mais informações.

Observações da Conta do Google Service

Observações para usar a conta de serviço do Google.

  • Restrição de caracteres do Google Cloud Platform (GCP): DBMS_CLOUD não suporta um URI contendo um "_" para acessar um nome de bucket do Google Cloud Storage. Se o nome do bucket do Google Cloud Storage contiver um "_", você poderá ver o seguinte erro:

    SELECT * FROM DBMS_CLOUD.LIST_OBJECTS('GCP$PA', 'https://app_bucket.storage.googleapis.com/');
    
    ORA-20006: Unsupported object store URI - https://app_bucket.storage.googleapis.com/
    ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 1306
  • Clonando uma instância do Autonomous Database com uma conta de serviço do Google: Quando você clona uma instância com uma conta de serviço do Google ativada, a configuração da conta de serviço do Google não é transferida para o clone. Execute as etapas para ativar a conta de serviço do Google no clone se quiser ativar a conta de serviço do Google em uma instância clonada.