Utilisation de SSL avec une instance de base de données 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 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. Par défaut, RDS for PostgreSQL utilise et attend de tous les clients qu'ils se connectent en utilisant SSL/TLS, mais vous pouvez également l'exiger. RDS pour PostgreSQL prend en charge les versions 1.1, 1.2 et 1.3 de Transport Layer Security (TLS).

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.

Le support SSL est disponible dans toutes les AWS régions 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 plus d'informations sur le téléchargement de certificats, veuillez consulter .

  2. 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. Les clients basés sur libpq et JDBC sont par défaut sur. prefer

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

L'exemple suivant montre comment utiliser psql pour se connecter à une instance de base de données PostgreSQL en utilisant SSL avec vérification du certificat.

$ psql "host=db-name.555555555555.ap-southeast-1.rds.amazonaws.com port=5432 dbname=testDB user=testuser sslrootcert=rds-ca-rsa2048-g1.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. La valeur par défaut du rds.force_ssl paramètre est 1 (activé) pour RDS pour PostgreSQL version 15 et versions ultérieures. Pour toutes les autres versions majeures de RDS pour PostgreSQL 14 et antérieures, la valeur par défaut de ce paramètre est 0 (off). Vous pouvez affecter au paramètre rds.force_ssl la valeur 1 (activé) pour exiger SSL/TLS pour les connexions à votre cluster de base de données. 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.

Pour modifier la valeur de ce paramètre, vous devez créer un groupe de paramètres de base de données personnalisé. Vous modifiez ensuite la valeur de rds.force_ssl dans votre groupe de paramètres de base de données personnalisé sur 1 pour activer cette fonction. Si vous préparez le groupe de paramètres de base de données personnalisé avant de créer votre instance de base de données RDS for PostgreSQL, vous pouvez le choisir (au lieu d'un groupe de paramètres par défaut) pendant le processus de création. Si vous effectuez cette opération alors que votre instance de base de données RDS for PostgreSQL est déjà en cours d'exécution, vous devez redémarrer l'instance pour que celle-ci utilise le groupe de paramètres personnalisés. Pour de plus amples informations, veuillez consulter Groupes de paramètres pour (Amazon RDS).

Lorsque la fonction rds.force_ssl est active sur votre instance de base de données, les tentatives de connexion qui n'utilisent pas SSL sont rejetées avec le message suivant :

$ psql -h db-name.555555555555.ap-southeast-1.rds.amazonaws.com port=5432 dbname=testDB user=testuser psql: error: FATAL: no pg_hba.conf entry for host "w.x.y.z", user "testuser", database "testDB", SSL off

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)

Pour obtenir des informations plus détaillées, vous pouvez utiliser la requête suivante pour obtenir des informations via pg_settings :

SELECT name as "Parameter name", setting as value, short_desc FROM pg_settings WHERE name LIKE '%ssl%'; Parameter name | value | short_desc ----------------------------------------+-----------------------------------------+------------------------------------------------------- ssl | on | Enables SSL connections. ssl_ca_file | /rdsdbdata/rds-metadata/ca-cert.pem | Location of the SSL certificate authority file. ssl_cert_file | /rdsdbdata/rds-metadata/server-cert.pem | Location of the SSL server certificate file. ssl_ciphers | HIGH:!aNULL:!3DES | Sets the list of allowed SSL ciphers. ssl_crl_file | | Location of the SSL certificate revocation list file. ssl_dh_params_file | | Location of the SSL DH parameters file. ssl_ecdh_curve | prime256v1 | Sets the curve to use for ECDH. ssl_key_file | /rdsdbdata/rds-metadata/server-key.pem | Location of the SSL server private key file. ssl_library | OpenSSL | Name of the SSL library. ssl_max_protocol_version | | Sets the maximum SSL/TLS protocol version to use. ssl_min_protocol_version | TLSv1.2 | Sets the minimum SSL/TLS protocol version to use. ssl_passphrase_command | | Command to obtain passphrases for SSL. ssl_passphrase_command_supports_reload | off | Also use ssl_passphrase_command during server reload. ssl_prefer_server_ciphers | on | Give priority to server ciphersuite order. (14 rows)

Vous pouvez également recueillir toutes les informations sur l'utilisation SSL de votre instance de base de données RDS for PostgreSQL par processus, client et application en utilisant la requête suivante :

SELECT datname as "Database name", usename as "User name", ssl, client_addr, application_name, backend_type FROM pg_stat_ssl JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid ORDER BY ssl; Database name | User name | ssl | client_addr | application_name | backend_type ---------------+-----------+-----+----------------+------------------------+------------------------------ | | f | | | autovacuum launcher | rdsadmin | f | | | logical replication launcher | | f | | | background writer | | f | | | checkpointer | | f | | | walwriter rdsadmin | rdsadmin | t | 127.0.0.1 | | client backend rdsadmin | rdsadmin | t | 127.0.0.1 | PostgreSQL JDBC Driver | client backend postgres | postgres | t | 204.246.162.36 | psql | client backend (8 rows)

Pour identifier le chiffrage utilisé pour votre connexion SSL, vous pouvez utiliser la requête suivante :

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

Pour en savoir plus sur l'option sslmode, consultez Database connection control functions (Fonctions de contrôle des connexions aux bases de données) dans la documentation de PostgreSQL.

Suites de chiffrement SSL dans RDS for PostgreSQL

Le paramètre de configuration ssl_ciphers de PostgreSQL indique les catégories de suites de chiffrement autorisées pour les connexions SSL à la base de données lors de l'utilisation de TLS 1.2 ou d'une version antérieure.

Dans RDS pour PostgreSQL 16 et versions ultérieures, vous pouvez modifier ssl_ciphers le paramètre pour utiliser des valeurs spécifiques issues des suites de chiffrement autorisées. Il s'agit d'un paramètre dynamique qui ne nécessite pas le redémarrage de l'instance de base de données. Pour consulter les suites de chiffrement autorisées, utilisez la console Amazon RDS ou la commande CLI AWS suivante :

aws rds describe-db-parameters --db-parameter-group-name <your-parameter-group> --region <region> --endpoint-url <endpoint-url> --output json | jq '.Parameters[] | select(.ParameterName == "ssl_ciphers")'

Le tableau suivant répertorie à la fois les suites de chiffrement par défaut et les suites de chiffrement autorisées pour les versions qui prennent en charge les configurations personnalisées.

Version du moteur PostgreSQL Valeurs par défaut de la suite ssl_cipher Autoriser les valeurs de la suite ssl_cipher personnalisée répertoriées
17 HIGH:!aNULL:!3DES

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

16 HIGH:!aNULL:!3DES

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

15 HIGH:!aNULL:!3DES

Le ssl_ciphers personnalisé n'est pas pris en charge

14 HIGH:!aNULL:!3DES

Le ssl_ciphers personnalisé n'est pas pris en charge

13 HIGH:!aNULL:!3DES

Le ssl_ciphers personnalisé n'est pas pris en charge

12 HIGH:!aNULL:!3DES

Le ssl_ciphers personnalisé n'est pas pris en charge

11.4 et versions mineures ultérieures HIGH:MEDIUM:+3DES:!aNULL:!RC4

Le ssl_ciphers personnalisé n'est pas pris en charge

11.1, 11.2 HIGH:MEDIUM:+3DES:!aNULL

Le ssl_ciphers personnalisé n'est pas pris en charge

10.9 et versions mineures ultérieures HIGH:MEDIUM:+3DES:!aNULL:!RC4

Le ssl_ciphers personnalisé n'est pas pris en charge

10.7 et versions mineures inférieures HIGH:MEDIUM:+3DES:!aNULL

Le ssl_ciphers personnalisé n'est pas pris en charge

Pour configurer toutes les connexions d'instance afin d'utiliser la suite de TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 chiffrement, modifiez votre groupe de paramètres comme indiqué dans l'exemple suivant :

aws rds modify-db-parameter-group --db-parameter-group-name <your-parameter-group> --parameters "ParameterName='ssl_ciphers',ParameterValue='TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384',ApplyMethod=immediate"

Cet exemple utilise un chiffrement ECDSA, qui oblige votre instance à utiliser une autorité de certification avec cryptographie à courbe elliptique (ECC) pour établir une connexion. Pour plus d'informations sur les autorités de certification fournies par Amazon RDS, consultez la section Autorités de certification.

Vous pouvez vérifier les chiffrements utilisés à l'aide des méthodes décrites dans la section Détermination de l'état de la connexion SSL.

Les chiffrements peuvent avoir des noms différents selon le contexte :

  • Les chiffrements autorisés que vous pouvez configurer dans votre groupe de paramètres sont désignés par leur nom IANA.

  • La bannière sslinfo et la bannière psql d'ouverture de session font référence aux chiffrements utilisant leur nom OpenSSL.

Par défaut, la valeur de ssl_max_protocol_version dans RDS pour PostgreSQL 16 et versions ultérieures est TLS v1.3. Vous devez définir la valeur de ce paramètre sur TLS v1.2 car TLS v1.3 n'utilise pas les configurations de chiffrement spécifiées dans le paramètre. ssl_ciphers Lorsque vous définissez la valeur comme TLS v1.2, les connexions utilisent uniquement les chiffrements que vous définissez dans. ssl_ciphers

aws rds modify-db-parameter-group --db-parameter-group-name <your-parameter-group> --parameters "ParameterName='ssl_max_protocol_version',ParameterValue='TLSv1.2',ApplyMethod=immediate"

Pour garantir que les connexions à la base de données utilisent le protocole SSL, définissez la rds.force_ssl parameter valeur 1 dans votre groupe de paramètres. Pour plus d'informations sur les paramètres et les groupes de paramètres, consultez la section Groupes de paramètres pour Amazon RDS.