Uso de la cuenta de servicio de Google para acceder a los recursos de Google Cloud Platform

Puede utilizar una cuenta de servicio de Google para acceder a los recursos de Google Cloud Platform (GCP) desde una instancia de Autonomous Database.

Acerca del uso de una cuenta de servicio de Google para acceder a los recursos de Google Cloud

Al utilizar la autenticación basada en cuenta de servicio de Google con Autonomous Database, una aplicación puede acceder de forma segura a los recursos de Google Cloud Platform (GCP) sin crear y guardar credenciales basadas en claves de acceso de IAM a largo plazo para los recursos de GCP.

Una cuenta de servicio de Google es un tipo especial de cuenta GCP utilizada por una aplicación. Puede utilizar una cuenta de servicio de Google para realizar llamadas a la API de REST de GCP autorizadas desde una aplicación (después de que se otorguen permisos de acceso a la cuenta de servicio mediante la configuración de roles de IAM). Cuando una aplicación realiza llamadas con autenticación basada en cuenta de servicio GCP, la llamada inicial genera un token de acceso temporal a través de OAuth2.0. El token de acceso OAuth2.0 es válido durante una hora. Las solicitudes posteriores en una hora utilizan el token de acceso OAuth2.0 para realizar llamadas a la API de REST de GCP autorizadas.

Por ejemplo, puede que desee cargar datos de Google Cloud Storage en Autonomous Database, realizar alguna operación en los datos y, a continuación, volver a escribir los datos modificados en Google Cloud Storage. Puede hacerlo sin utilizar una cuenta de servicio si tiene credenciales de usuario de GCP para acceder a Google Cloud Storage. Sin embargo, el uso de una cuenta de servicio de Google basada en roles para acceder a recursos de GCP desde Autonomous Database tiene las siguientes ventajas:

  • You can create role-based access, with different policies for different users or schemas that need access to GCP resources from an Autonomous Database instance. Esto permite definir una política para limitar el acceso a los recursos por rol. Por ejemplo, definir una política que esté limitada al acceso de solo lectura, por rol, a un cubo de Google Cloud Storage.
  • Las credenciales basadas en cuentas de servicio de Google proporcionan una mejor seguridad, ya que no es necesario proporcionar credenciales de usuario a largo plazo en el código cuando la aplicación accede a los recursos de GCP. Autonomous Database gestiona las credenciales temporales de la cuenta de servicio de Google y no necesita almacenar las credenciales de usuario de recurso de GCP en la base de datos.

Consulte Cuentas de servicio para obtener información sobre las cuentas de servicio de Google.

Activación de la cuenta de servicio de Google y búsqueda del nombre de cuenta de servicio de GCP

Antes de utilizar un recurso de Google Cloud Platform (GCP) con una cuenta de servicio de Google, debe activar el acceso de GCP para la instancia de Autonomous Database.

  1. Active la autenticación de la cuenta de servicio de Google con DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH.

    Por ejemplo, para activar la autenticación de la cuenta de servicio de Google para el usuario ADMIN:

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

    Active la autenticación de la cuenta de servicio de Google para un usuario que no sea ADMIN, adb_user de la siguiente manera:

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

    Si desea que el usuario especificado tenga privilegios para activar la autenticación de la cuenta de servicio de Google para otros usuarios, defina el parámetro params grant_option en TRUE.

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

    Después de ejecutar DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH con grant_option definido en TRUE, adb_user puede activar la autenticación de la cuenta de servicio de Google para otro usuario. Por ejemplo, si se conecta como adb_user, puede ejecutar el siguiente comando para activar el acceso a la cuenta de servicio de GCP para adb_user2:

    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH(
            provider => 'GCP',
            username => 'adb_user2');
    END;
    /
  2. Cuando se ejecuta DBMS_CLOUD_ADMIN.ENABLE_PRINCIPAL_AUTH, se crea una cuenta de servicio de Google. Consulte CLOUD_INTEGRATIONS para obtener los detalles de la cuenta de servicio para la instancia de 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. Tenga en cuenta el valor del parámetro gcp_service_account, ya que debe proporcionar este valor al configurar recursos de GCP.

Consulte el procedimiento ENABLE_PRINCIPAL_AUTH para obtener más información.

Asignación de roles a la cuenta de servicio de Google y otorgamiento de acceso para recursos de GCP

Para utilizar los recursos de Google Cloud Platform (GCP) de una instancia de Autonomous Database, usted o un administrador de Google Cloud deben asignar roles y privilegios a la cuenta de servicio de Google a la que accede la aplicación. Además de asignar roles para la cuenta de servicio de Google, para cualquier recurso de GCP que desee utilizar un administrador de Google Cloud debe agregar principales de Google IAM.

Como requisito, active primero la cuenta de servicio de Google en la instancia de Autonomous Database. Consulte Activación de la cuenta de servicio de Google y búsqueda del nombre de cuenta de servicio de GCP para obtener más información.

  1. Abra Google Cloud Console para su cuenta.
  2. Cree roles con los permisos especificados.
    1. En el menú de navegación, seleccione IAM y administrador.
    2. En el navegador de IAM y administración, seleccione Roles.
    3. En la página Roles, haga clic en Más acciones y seleccione + CREAR ROL.

    Por ejemplo, puede crear un rol Lectura y escritura del almacén de objetos para controlar el uso de un cubo del almacén de objetos.

    A continuación se muestra la descripción de gcp_iam_roles_create.png
  3. En la página Crear rol, haga clic en + Agregar permisos.
    1. Seleccione filtros para limitar la lista de permisos.

      Por ejemplo, introduzca el filtro Permiso: Storage.Objects para mostrar solo los permisos del almacén de objetos.

      A continuación se muestra la descripción de gcp_iam_roles_add_permissions.png
    2. En el cuadro de diálogo Agregar permisos, haga clic en Agregar.
  4. En la página Crear rol, haga clic en CREAR.
    A continuación se muestra la descripción de gcp_iam_roles_create_assigned.png
  5. Agregue roles y principales para el recurso al que desea acceder.

    Por ejemplo, si desea acceder a Google Cloud Storage mediante el rol que acaba de crear, Object Store Read Write:

    1. En el navegador, seleccione Cloud Storage y seleccione Buckets.
    2. Seleccione el cubo que desea utilizar y haga clic en PERMISIONES.
    3. Haga clic en + Agregar PRINCIPAL.
  6. En el cuadro de diálogo Otorgar acceso al "nombre de cubo", agregue roles y principales para el recurso seleccionado.
    1. En Agregar principales, agregue el valor del parámetro gcp_service_account de la instancia de Autonomous Database.
    2. En el cuadro de diálogo Otorgar acceso a "nombre de cubo", introduzca roles en Asignar roles y, a continuación, haga clic en Guardar.
      A continuación se muestra la descripción de gcp_iam_bucket_permissions.png

Después de completar estos pasos, se asignan los roles y los principales. Esto permite que la aplicación que se ejecuta en la instancia de Autonomous Database acceda al recurso de GCP con una cuenta de servicio de Google.

Uso de la cuenta de servicio de Google con DBMS_CLOUD

Al realizar llamadas a DBMS_CLOUD para acceder a los recursos de Google Cloud Platform (GCP) y especificar el nombre de credencial como GCP$PA, la autenticación en la plataforma de Google Cloud se realiza mediante una cuenta de servicio de Google.

Si aún no lo ha hecho, realice los siguientes pasos previos:

Para utilizar un procedimiento o función DBMS_CLOUD con la autenticación de cuenta de servicio de Google:

  1. Utilice GCP$PA como nombre de credencial.
  2. Cree el URI para acceder al recurso de GCP mediante el estilo de host virtual:

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

    Por ejemplo, puede acceder a Google Cloud Storage con las credenciales de la cuenta de servicio de Google de la siguiente manera:

    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 
    

Puede obtener más información en los siguientes enlaces:

Desactivación de la cuenta de servicio de Google

Para desactivar el acceso de la cuenta de servicio de Google a los recursos de Google Cloud Platform (GCP), utilice DBMS_CLOUD_ADMIN.DISABLE_PRINCIPAL_AUTH.

Cuando el valor provider es GCP y username es un usuario distinto de ADMIN, el procedimiento revoca los privilegios del usuario especificado. En este caso, el usuario ADMIN y otros usuarios pueden seguir utilizando GCP$PA.

Por ejemplo, para revocar privilegios para adb_user:

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

Cuando el valor provider es GCP y el valor username es ADMIN, el procedimiento desactiva el acceso a la cuenta de servicio de Google en la instancia de Autonomous Database. El valor por defecto para username es ADMIN.

Por ejemplo:

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

Consulte el procedimiento DISABLE_PRINCIPAL_AUTH para obtener más información.

Notas de la cuenta de servicio de Google

Notas para usar la cuenta de servicio de Google.

  • Restricción de caracteres de Google Cloud Platform (GCP): DBMS_CLOUD no soporta un URI que contenga una "_" para acceder a un nombre de cubo de Google Cloud Storage. Si el nombre del cubo de Google Cloud Storage contiene una "_", es posible que aparezca el siguiente error:

    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
  • Clonación de una instancia de Autonomous Database con una cuenta de servicio de Google: al clonar una instancia con una cuenta de servicio de Google activada, la configuración de la cuenta de servicio de Google no se transfiere a la clonación. Realice los pasos para activar la cuenta de servicio de Google en el clon si desea activar la cuenta de servicio de Google en una instancia clonada.