Gérer l'authentification intégrée à l'aide de règles liées aux mots de passe

Sélectionnez une version de la documentation :

Cette page explique comment définir et gérer des règles relatives aux mots de passe pour AlloyDB Omni.

À propos des règles relatives aux mots de passe

Si les utilisateurs de la base de données de votre application s'authentifient auprès d'AlloyDB Omni à l'aide de la méthode intégrée basée sur un mot de passe, vous pouvez renforcer la sécurité de l'authentification en exigeant des mots de passe sécurisés. Vous pouvez définir et activer l'application forcée des mots de passe en définissant une règle relative aux mots de passe AlloyDB Omni.

Limites des règles relatives aux mots de passe

Les règles relatives aux mots de passe AlloyDB Omni présentent les limites suivantes :

  • Les règles relatives aux mots de passe ne s'appliquent qu'aux mots de passe créés après leur définition. Les mots de passe des utilisateurs existants ne sont pas affectés par une modification des règles relatives aux mots de passe.

  • Les règles relatives aux mots de passe s'appliquent uniquement aux mots de passe saisis en texte brut. Les règles relatives aux mots de passe ne s'appliquent pas aux mots de passe saisis sous forme de chaînes chiffrées.

Définir une règle de mot de passe AlloyDB Omni

Pour définir une règle relative aux mots de passe, vous devez mettre à jour les paramètres de mot de passe GUC (Grand Unified Configuration) dans votre fichier de configuration postgresql.conf. Pour savoir comment définir un paramètre GUC, consultez Configurer des options de base de données AlloyDB Omni.

Une règle relative aux mots de passe pour AlloyDB Omni peut inclure les options suivantes :

  • Interdire le nom d'utilisateur : empêche d'utiliser le nom d'utilisateur dans le mot de passe.

  • Complexité du mot de passe : vérifie si le mot de passe contient le nombre autorisé de caractères minuscules, majuscules, numériques et non alphanumériques. Vérifie également si la longueur du mot de passe est valide.

  • Expiration des mots de passe : assurez-vous que les mots de passe sont modifiés régulièrement.

Pour obtenir la liste des options de règles de mot de passe compatibles avec AlloyDB Omni, consultez Options des règles concernant les mots de passe.

Précharger la bibliothèque de validation des mots de passe

Pour qu'une règle de mot de passe soit appliquée dans AlloyDB Omni, la bibliothèque alloydb_password_validation doit être chargée. Pour charger cette bibliothèque, procédez comme suit :

  1. Localisez le fichier de configuration postgresql.conf pour votre installation d'AlloyDB Omni et ouvrez-le dans un éditeur de texte.

  2. Recherchez la ligne shared_preload_libraries et vérifiez si elle inclut alloydb_password_validation. Si ce n'est pas le cas, vous devez l'ajouter. Une fois terminée, votre ligne shared_preload_libraries doit ressembler à ce qui suit :

    shared_preload_libraries='google_columnar_engine,google_job_scheduler,google_storage,alloydb_password_validation'
    

Appliquer la complexité des mots de passe

Pour appliquer une règle de complexité des mots de passe, procédez comme suit :

  1. Vérifiez que votre fichier postgresql.conf précharge la bibliothèque de validation des mots de passe.

  2. Définissez le fag password.enforce_complexity sur ON.

  3. Utilisez les options des règles concernant les mots de passe pour définir vos règles en matière de mots de passe.

Par exemple, pour appliquer une règle de mot de passe qui stipule qu'un mot de passe doit contenir au moins une lettre majuscule, un chiffre et 10 caractères, vous devez définir les éléments suivants dans votre fichier postgresql.conf :

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

Une fois ces options définies, toute tentative de définition d'un mot de passe utilisateur de base de données qui ne respecte pas cette règle échoue. Par exemple, avec cette règle définie, la commande client psql suivante échoue, car le mot de passe foo comporte moins de 10 caractères et ne contient pas de chiffre ni de majuscule.

CREATE USER USERNAME WITH PASSWORD foo;

Appliquer l'expiration du mot de passe

Pour appliquer la règle d'expiration des mots de passe, procédez comme suit :

  1. Vérifiez que votre fichier postgresql.conf précharge la bibliothèque de validation des mots de passe.

  2. Définissez le password.enforce_expiration flag sur ON.

  3. Définissez le password.expiration_in_days flag sur le nombre de jours au bout duquel un mot de passe expire.

  4. Définissez le password.notify_expiration_in_days flag sur le nombre de jours avant l'expiration d'un mot de passe à partir duquel un utilisateur commence à recevoir des notifications d'expiration de mot de passe.

Par exemple, pour appliquer une règle relative aux mots de passe qui stipule que les mots de passe expirent au bout de 30 jours et que les utilisateurs sont avertis 15 jours avant l'expiration de leur mot de passe, vous devez définir les éléments suivants dans votre fichier postgresql.conf :

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

Si le mot de passe d'un utilisateur expire, il ne peut pas se connecter à AlloyDB Omni. Pour réinitialiser le mot de passe d'un utilisateur, procédez comme suit :

  1. Connectez-vous à AlloyDB Omni à l'aide de psql. Par exemple, si vous avez installé AlloyDB Omni à l'aide de Docker, exécutez la commande suivante :

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

  2. À l'invite postgres=#, exécutez la commande suivante :

    ALTER USER USERNAME WITH 'NEW-PASSWORD';
    

Pour en savoir plus sur la modification du mot de passe d'un utilisateur, consultez ALTER ROLE dans la documentation PostgreSQL.

Appliquer l'authentification par mot de passe pour les comptes administrateur internes

L'application forcée des mots de passe pour les comptes administrateur automatise et centralise la rotation et la mise à jour sécurisées des mots de passe système critiques, généralement à l'aide d'un outil externe tel que Vault. Cette fonctionnalité permet de respecter la stratégie de confiance zéro en appliquant l'authentification par mot de passe pour les comptes administrateur critiques qu'AlloyDB Omni utilise pour gérer divers processus internes.

L'application forcée des mots de passe est compatible avec les comptes de base de données suivants :

  • alloydbadmin : compte super-utilisateur pour le contrôleur Kubernetes (K8s).
  • alloydbmonitor : compte en lecture seule pour la collecte de métriques de base de données.

Pour activer l'application forcée, configurez la spécification du cluster de base de données afin de référencer les objets secrets Kubernetes qui stockent les mots de passe de ces comptes. Ce processus améliore la sécurité et réduit la charge manuelle requise pour gérer les identifiants des comptes d'administration internes de votre base de données.

Activer l'application forcée des mots de passe

Pour activer l'application forcée des mots de passe lors de la création d'un cluster, procédez comme suit :

  1. Assurez-vous qu'un cluster Kubernetes exécute l'opérateur Kubernetes AlloyDB Omni 1.7.0 ou version ultérieure.
  2. Ajoutez l'attribut systemUserPasswordRefs à la spécification DBCluster. Cet attribut doit contenir des paires clé-valeur qui associent chaque nom de compte système interne (par exemple, alloydbadmin et alloydbmonitor) au nom de son objet secret Kubernetes correspondant.
  3. Avant de créer la base de données, assurez-vous que le secret Kubernetes référencé contient le mot de passe initial de l'utilisateur et que le format de l'attribut suit cette structure :

    systemUserPasswordRefs: USER_NAME:USER_NAME-PASSWORD-DATABASE_NAME
    

Gérer la rotation des mots de passe de manière sécurisée

Une fois l'application forcée activée, utilisez un outil externe tel que Vault pour gérer la rotation continue des mots de passe de manière sécurisée.

  1. Modifiez le mot de passe de la base de données. L'outil externe modifie le mot de passe du compte système directement dans AlloyDB Omni.
  2. Modifiez le secret Kubernetes. L'outil externe modifie ensuite l'objet secret Kubernetes associé avec le nouveau mot de passe.

    • Le contenu de l'objet secret doit être une paire clé-valeur où la clé est le nom de la base de données et la valeur est le nouveau mot de passe encodé en base64.
    • Nous vous recommandons d'utiliser la convention suivante pour le nom secret :

      USER_NAME-pw-DATABASE_NAME
      

    L'opérateur AlloyDB Omni détecte la modification du secret Kubernetes et met automatiquement à jour le cache de mots de passe utilisé par l'agent de base de données s'exécutant dans le pod de base de données. L'agent utilise ensuite ce nouveau mot de passe mis en cache pour toutes les opérations de base de données futures.

Désactiver l'application forcée des mots de passe pour un utilisateur spécifique

Pour désactiver l'application forcée des mots de passe pour un compte système spécifique, vous devez supprimer cet utilisateur de la liste systemUserPasswordRefs dans la spécification DBCluster.

  1. Supprimez l'utilisateur. Dans la spécification DBCluster, supprimez la paire clé-valeur correspondant à l'utilisateur que vous souhaitez exclure de l'application forcée des mots de passe. Par exemple, si vous la désactivez pour alloydbadmin, supprimez alloydbadmin: alloydbadmin-pw-dbcluster-sample.
  2. Appliquez la spécification DBCluster modifiée à l'aide de kubectl apply.

    Une fois la spécification mise à jour appliquée, l'application forcée des mots de passe est désactivée pour cet utilisateur.

Ne pas autoriser les noms d'utilisateur dans les mots de passe

Pour appliquer la règle qui empêche un mot de passe de contenir un nom d'utilisateur, procédez comme suit :

  1. Vérifiez que votre fichier postgresql.conf précharge la bibliothèque de validation des mots de passe.

  2. Définissez le password.enforce_password_does_not_contain_username sur ON.

Par exemple, pour vous assurer qu'un mot de passe ne contient pas de nom d'utilisateur en tant que sous-chaîne, définissez les éléments suivants dans votre fichier postgresql.conf :

  • password.enforce_password_does_not_contain_username = ON

Si ce flag est défini, l'opération suivante échoue, car le mot de passe alex-secret contient le nom d'utilisateur alex :

CREATE USER alex WITH PASSWORD 'alex-secret';

Étapes suivantes