Utilisation de SSL avec une instance de base de données PostgreSQL - Amazon Relational Database Service

Utilisation de SSL avec une instance de base de données PostgreSQL

Amazon RDS prend en charge le chiffrement SSL pour les instances de bases de données PostgreSQL. En utilisant SSL, vous pouvez chiffrer une connexion PostgreSQL entre vos applications et vos instances de bases de données PostgreSQL. Vous pouvez également forcer toutes les connexions à votre instance de base de données PostgreSQL à utiliser SSL. Amazon RDS for PostgreSQL prend en charge le protocole TLS (Transport Layer Security) versions 1.1 et 1.2.

Pour plus d'informations sur la prise en charge de SSL et les bases de données PostgreSQL, veuillez consulter SSL Support dans la documentation PostgreSQL. Pour plus d'informations sur l'utilisation d'une connexion SSL sur JDBC, veuillez consulter Configuring the Client dans la documentation PostgreSQL.

La prise en charge de SSL est disponible dans toutes les régions AWS pour PostgreSQL. Amazon RDS crée un certificat SSL pour votre instance de base de données PostgreSQL lors de la création de celle-ci. Si vous activez la vérification du certificat SSL, ce dernier inclut le point de terminaison de l'instance de base de données en tant que nom commun du certificat SSL pour assurer une protection contre les attaques par usurpation.

Connexion à une instance de base de données PostgreSQL via SSL

Pour se connecter à une instance de base de données PostgreSQL via SSL

  1. Téléchargez le certificat.

    Pour de plus amples informations sur le téléchargement de certificats, veuillez consulter Utilisation de SSL/TLS pour chiffrer une connexion à une de base de données instance.

  2. Importez le certificat dans votre système d'exploitation.

    Pour obtenir des exemples de scripts qui importent des certificats, consultez Exemple de script pour importer les certificats dans votre magasin d'approbations.

  3. Connectez-vous à votre instance de base de données PostgreSQL sur SSL.

    Lors de la connexion avec SSL, votre client peut choisir de vérifier ou pas la chaîne du certificat. Si vos paramètres de connexion spécifient sslmode=verify-ca ou sslmode=verify-full, votre client nécessite que les certificats de l'autorité de certification RDS soient dans leur magasin d'approbations ou référencés dans l'URL de connexion. L'exigence nécessite de vérifier la chaîne du certificat qui signe le certificat de votre base de données.

    Quand un client, tel que psql ou JDBC, est configuré avec la prise en charge du protocole SSL, le comportement par défaut est le suivant : le client essaie d'abord de se connecter à la base de données avec le protocole SSL. En cas d'impossibilité, le client revient à la connexion sans protocole SSL. Le mode sslmode utilisé par défaut diffère selon qu'il s'agit de clients libpq (comme psql) ou de clients JDBC. Pour les clients libpq, la valeur par défaut est prefer, alors qu'elle est verify-full pour les clients JDBC.

    Utilisez le paramètre sslrootcert pour référencer le certificat, par exemple, sslrootcert=rds-ssl-ca-cert.pem.

Voici un exemple d'utilisation de psql pour se connecter à une instance de base de données PostgreSQL.

$ psql -h testpg.cdhmuqifdpib.us-east-1.rds.amazonaws.com -p 5432 \ "dbname=testpg user=testuser sslrootcert=rds-ca-2019-root.pem sslmode=verify-full"

Exiger une connexion SSL à une instance de base de données PostgreSQL

Vous pouvez exiger que les connexions à votre instance de base de données PostgreSQL utilisent SSL en utilisant le paramètre rds.force_ssl. Par défaut, le paramètre rds.force_ssl a pour valeur 0 (désactivé). Vous pouvez affecter au paramètre rds.force_ssl la valeur 1 (activé) pour exiger SSL pour les connexions à votre instance de base de données. La mise à jour du paramètre rds.force_ssl affecte également la valeur 1 (activé) au paramètre ssl PostgreSQL et modifie le fichier pg_hba.conf de votre instance de base de données pour qu'elle prenne en charge la nouvelle configuration SSL.

Vous pouvez définir la valeur du paramètre rds.force_ssl en mettant à jour le groupe de paramètres pour votre instance de base de données. Si le groupe de paramètres pour votre instance de base de données n'est pas le groupe de paramètres par défaut et que le paramètre ssl a déjà pour valeur 1 lorsque vous affectez la valeur 1 au paramètre rds.force_ssl, vous n'avez pas besoin de redémarrer votre instance de base de données. Dans le cas contraire, vous devez redémarrer l'instance de base de données pour que la modification prenne effet. Pour plus d'informations sur les groupes de paramètres, consultez Utilisation de groupes de paramètres de base de données.

Lorsque le paramètre rds.force_ssl a pour valeur 1 pour une instance de base de données, vous voyez une sortie similaire à la suivante lorsque vous vous connectez, indiquant que SSL est à présent requis :

$ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser . . . SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help. postgres=>

Détermination du statut de la connexion SSL

Le statut chiffré de votre connexion est affiché dans la page d'accueil d'ouverture de session lorsque vous vous connectez à l'instance de base de données :

Password for user master: psql (10.3) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) Type "help" for help.   postgres=>

Vous pouvez également charger l'extension sslinfo, puis appeler la fonction ssl_is_used() pour déterminer si SSL est utilisé. La fonction renvoie t si la connexion utilise SSL ; sinon, elle renvoie f.

postgres=> create extension sslinfo; CREATE EXTENSION postgres=> select ssl_is_used(); ssl_is_used --------- t (1 row)

Vous pouvez utiliser la commande select ssl_cipher() pour déterminer le chiffrement SSL :

postgres=> select ssl_cipher(); ssl_cipher -------------------- DHE-RSA-AES256-SHA (1 row)

Si vous activez set rds.force_ssl et redémarrez l'instance, les connexions non-SSL sont refusées avec le message suivant :

$ export PGSSLMODE=disable $ psql postgres -h SOMEHOST.amazonaws.com -p 8192 -U someuser psql: FATAL: no pg_hba.conf entry for host "host.ip", user "someuser", database "postgres", SSL off $

Pour plus d'informations sur l'option sslmode, veuillez consulter Database Connection Control Functions dans la documentation PostgreSQL.

Suites de chiffrement SSL dans RDS for PostgreSQL

Le paramètre de configuration PostgreSQL ssl_ciphers précise les catégories de suites de chiffrement autorisées pour les connexions SSL. Le tableau suivant répertorie les suites de chiffrement par défaut utilisées dans RDS for PostgreSQL.

Version du moteur PostgreSQL Suites de chiffrement
13 HIGH:!aNULL:!3DES
12 HIGH:!aNULL:!3DES
11.4 et versions mineures ultérieures HIGH:MEDIUM:+3DES:!aNULL:!RC4
11.1, 11.2 HIGH:MEDIUM:+3DES:!aNULL
10.9 et versions mineures ultérieures HIGH:MEDIUM:+3DES:!aNULL:!RC4
10.7 et versions mineures inférieures HIGH:MEDIUM:+3DES:!aNULL
9.6.14 et versions mineures supérieures HIGH:MEDIUM:+3DES:!aNULL:!RC4
9.6.12 et versions mineures inférieures HIGH:MEDIUM:+3DES:!aNULL