Administra la autenticación integrada con políticas de contraseñas

Selecciona una versión de la documentación:

En esta página, se describe cómo puedes establecer y administrar políticas de contraseñas para AlloyDB Omni.

Acerca de las políticas de contraseñas

Si los usuarios de la base de datos de tu aplicación se autentican con AlloyDB Omni a través del método integrado basado en contraseñas, puedes hacer que la autenticación sea más segura aplicando contraseñas seguras. Puedes definir y habilitar la aplicación de contraseñas configurando una política de contraseñas de AlloyDB Omni.

Limitaciones de las políticas de contraseñas

Las políticas de contraseñas de AlloyDB Omni tienen las siguientes limitaciones:

  • Las políticas de contraseñas se aplican solo a las contraseñas creadas después de que configures las políticas. Los cambios en la política de contraseñas no afectan las contraseñas de los usuarios existentes.

  • Las políticas de contraseñas se aplican solo a las contraseñas ingresadas como texto sin formato. Las políticas de contraseñas no se aplican a las contraseñas ingresadas como cadenas encriptadas.

Cómo establecer una política de contraseñas de AlloyDB Omni

Para establecer una política de contraseñas, actualiza los parámetros de contraseñas de la Configuración unificada general (GUC) en tu archivo de configuración de postgresql.conf. Para obtener información sobre cómo configurar un parámetro de GUC, consulta Configura marcas de bases de datos de AlloyDB Omni.

Una política de contraseñas para AlloyDB Omni puede incluir las siguientes opciones:

  • Inhabilitar nombre de usuario: Impide el uso del nombre de usuario en la contraseña.

  • Complejidad de la contraseña: Verifica si la contraseña contiene la cantidad permitida de caracteres en minúscula, mayúscula, numéricos y no alfanuméricos. También verifica si la longitud de la contraseña es válida.

  • Vencimiento de contraseñas: Asegúrate de que las contraseñas se roten periódicamente.

Para obtener una lista de las marcas de política de contraseñas que admite AlloyDB Omni, consulta Marcas de política de contraseñas.

Para cumplir con los estándares de seguridad y seguir las recomendaciones del asesor de seguridad, debes habilitar las tres opciones juntas configurando sus marcas de aplicación principales en ON:

  • password.enforce_password_does_not_contain_username
  • password.enforce_complexity
  • password.enforce_expiration

Si estableces alguna de estas tres marcas como OFF o las omites, el Recomendador de seguridad marcará la instancia como si no tuviera habilitada una política de contraseñas.

Precarga la biblioteca de validación de contraseñas

Para que una política de contraseñas surta efecto en AlloyDB Omni, se debe cargar la biblioteca alloydb_password_validation. Para cargar esta biblioteca, haz lo siguiente:

  1. Busca el archivo de configuración postgresql.conf para tu instalación de AlloyDB Omni y ábrelo en un editor de texto.

  2. Busca la línea shared_preload_libraries y verifica si incluye alloydb_password_validation. Si no es así, debes agregarlo. Cuando termines, la línea shared_preload_libraries debería verse similar a la siguiente:

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

Aplica la complejidad de la contraseña

Para aplicar una política de complejidad de contraseñas, haz lo siguiente:

  1. Verifica que tu archivo postgresql.confcargue previamente la biblioteca de validación de contraseñas.

  2. Establece la marca password.enforce_complexity en ON.

  3. Usa marcas de política de contraseñas para definir tu política de contraseñas.

Por ejemplo, para aplicar una política de contraseñas que establezca que una contraseña debe contener al menos una letra mayúscula, un número y tener al menos 10 caracteres, debes configurar lo siguiente en tu archivo postgresql.conf:

  • password.enforce_complexity = ON
  • password.min_uppercase_letters = 1
  • password.min_numerical_chars = 1
  • password.min_pass_length = 10

Después de configurar estas marcas, fallará cualquier intento de establecer una contraseña de usuario de base de datos que no cumpla con esta política de contraseñas. Por ejemplo, con esta configuración de política, el siguiente comando del cliente psql falla porque la contraseña foo tiene menos de 10 caracteres y no contiene un número ni un carácter en mayúscula.

CREATE USER USERNAME WITH PASSWORD foo;

Aplicar de manera forzosa el vencimiento de contraseñas

Para aplicar la política de vencimiento de contraseñas, haz lo siguiente:

  1. Verifica que tu archivo postgresql.confcargue previamente la biblioteca de validación de contraseñas.

  2. Establece la marca password.enforce_expiration en ON.

  3. Establece la marca password.expiration_in_days en la cantidad de días después de que se establece una contraseña que vence.

  4. Establece la marca password.notify_expiration_in_days en la cantidad de días antes del vencimiento de una contraseña en que un usuario comienza a recibir notificaciones de vencimiento de contraseña.

Por ejemplo, para aplicar una política de contraseñas que indique que las contraseñas vencen después de 30 días y que los usuarios reciben una notificación 15 días antes de que venza su contraseña, debes establecer lo siguiente en tu archivo postgresql.conf:

  • password.enforce_expiration = ON
  • password.expiration_in_days = 30
  • password.notify_expiration_in_days = 15

Si vence la contraseña de un usuario, este no podrá conectarse a AlloyDB Omni. Para restablecer la contraseña de un usuario, haz lo siguiente:

  1. Conéctate a AlloyDB Omni con psql. Por ejemplo, si instalaste AlloyDB Omni con Docker, ejecuta el siguiente comando:

    sh docker exec -it CONTAINER-NAME psql -h localhost -U postgres

  2. En el símbolo del sistema de postgres=#, ejecuta el siguiente comando:

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

Para obtener más información sobre cómo cambiar la contraseña de un usuario, consulta ALTER ROLE en la documentación de PostgreSQL.

Aplicar la autenticación basada en contraseñas para las cuentas de administrador internas

La aplicación de contraseñas para las cuentas de administrador automatiza y centraliza la rotación y actualización seguras de las contraseñas críticas del sistema, por lo general, con una herramienta externa como Vault. Esta función permite cumplir con la política de confianza cero, ya que aplica la autenticación basada en contraseñas para las cuentas de administrador críticas que AlloyDB Omni usa para administrar varios procesos internos.

Se admite la aplicación de contraseñas para las siguientes cuentas de bases de datos:

  • alloydbadmin: Es la cuenta de superusuario del controlador de Kubernetes (K8s).
  • alloydbmonitor: Es una cuenta de solo lectura para recopilar métricas de la base de datos.

Para habilitar la aplicación, configura la especificación del clúster de base de datos para que haga referencia a los objetos Secret de Kubernetes que almacenan las contraseñas de estas cuentas. Este proceso mejora la seguridad y reduce la sobrecarga manual necesaria para administrar las credenciales de las cuentas de administración internas de tu base de datos.

Habilita la aplicación forzosa de contraseñas

Para habilitar la aplicación de contraseñas cuando creas un clúster, sigue estos pasos:

  1. Asegúrate de tener un clúster de Kubernetes que ejecute el operador de Kubernetes de AlloyDB Omni 1.7.0 o una versión posterior.
  2. Agrega el atributo systemUserPasswordRefs a la especificación de DBCluster. Este atributo debe contener pares clave-valor que vinculen cada nombre de cuenta del sistema interno (por ejemplo, alloydbadmin y alloydbmonitor) con su nombre de objeto secreto de Kubernetes correspondiente.
  3. Antes de crear la base de datos, asegúrate de que el Secret de Kubernetes al que se hace referencia contenga la contraseña inicial del usuario y de que el formato del atributo siga esta estructura:

    systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
    

Administra la rotación de contraseñas de forma segura

Después de habilitar la aplicación de la política, usa una herramienta externa, como Vault, para administrar la rotación de contraseñas en curso de forma segura.

  1. Actualiza la contraseña de la base de datos. La herramienta externa actualiza la contraseña de la cuenta del sistema directamente en AlloyDB Omni.
  2. Actualiza el secreto de Kubernetes. Luego, la herramienta externa actualiza el objeto secreto de Kubernetes asociado con la contraseña nueva.

    • El contenido del objeto secreto debe ser un par clave-valor en el que la clave sea el nombre de la base de datos y el valor sea la contraseña nueva codificada en base64.
    • Te recomendamos que uses la siguiente convención para el nombre del secreto:

      USER_NAME-pw-DATABASE_NAME
      

    El operador de AlloyDB Omni detecta el cambio en el secreto de Kubernetes y actualiza automáticamente la caché de contraseñas que usa el agente de la base de datos que se ejecuta en el pod de la base de datos. Luego, el agente usa esta nueva contraseña almacenada en caché para todas las operaciones futuras de la base de datos.

Inhabilita la aplicación forzosa de contraseñas para un usuario específico

Para inhabilitar la aplicación de contraseñas para una cuenta del sistema específica, debes quitar a ese usuario de la lista systemUserPasswordRefs en la especificación de DBCluster.

  1. Quita al usuario. En la especificación de DBCluster, borra el par clave-valor correspondiente al usuario que deseas excluir de la aplicación de contraseñas. Por ejemplo, si lo inhabilitas para alloydbadmin, quita alloydbadmin: alloydbadmin-pw-dbcluster-sample.
  2. Aplica la especificación de DBCluster modificada con kubectl apply.

    Después de aplicar la especificación actualizada, se inhabilitará la aplicación de contraseñas para ese usuario.

No permitir nombres de usuario en las contraseñas

Para aplicar la política que impide que una contraseña contenga un nombre de usuario, haz lo siguiente:

  1. Verifica que tu archivo postgresql.confcargue previamente la biblioteca de validación de contraseñas.

  2. Establece password.enforce_password_does_not_contain_username en ON.

Por ejemplo, para asegurarte de que una contraseña no contenga un nombre de usuario como subcadena, configura lo siguiente en tu archivo postgresql.conf:

  • password.enforce_password_does_not_contain_username = ON

Si se establece esta marca, la siguiente operación falla porque la contraseña alex-secret contiene el nombre de usuario alex:

CREATE USER alex WITH PASSWORD 'alex-secret';

¿Qué sigue?