Utilisation de SCRAM pour le chiffrement de mot de passe PostgreSQL - Amazon Relational Database Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de SCRAM pour le chiffrement de mot de passe PostgreSQL

Vous pouvez utiliser le mécanisme d'authentification SCRAM (Salted Challenge Response Authentication Mechanism) au lieu de l'algorithme MD5 par défaut de PostgreSQL pour le chiffrement des mots de passe. Le mécanisme d'authentification SCRAM est considéré comme plus sécurisé que MD5. Pour en savoir plus sur ces deux approches différentes de sécurisation des mots de passe, consultez Password Authentication (Authentification par mot de passe) dans la documentation PostgreSQL.

Nous vous recommandons d'utiliser SCRAM plutôt que MD5 comme schéma de chiffrement de mot de passe pour votre Instance de base de données RDS pour PostgreSQL. Il s'agit d'un mécanisme stimulation/réponse cryptographique qui utilise l'algorithme scram-sha-256 pour l'authentification par mot de passe et le chiffrement de mot de passe.

Vous devrez peut-être mettre à jour les bibliothèques pour vos applications clientes de sorte qu'elles prennent en charge SCRAM. Par exemple, les versions JDBC antérieures à 42.2.0 ne prennent pas en charge SCRAM. Pour plus d'informations, consultez PostgreSQL JDBC Driver (Pilote JDBC PostgreSQL) dans la documentation du pilote JDBC PostgreSQL. Pour obtenir la liste des autres pilotes PostgreSQL prenant en charge SCRAM, consultez la liste des pilotes dans la documentation PostgreSQL.

RDS pour PostgreSQL versions 13.1 et ultérieures prennent en charge scram-sha-256. Ces versions vous permettent également de configurer votre instance de base de données pour qu'elle requiert SCRAM, comme indiqué dans les procédures suivantes.

Configuration de votre instance de base de données RDS pour PostgreSQL de sorte à requérir SCRAM

Pour , vous pouvez exiger que l’instance de base de données RDS pour PostgreSQL n’accepte que les mots de passe qui utilisent l’algorithme scram-sha-256.

Important

Pour les proxys RDS existants avec des bases de données PostgreSQL, si vous modifiez l'authentification de base de données pour utiliser uniquement SCRAM, le proxy devient indisponible pendant 60 secondes au maximum. Pour éviter ce problème, effectuez l'une des actions suivantes :

  • Veillez à ce que la base de données permette à la fois l'authentification SCRAM et MD5.

  • Pour utiliser uniquement l'authentification SCRAM, créez un nouveau proxy, migrez le trafic de votre application vers ce nouveau proxy, puis supprimez le proxy précédemment associé à la base de données.

Avant d'apporter des modifications à votre système, assurez-vous de bien comprendre le processus complet, comme suit :

  • Obtenez des informations sur tous les rôles et sur le chiffrement des mots de passe pour tous les utilisateurs de base de données.

  • Revérifiez les paramètres de votre instance de base de données RDS pour PostgreSQL qui contrôlent le chiffrement des mots de passe.

  • Si votre instance de base de données RDS pour PostgreSQL utilise un groupe de paramètres par défaut, vous devez créer un groupe de paramètres de base de données personnalisé et l’appliquer à votre instance de base de données RDS pour PostgreSQL de sorte à pouvoir modifier les paramètres si nécessaire. Si votre instance de base de données RDS pour PostgreSQL utilise un groupe de paramètres personnalisé, vous pouvez modifier ultérieurement les paramètres nécessaires dans le processus, selon vos besoins.

  • Remplacez le paramètre password_encryption par scram-sha-256.

  • Informez tous les utilisateurs de la base de données qu'ils doivent mettre à jour leurs mots de passe. Faites de même pour votre compte postgres. Les nouveaux mots de passe sont chiffrés et stockés à l'aide de l'algorithme scram-sha-256.

  • Vérifiez que tous les mots de passe utilisent le même type de chiffrement.

  • Si tous les mots de passe utilisent scram-sha-256, vous pouvez modifier le paramètre rds.accepted_password_auth_method de md5+scram à scram-sha-256.

Avertissement

Après avoir changé rds.accepted_password_auth_method pour scram-sha-256 uniquement, tous les utilisateurs (rôles) avec des mots de passe chiffrés par md5 ne peuvent pas se connecter.

Se préparer à exiger SCRAM pour votre instance de base de données RDS pour PostgreSQL

Avant d’apporter des modifications à votre instance de base de données RDS pour PostgreSQL, vérifiez tous les comptes utilisateurs de base de données existants. Vérifiez également le type de chiffrement utilisé pour les mots de passe. Pour ce faire, utilisez l'extension rds_tools. Pour savoir quelles versions de PostgreSQL prennent en charge rds_tools, consultez Versions d’extension pour Amazon RDS pour PostgreSQL.

Pour obtenir la liste des utilisateurs de base de données (rôles) et des méthodes de chiffrement des mots de passe
  1. Utilisez psql pour vous connecter à votre instance de base de données RDS pour PostgreSQL, comme suit.

    psql --host=db-name.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Installez l’extension rds_tools.

    postgres=> CREATE EXTENSION rds_tools; CREATE EXTENSION
  3. Obtenez la liste des rôles et des méthodes de chiffrement.

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type();

    Vous voyez des résultats similaires à ce qui suit.

    rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)

Création d'un groupe de paramètres de base de données personnalisé

Note

Si votre instance de base de données RDS pour PostgreSQL utilise déjà un groupe de paramètres personnalisé, vous n’avez pas besoin d’en créer un.

Pour obtenir un aperçu des groupes de paramètres pour Amazon RDS, consultez Utilisation de paramètres sur votre instance de base de données RDS pour PostgreSQL.

Le type de chiffrement utilisé pour les mots de passe est défini dans un paramètre, password_encryption. Le chiffrement autorisé par l’instance de base de données RDS pour PostgreSQL est défini dans un autre paramètre, rds.accepted_password_auth_method. Le remplacement de l'un de ces paramètres par une valeur autre que celle par défaut requiert de créer un groupe de paramètres de base de données personnalisé et de l'appliquer à votre instance.

Vous pouvez également utiliser AWS Management Console ou l'API RDS pour créer un groupe de paramètres de base de données personnalisé. Pour plus d’informations, consultez

Vous pouvez maintenant employer le groupe de paramètres personnalisés avec votre instance de base de données.

Pour créer un groupe de paramètres de base de données personnalisé
  1. Utilisez la commande CLI create-db-parameter-group pour créer le groupe de paramètres de base de données personnalisé. Cet exemple utilise postgres13 comme source pour ce groupe de paramètres personnalisé.

    Pour Linux, macOS ou Unix :

    aws rds create-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --db-parameter-group-family postgres13 --description 'Custom parameter group for SCRAM'

    Pour Windows :

    aws rds create-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --db-parameter-group-family postgres13 --description "Custom DB parameter group for SCRAM"
  2. Utilisez la commande CLI modify-db-instance pour appliquer ce groupe de paramètres personnalisé à votre cluster de bases de données RDS pour PostgreSQL.

    Pour Linux, macOS ou Unix :

    aws rds modify-db-instance --db-instance-identifier 'your-instance-name' \ --db-parameter-group-name "docs-lab-scram-passwords

    Pour Windows :

    aws rds modify-db-instance --db-instance-identifier "your-instance-name" ^ --db-parameter-group-name "docs-lab-scram-passwords

    Pour resynchroniser votre instance de base de données RDS pour PostgreSQL avec votre groupe de paramètres de base de données personnalisé, vous devez redémarrer l’instance principale et toutes les autres instances du cluster. Planifiez cette opération pendant votre fenêtre de maintenance habituelle afin de minimiser l'impact sur vos utilisateurs.

Configuration du chiffrement des mots de passe pour utiliser SCRAM

Le mécanisme de chiffrement du mot de passe utilisé par une instance de base de données RDS pour PostgreSQL est défini(e) dans le groupe de paramètres de base de données dans le paramètre password_encryption. Les valeurs autorisées incluent une valeur non définie, md5 ou scram-sha-256. La valeur par défaut dépend de la version de RDS pour PostgreSQL, comme suit :

  • RDS pour PostgreSQL versions 14 et ultérieures : la valeur par défaut est scram-sha-256

  • RDS pour PostgreSQL 13 : la valeur par défaut est md5

En attachant un groupe de paramètres de base de données personnalisé à votre instance de base de données RDS pour PostgreSQL, vous pouvez modifier les valeurs du paramètre de chiffrement des mots de passe.

Puis, la console RDS affiche les valeurs par défaut des paramètres password_encryption pour RDS pour PostgreSQL.
Pour remplacer le paramètre de chiffrement des mots de passe par scram-sha-256
  • Remplacez la valeur du chiffrement des mots de passe par scram-sha-256, comme indiqué ci-après. Cette modification peut être appliquée immédiatement, car le paramètre est dynamique. Aucun redémarrage n’est donc nécessaire pour que la modification soit appliquée.

    Pour Linux, macOS ou Unix :

    aws rds modify-db-parameter-group --db-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'

    Pour Windows :

    aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"

Migration des mots de passe des rôles utilisateur vers SCRAM

Vous pouvez migrer les mots de passe pour les rôles d'utilisateur vers SCRAM comme décrit ci-dessous.

Pour migrer les mots de passe des utilisateurs de base de données (rôles) de MD5 vers SCRAM
  1. Connectez-vous en tant qu'utilisateur administrateur (nom d'utilisateur par défaut, postgres) comme suit.

    psql --host=db-name.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Vérifiez la valeur du paramètre password_encryption sur votre instance de base de données RDS pour PostgreSQL à l’aide de la commande suivante.

    postgres=> SHOW password_encryption; password_encryption --------------------- md5 (1 row)
  3. Remplacez la valeur de ce paramètre par scram-sha-256. Pour plus d’informations, consultez Configuration du chiffrement des mots de passe pour utiliser SCRAM.

  4. Vérifiez à nouveau la valeur pour vous assurer qu'elle est maintenant réglée sur scram-sha-256, comme suit.

    postgres=> SHOW password_encryption; password_encryption --------------------- scram-sha-256 (1 row)
  5. Demandez à tous les utilisateurs de base de données de modifier leurs mots de passe. Veillez également à modifier votre propre mot de passe pour le compte postgres (utilisateur de base de données avec privilèges rds_superuser).

    labdb=> ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me'; ALTER ROLE
  6. Répétez l'opération pour toutes les bases de données de votre Instance de base de données RDS pour PostgreSQL.

Modification du paramètre de sorte à utiliser SCRAM

Il s'agit de la dernière étape du processus. Une fois que vous avez effectué la modification de la procédure suivante, tous les comptes utilisateurs (rôles) qui utilisent toujours le chiffrement md5 pour les mots de passe ne pourront pas se connecter au Instance de base de données RDS pour PostgreSQL.

Le paramètre rds.accepted_password_auth_method spécifie la méthode de chiffrement acceptée par l’instance de base de données RDS pour PostgreSQL pour un mot de passe utilisateur pendant le processus de connexion. La valeur par défaut est md5+scram, ce qui signifie que l'une des méthodes est acceptée. L'image suivante indique la valeur par défaut de ce paramètre.

La console RDS affiche les valeurs par défaut et autorisées pour les paramètres rds.accepted_password_auth_method.

Les valeurs autorisées pour ce paramètre sont md5+scram ou scram. Si la valeur de ce paramètre est remplacée par scram, le paramètre devient obligatoire.

Pour modifier la valeur du paramètre afin d'exiger l'authentification SCRAM pour les mots de passe
  1. Vérifiez que tous les mots de passe utilisateur de toutes les bases de données de votre instance de base de données RDS pour PostgreSQL utilisent scram-sha-256 pour le chiffrement des mots de passe. Pour ce faire, interrogez rds_tools pour obtenir le rôle (utilisateur) et le type de chiffrement, comme suit.

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type(); rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
  2. Répétez la requête sur toutes les instances de base de données de votre Instance de base de données RDS pour PostgreSQL.

    Si tous les mots de passe utilisent scram-sha-256, vous pouvez continuer.

  3. Remplacez la valeur de l'authentification par mot de passe acceptée par scram-sha-256, comme suit.

    Pour Linux, macOS ou Unix :

    aws rds modify-db-parameter-group --db-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'

    Pour Windows :

    aws rds modify-db-parameter-group --db-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"