Administra la autenticación de IAM

En esta página, se describe cómo preparar tu instancia de AlloyDB para PostgreSQL para facilitar la autenticación de bases de datos con Identity and Access Management (IAM).

La autenticación de IAM complementa la autenticación de bases de datos a través de usuarios estándar de PostgreSQL, que admite cada clúster de AlloyDB.

Puedes autenticarte con cuentas o grupos individuales:

  • Cuentas individuales: Agrega cada usuario o cuenta de servicio de IAM al clúster. Puedes usar IAM o roles de usuario de PostgreSQL para autenticarte con ese clúster.
  • Grupos: Agrega un grupo de IAM al clúster. Todos los miembros (usuarios y cuentas de servicio) de ese grupo heredan los permisos para autenticarse. Esto te permite administrar el acceso mediante la administración de la pertenencia a un grupo sin agregar cada miembro al clúster de forma individual.

La autenticación de IAM está inhabilitada en las instancias de AlloyDB de forma predeterminada.

Para usar la autenticación de IAM, completa los siguientes pasos generales:

  1. Habilita la autenticación individual o de grupo de IAM en tu instancia.
  2. Otorga los roles necesarios a la cuenta o al grupo.
  3. Agrega la cuenta o el grupo a tu clúster.
  4. Otorga privilegios de base de datos a la cuenta o al grupo.

Habilita y inhabilita la autenticación de IAM

Para habilitar la autenticación de IAM en una instancia, configura las marcas de la base de datos.

Para inhabilitar la autenticación de IAM, configura las marcas como off.

Para obtener más información sobre cómo configurar marcas, consulta Configura las marcas de base de datos de una instancia.

Otorga acceso a una cuenta individual

Para habilitar el acceso de IAM a un usuario nuevo de la base de datos, sigue estos pasos:

  1. Actualiza la configuración de IAM de tu proyecto para otorgar acceso a la base de datos de AlloyDB al usuario o a la cuenta de servicio de IAM adecuados.

  2. Crea un usuario nuevo de la base de datos en tu clúster y configura el nombre de usuario como la dirección de correo electrónico del usuario o la cuenta de servicio de IAM.

Para otorgar acceso a una cuenta de IAM a otros clústeres de tu proyecto, repite el último paso.

Actualiza una cuenta de IAM con el rol adecuado

Puedes otorgar a los usuarios o a las cuentas de servicio de IAM la capacidad de autenticarse con instancias de AlloyDB otorgándoles los siguientes roles de IAM:

  • alloydb.databaseUser: Permite que el usuario se conecte a tu instancia de AlloyDB.
  • serviceusage.serviceUsageConsumer: Proporciona al usuario acceso a una API que verifica los permisos.

Para ello, sigue las instrucciones que se indican en Otorga acceso a otros usuarios. En el paso en el que seleccionas un rol para otorgar a la entidad de IAM, elige alloydb.databaseUser.

Agrega un usuario o una cuenta de servicio de IAM a un clúster

Console

  1. Ve a la página Clústeres.

    Ir a los clústeres

  2. Haz clic en el nombre del clúster al que deseas agregar un usuario.

  3. Haz clic en Usuarios.

  4. Haz clic en Agregar cuenta de usuario.

  5. Selecciona Cloud IAM.

  6. En el campo Principal, ingresa la entidad de IAM.

    En el caso de una cuenta de usuario de IAM, proporciona la dirección de correo electrónico completa de la cuenta de usuario. Por ejemplo, kai@altostrat.com.

    En el caso de una cuenta de servicio de IAM, proporciona la dirección de la cuenta de servicio sin el sufijo .gserviceaccount.com. Por ejemplo, para especificar la cuenta de servicio my-service@my-project.iam.gserviceaccount.com, usa el valor my-service@my-project.iam.

  7. Para asignar roles que no sean el alloydbsuperuser predeterminado al usuario, sigue estos pasos:

    1. Ingresa el nombre del rol en Roles.
    2. Para agregar el rol, presiona Intro o Tab.
    3. Selecciona x para cualquier rol que desees quitar para ese usuario.

      Para obtener más información, consulta Roles predefinidos.

  8. Haz clic en Agregar.

gcloud

Para crear un usuario de la base de datos de PostgreSQL basado en un usuario o una cuenta de servicio, usa el gcloud alloydb users create comando.

gcloud alloydb users create USERNAME \
--cluster=CLUSTER \
--region=REGION \
--type=IAM_BASED

Reemplaza las siguientes variables:

  • USERNAME: Es el identificador del usuario de IAM que deseas agregar como un usuario nuevo de la base de datos.

    En el caso de una cuenta de usuario de IAM, proporciona la dirección de correo electrónico completa de la cuenta de usuario. Por ejemplo, kai@altostrat.com.

    En el caso de una cuenta de servicio de IAM, proporciona la dirección de la cuenta de servicio sin el sufijo .gserviceaccount.com. Por ejemplo, para especificar la cuenta de servicio my-service@my-project.iam.gserviceaccount.com, usa el valor my-service@my-project.iam.

  • CLUSTER: Es el ID del clúster en el que se creará esta cuenta de usuario de la base de datos.

  • REGION: Es el ID de la región en la que reside el clúster, por ejemplo, us-central1.

Otorga los permisos de base de datos adecuados a los usuarios de IAM

Cuando agregas un usuario de IAM a un clúster de AlloyDB, el usuario no tiene privilegios en ninguna base de datos de forma predeterminada, excepto en los objetos de base de datos a los que puede acceder PUBLIC.

Si los usuarios necesitan acceso adicional, otorga más privilegios con la GRANT instrucción de PostgreSQL:

GRANT SELECT ON TABLE_NAME TO "USERNAME";

Reemplaza las siguientes variables:

  • USERNAME: Es la dirección de correo electrónico del usuario. Debes incluir comillas dobles alrededor de la dirección.

  • TABLE_NAME: Es el nombre de la tabla a la que deseas que se otorgue acceso al usuario.

Quita un usuario o una cuenta de servicio de IAM de un clúster

Console

  1. Ve a la página Clústeres.

    Ir a los clústeres

  2. Haz clic en el nombre del clúster del que deseas quitar al usuario.

  3. Haz clic en Usuarios.

  4. En la fila que representa al usuario que deseas quitar, haz clic en Abrir acciones para este usuario.

  5. Selecciona Quitar.

  6. En el diálogo ¿Quitar cuenta de usuario?, haz clic en Quitar.

gcloud

Usa el gcloud alloydb users delete comando.

gcloud alloydb users delete USERNAME \
--cluster=CLUSTER \
--region=REGION

Reemplaza lo siguiente:

  • USERNAME: Es el identificador del usuario de IAM que deseas quitar del clúster.

    En el caso de una cuenta de usuario de IAM, proporciona la dirección de correo electrónico completa de la cuenta de usuario. Por ejemplo, kai@altostrat.com.

    En el caso de una cuenta de servicio de IAM, proporciona la dirección de la cuenta de servicio sin el sufijo .gserviceaccount.com. Por ejemplo, para especificar la cuenta de servicio my-service@my-project.iam.gserviceaccount.com, usa el valor my-service@my-project.iam.

  • CLUSTER: Es el ID del clúster del que se quitará este usuario.

  • REGION: Es el ID de la región en la que reside el clúster. Por ejemplo, us-central1.

Otorga acceso a un grupo de IAM

Para usar la autenticación de grupos (versión preliminar), agrega un grupo de IAM al clúster de AlloyDB.

Agrega un grupo de IAM a un clúster

  1. Asigna los roles alloydb.databaseUser y serviceusage.serviceUsageConsumer a la cuenta del grupo. Para obtener más información, consulta Actualiza una cuenta de IAM con el rol adecuado.

    Puede haber un máximo de 200 grupos de IAM en un clúster en cualquier momento. Los grupos inactivos se consideran para este límite.

    Los nombres de los grupos de IAM solo pueden tener 63 caracteres.

    Si tienes un grupo de IAM con un nombre que supera la limitación de longitud, puedes anidarlo en un grupo superior con un nombre válido. Debes agregar el grupo superior al clúster antes de poder usar el grupo anidado.

  2. Para crear un usuario de la base de datos para el grupo, usa el comando gcloud alloydb users create con la marca --type=IAM_GROUP.

    gcloud beta alloydb users create GROUP_EMAIL \
    --cluster=CLUSTER \
    --region=REGION \
    --type=IAM_GROUP

Agrega miembros de un grupo automáticamente

Cuando agregas un grupo de IAM a un clúster, todos los miembros (usuarios y cuentas de servicio) de ese grupo heredan los permisos para autenticarse. No es necesario agregar a los miembros de forma individual. Después de que un miembro accede por primera vez, AlloyDB crea una cuenta para él automáticamente.

Otorga privilegios de base de datos a un grupo de IAM

Otorgas privilegios de base de datos a grupos en lugar de usuarios individuales.

Ejecuta la instrucción GRANT desde la línea de comandos de psql:

GRANT SELECT ON TABLE_NAME TO "GROUP_NAME";
  • GROUP_NAME: Es la dirección de correo electrónico del grupo. Debes usar comillas porque la cadena contiene caracteres especiales.
  • TABLE_NAME: Es el nombre de la tabla.

Borra un grupo de IAM de un clúster

Para borrar un grupo de IAM de un clúster de AlloyDB, revoca los permisos del grupo en la Google Cloud consola y borra el usuario del grupo correspondiente del clúster de AlloyDB.

  1. Revoca los permisos de IAM:

    1. En la Google Cloud consola de, dirígete a la página IAM.

      Ir a IAM

    2. Busca el grupo de IAM del que deseas quitar el acceso.

    3. Quita el rol roles/alloydb.databaseUser y cualquier otro rol relacionado con AlloyDB que otorgue acceso al clúster. Esta acción impide que los miembros del grupo se autentiquen.

  2. Borra el usuario del grupo del clúster de AlloyDB:

    Usa Google Cloud CLI para borrar el usuario que representa el grupo de IAM del clúster de AlloyDB. Por lo general, el nombre de usuario es la dirección de correo electrónico del grupo de IAM.

    gcloud alloydb users delete GROUP_EMAIL_ADDRESS \
    --cluster=CLUSTER_ID \
    --region=REGION_ID

    Reemplaza lo siguiente:

    • GROUP_EMAIL_ADDRESS: Es la dirección de correo electrónico completa del grupo de IAM, por ejemplo, my-group@example.com.
    • CLUSTER_ID: Es el ID de tu clúster de AlloyDB.
    • REGION_ID: Es la región en la que se encuentra tu clúster de AlloyDB, por ejemplo, us-central1.
  3. Opcional: Borra el grupo de Cloud Identity:

    Necesitas los privilegios de administrador adecuados (como Administrador de grupos) en tu cuenta de Cloud Identity para borrar grupos. Por lo general, los propietarios de grupos solo pueden borrar los grupos que les pertenecen.

    Los cambios en los permisos de IAM y las membresías de grupos pueden tardar en propagarse, posiblemente 15 minutos o más.

    1. Asegúrate de tener los privilegios de administrador adecuados, como Administrador de grupos en tu cuenta de Cloud Identity. Los propietarios de grupos solo pueden borrar los grupos que les pertenecen. Para obtener más información, consulta Roles de administrador prediseñados.

    2. Ejecuta el siguiente comando de gcloud CLI de Cloud Identity:

      gcloud identity groups delete GROUP_EMAIL_ADDRESS
    3. Cuando revoques el permiso de acceso alloydb.databaseUser para un grupo de IAM en Cloud Identity, también debes borrar el grupo del clúster de AlloyDB para asegurarte de que se quite el acceso por completo.

Migra usuarios existentes a la autenticación de grupos de IAM

Los usuarios individuales de IAM existentes no usan la autenticación de grupos. Puedes migrarlos siguiendo estos pasos:

  1. Agrega los usuarios a un grupo de IAM.
  2. Agrega el grupo a tu clúster.
  3. Asigna los roles necesarios al grupo.
  4. Asigna privilegios de base de datos al grupo.
  5. Borra el usuario individual existente de tu clúster. Asegúrate de transferir la propiedad si es necesario.

Cuando el usuario vuelve a acceder, AlloyDB vuelve a crear la cuenta como un usuario del grupo.

Soluciona problemas de autenticación de grupos

Usa la siguiente información para solucionar problemas de autenticación de grupos.

Una cuenta existente no hereda privilegios

Si una cuenta no hereda privilegios de un grupo, sigue estos pasos:

  1. Haz una lista de los usuarios.

    gcloud alpha alloydb users list --cluster=CLUSTER --region=REGION
  2. Si el tipo es ALLOYDB_IAM_USER o ALLOYDB_IAM_SERVICE_ACCOUNT, quita la cuenta. No hereda privilegios de grupo.

  3. Para volver a crear la cuenta con el tipo de grupo correcto, vuelve a acceder a la instancia con la cuenta de usuario o la cuenta de servicio. Acceder nuevamente a la instancia vuelve a crear la cuenta con el tipo de cuenta correcto de ALLOYDB_IAM_GROUP_USER o ALLOYDB_IAM_GROUP_SERVICE_ACCOUNT.

¿Qué sigue?