La source de données PostgreSQL offre un canal bidirectionnel pour la lecture et l'écriture de données depuis et vers PostgreSQL. Vous pouvez configurer des tâches de synchronisation de données en mode assistant ou en mode script. Cette rubrique décrit la prise en charge de la synchronisation des données PostgreSQL par DataWorks.
Versions prises en charge
Vous pouvez configurer des sources de données pour les versions 10, 11, 12, 13, 14, 15 et 16.4 de PostgreSQL. Pour vérifier la version de votre base de données PostgreSQL, exécutez l'instruction suivante.
SHOW SERVER_VERSION;
Limites
Lecture et écriture hors ligne
Vous pouvez lire des données à partir de vues.
La source de données PostgreSQL prend en charge l'authentification par mot de passe, y compris la méthode SCRAM-SHA-256. Si vous modifiez le mot de passe ou la méthode d'authentification dans la base de données PostgreSQL, mettez à jour la configuration de la source de données, testez à nouveau la connexion et exécutez manuellement les tâches associées pour vérifier les modifications.
PostgreSQL
-
Si un nom de table ou de colonne dans PostgreSQL commence par un chiffre, est sensible à la casse ou contient un trait d'union (-), entourez-le de guillemets doubles (""). Sinon, le plug-in PostgreSQL ne pourra ni lire ni écrire de données. Dans les plug-ins PostgreSQL Reader et Writer, les guillemets doubles ("") constituent un mot clé JSON. Par conséquent, échappez les guillemets doubles avec une barre oblique inverse (\). Par exemple, si une table est nommée
123Test, le nom échappé est\"123Test\".RemarqueLes guillemets doubles ouvrants et fermants doivent tous deux être échappés avec une barre oblique inverse (\).
Le mode assistant ne prend pas en charge l'échappement. Passez en mode script pour échapper les caractères.
Le code suivant illustre un exemple d'échappement des caractères en mode script.
"parameter": { "datasource": "abc", "column": [ "id", "\"123Test\"", //Add escape characters ], "where": "", "splitPk": "id", "table": "public.wpw_test" }, La mise à jour des données dans une source de données PostgreSQL basée sur un index unique n'est pas prise en charge. Pour mettre à jour des données, écrivez-les d'abord dans une table temporaire, puis utilisez l'opération
RENAME.
Lecture en temps réel
Les limites suivantes s'appliquent aux tâches de synchronisation en temps réel dans Data Integration :
-
Data Integration offre une prise en charge spéciale pour
ADD COLUMN:-
Contrainte : Vous ne pouvez pas combiner une opération
ADD COLUMNavec d'autres opérationsADD COLUMN,DROP COLUMNou d'autres instructions DDL dans une seule transaction.ImportantSi vous utilisez
ADD COLUMNavec d'autres opérations, telles queDROP COLUMN、RENAME COLUMNou d'autres opérationsALTER COLUMN, la tâche de synchronisation des données risque de ne pas s'exécuter correctement. Limitation : Les opérations DDL autres que
ADD COLUMNne sont pas reconnues.
-
ALTER TABLE/CREATE TABLEn'est pas pris en charge.La réplication des tables TEMPORARY, UNLOGGED et Hyper n'est pas prise en charge. PostgreSQL ne fournit aucun mécanisme permettant de s'abonner à l'analyse des journaux WAL pour ces types de tables.
La réplication des Sequences (
serial/bigserial/identity) n'est pas prise en charge.L'opération TRUNCATE n'est pas prise en charge.
La réplication d'objets volumineux (Bytea) n'est pas prise en charge.
La réplication des vues, des vues matérialisées et des tables étrangères n'est pas prise en charge.
Lorsque PostgreSQL est utilisé comme source pour la synchronisation en temps réel sur une seule table ou sur toute la base de données, seules les tables pour lesquelles le compte dispose des autorisations de propriétaire peuvent être synchronisées.
Types de colonnes pris en charge
La plupart des types de données PostgreSQL sont pris en charge. Toutefois, certains types ne sont pas pris en charge pour les opérations de lecture et d'écriture par lots. Vérifiez vos types de données avant de poursuivre.
Le tableau suivant répertorie les mappages de conversion de type pour PostgreSQL.
|**Catégorie de type**
|
**Type de données PostgreSQL**
| | --- | --- | |
Entier
|
BIGINT, BIGSERIAL, INTEGER, SMALLINT et SERIAL
| |
Virgule flottante
|
DOUBLE PRECISION, MONEY, NUMERIC et REAL
| |
Chaîne
|
VARCHAR, CHAR, TEXT, BIT et INET
| |
Date et heure
|
DATE, TIME et TIMESTAMP
| |
Booléen
|
BOOL
| |
Binaire
|
BYTEA
|
Les types de colonnes autres que ceux répertoriés ci-dessus ne sont pas pris en charge.
Dans PostgreSQL Reader, convertissez les types MONEY, INET et BIT à l'aide d'une syntaxe similaire à
a_inet::varchar.
Préparatifs avant la synchronisation des données
Avant de synchroniser des données dans DataWorks, préparez l'environnement PostgreSQL comme décrit dans cette section afin de garantir que les tâches de synchronisation des données PostgreSQL puissent être configurées et exécutées correctement dans DataWorks. Les sections suivantes décrivent les étapes de préparation pour la synchronisation PostgreSQL.
Préparation 1 : Créer un compte et configurer les autorisations
Prévoyez un compte de connexion à la base de données pour les opérations ultérieures. Ce compte doit disposer des autorisations REPLICATION、 LOGIN sur la base de données.
La synchronisation en temps réel prend uniquement en charge le mécanisme de réplication logique. La réplication logique utilise un modèle de publication et d'abonnement dans lequel un ou plusieurs abonnés s'abonnent à une ou plusieurs publications sur un nœud éditeur. Les abonnés extraient les données des publications auxquelles ils sont abonnés.
La réplication logique d'une table commence généralement par la prise d'un instantané des données sur la base de données éditrice et leur copie vers l'abonné. Une fois l'instantané terminé, les modifications apportées à l'éditeur sont envoyées à l'abonné en temps réel.
-
Créez un compte.
Pour plus d'informations, consultez Créer un compte.
-
Configurez les autorisations.
Vérifiez si le compte dispose de l'autorisation
replication.select userepl from pg_user where usename='xxx'Le résultat attendu est True. Si le résultat est False, le compte ne dispose pas de l'autorisation. Exécutez l'instruction suivante pour accorder l'autorisation.
ALTER USER <user> REPLICATION;
Préparation 2 : Vérifier si une base de données de secours est prise en charge
SELECT pg_is_in_recovery()
Seule la base de données principale est prise en charge. Le résultat attendu est False. Si le résultat est True, la base de données est une base de données de secours. La synchronisation en temps réel ne prend pas en charge les bases de données de secours. Modifiez la configuration de la source de données pour qu'elle pointe vers la base de données principale. Pour plus d'informations, consultez Configurer la source de données.
Préparation 3 : Vérifier si wal_level est défini sur logical
show wal_level
wal_level spécifie le niveau de wal_log. Le résultat attendu est logical. Dans le cas contraire, le mécanisme de réplication logique n'est pas pris en charge.
Préparation 4 : Vérifier si un processus wal_sender peut être démarré
-- Query max_wal_senders show max_wal_senders; -- Query the number of pg_stat_replication entries select count(*) from pg_stat_replication
Si max_wal_senders n'est pas vide et que sa valeur est supérieure au nombre d'entrées max_wal_senders dans pg_stat_replication, des processus wal_sender inactifs sont disponibles. La base de données PostgreSQL démarre des processus wal_sender pour que le programme de synchronisation des données envoie les journaux aux abonnés.
Pour chaque table à synchroniser, exécutez manuellement l'instruction ALTER TABLE [tableName] REPLICA IDENTITY FULL afin d'accorder les autorisations requises. Dans le cas contraire, la tâche de synchronisation en temps réel échouera.
Après le démarrage d'une tâche de synchronisation en temps réel PostgreSQL, des slots et des publications sont automatiquement créés dans la base de données. Le format du nom du slot est di_slot_ + ID de la tâche de synchronisation et le format du nom de la publication est di_pub_ + ID de la solution. Après l'arrêt ou le retrait du déploiement de la tâche de synchronisation en temps réel, supprimez manuellement les slots et les publications. Dans le cas contraire, les fichiers WAL PostgreSQL risquent de croître continuellement. Recherchez l'ID de la tâche de synchronisation dans la liste des tâches de DataWorks Data Integration, trouvez la tâche correspondante et vérifiez son statut ainsi que ses configurations de planification pour confirmer si la tâche a été arrêtée ou retirée du déploiement.
Ajouter une source de données
Avant de développer une tâche de synchronisation dans DataWorks, ajoutez la source de données requise à DataWorks en suivant les instructions fournies dans Configuration de la source de données. Consultez les descriptions des paramètres dans la console DataWorks pour comprendre la signification des paramètres lors de l'ajout d'une source de données.
Si l'authentification SSL est activée pour votre base de données PostgreSQL, activez également l'authentification SSL lors de l'ajout d'une source de données PostgreSQL dans DataWorks. Pour plus d'informations, consultez Ajouter une authentification SSL pour une source de données PostgreSQL.
Développement de tâches de synchronisation de données : guide du processus de synchronisation PostgreSQL
Pour obtenir des informations sur le point d'entrée et la procédure de configuration d'une tâche de synchronisation, consultez les guides de configuration suivants.
Guide de configuration des tâches de synchronisation par lots sur une seule table
Pour plus d'informations sur la procédure, consultez Configurer une tâche de synchronisation par lots en mode assistant et Configurer une tâche de synchronisation par lots en mode script.
Pour tous les paramètres et les démonstrations de scripts relatifs à la configuration en mode script, consultez Annexe 1 : Démonstration de script et description des paramètres ci-dessous.
Guide de configuration des tâches de synchronisation pour la lecture par lots sur toute la base de données et la lecture en temps réel sur toute la base de données
Pour plus d'informations sur la procédure, consultez Configurer une tâche de synchronisation par lots sur toute la base de données et Configurer une tâche de synchronisation en temps réel sur toute la base de données.
FAQ
-
Problème de récupération des données de synchronisation principal/secours
Le problème de synchronisation principal/secours fait référence à un scénario dans lequel PostgreSQL utilise la reprise après sinistre principal/secours et la base de données de secours récupère continuellement les données de la base de données principale. En raison d'un décalage temporel entre la synchronisation des données principales et secondaires, notamment dans certaines situations telles que la latence réseau, les données récupérées sur la base de données de secours peuvent différer considérablement de celles de la base de données principale. Les données synchronisées à partir de la base de données de secours ne constituent pas un instantané complet de l'heure actuelle.
-
Contrainte de cohérence
PostgreSQL est un système SGBDR qui fournit une interface de requête de données fortement cohérente. Par exemple, lorsqu'une tâche de synchronisation est en cours d'exécution et que d'autres rédacteurs écrivent des données dans la base de données, PostgreSQL Reader ne récupère pas les données nouvellement écrites en raison de la fonctionnalité d'instantané de la base de données.
Ce qui précède décrit les caractéristiques de cohérence de la synchronisation des données de PostgreSQL Reader en mode monothread. PostgreSQL Reader peut effectuer une extraction de données concurrente selon votre configuration, de sorte qu'une cohérence stricte des données ne peut pas être garantie.
Après que PostgreSQL Reader a fractionné les données en fonction de splitPk, plusieurs tâches concurrentes sont démarrées séquentiellement pour terminer la synchronisation des données. Ces tâches concurrentes n'appartiennent pas à la même transaction de lecture et il existe des intervalles de temps entre elles. Par conséquent, les données ne constituent pas un instantané de données complet et cohérent.
Les instantanés cohérents pour les opérations multithread sont techniquement irréalisables. Cela ne peut être résolu que d'un point de vue ingénierie. Les solutions suivantes impliquent des compromis. Choisissez en fonction de votre situation.
Utilisez la synchronisation monothread, ce qui signifie qu'il n'y a pas de fragmentation des données. L'inconvénient est une vitesse plus lente, mais cela garantit la cohérence.
Arrêtez les autres rédacteurs de données pour garantir que les données actuelles sont statiques, par exemple en verrouillant les tables ou en arrêtant la synchronisation de la base de données de secours. L'inconvénient est un impact potentiel sur les activités en ligne.
-
Problème d'encodage de la base de données
PostgreSQL prend uniquement en charge les encodages simplifiés chinois EUC_CN et UTF-8 côté serveur. PostgreSQL Reader utilise JDBC pour l'extraction des données au niveau sous-jacent. JDBC prend nativement en charge divers encodages et effectue la conversion d'encodage au niveau sous-jacent. Par conséquent, PostgreSQL Reader ne nécessite pas que vous spécifiiez un encodage et peut détecter et convertir automatiquement les encodages.
Si l'encodage d'écriture sous-jacent de PostgreSQL est incohérent avec son encodage configuré, PostgreSQL Reader ne peut pas détecter ce problème et ne peut fournir aucune solution. Les données exportées peuvent contenir des caractères illisibles.
-
Méthodes de synchronisation des données incrémentielles
PostgreSQL Reader utilise des instructions SELECT JDBC pour l'extraction des données. Par conséquent, utilisez
SELECT…WHERE…pour extraire des données incrémentielles. Les méthodes sont les suivantes :Lorsqu'une application en ligne écrit des données dans la base de données, elle renseigne le champ de modification avec l'horodatage de modification, y compris les insertions, les mises à jour et les suppressions (suppressions logiques). Pour de telles applications, PostgreSQL Reader doit uniquement ajouter l'horodatage de la phase de synchronisation précédente dans la condition where.
Pour les nouvelles données séquentielles ajoutées, PostgreSQL Reader doit uniquement ajouter l'ID auto-incrémenté maximal de la phase précédente dans la condition where.
S'il n'existe aucune colonne permettant de distinguer les nouvelles données des données modifiées au niveau métier, PostgreSQL Reader ne peut pas effectuer de synchronisation de données incrémentielles et ne peut synchroniser que les données complètes.
-
Sécurité SQL
PostgreSQL Reader fournit l'instruction querySql pour vous permettre d'implémenter des instructions SELECT personnalisées. PostgreSQL Reader n'effectue aucune validation de sécurité sur l'instruction querySql.
-
Si vous ne pouvez pas sélectionner le nom de table souhaité lors de la configuration d'une tâche de synchronisation, procédez au dépannage comme suit :
Vérifiez si la source de données est connectée.
Vérifiez si le compte PostgreSQL utilisé pour la source de données dispose des autorisations de table requises.
Si la base de données contient un grand nombre de tables, nous vous recommandons de rechercher directement en saisissant le nom de la table.
PostgreSQL ne prend pas en charge la synchronisation de tables fragmentées. Si vous avez un grand nombre de tables PostgreSQL à synchroniser, nous vous recommandons d'utiliser une tâche de synchronisation sur toute la base de données. Pour plus d'informations, consultez Guide de configuration des tâches de synchronisation sur toute la base de données.
Annexe 1 : Démonstration de script et description des paramètres
Configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code
Si vous souhaitez configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code, configurez les paramètres associés dans le script conformément aux exigences de format de script unifié. Pour plus d'informations, consultez Configuration en mode script. Les informations suivantes décrivent les paramètres que vous devez configurer pour les sources de données lorsque vous configurez une tâche de synchronisation par lots à l'aide de l'éditeur de code.
Démonstration de script Reader
Pour configurer un job qui extrait des données d'une base de données PostgreSQL, utilisez le mode script. Pour plus d'informations, consultez Configurer une tâche de synchronisation par lots en mode script.
{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"postgresql",// The plugin name. "parameter":{ "datasource":"",// The data source. "column":[// The columns. "col1", "col2" ], "where":"",// The filter condition. "splitPk":"",// The column used as the split key for data sharding. Data synchronization starts concurrent tasks for data synchronization. "table":""// The table name. }, "name":"Reader", "category":"reader" }, { "stepType":"stream", "parameter":{}, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true, // A value of false for throttle indicates that throttling is disabled and the mbps parameter does not take effect. A value of true indicates that throttling is enabled. "concurrent":1, // The concurrency of the job. "mbps":"12"// The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Paramètres du script Reader
Paramètre | Description | Obligatoire | Valeur par défaut |
datasource | Nom de la source de données. Le mode script vous permet d'ajouter des sources de données. La valeur de ce paramètre doit être identique au nom de la source de données que vous avez ajoutée. | Oui | N/A |
table | Nom de la table à partir de laquelle vous souhaitez synchroniser les données. | Oui | N/A |
column | Ensemble des noms de colonnes à synchroniser dans la table configurée, décrit dans un tableau JSON. Par défaut, toutes les colonnes sont utilisées, par exemple [*].
| Oui | N/A |
splitFactor | Facteur de division. Vous pouvez configurer le nombre de divisions de données. Si plusieurs threads concurrents sont configurés, les données sont divisées en concurrence × splitFactor parties. Par exemple, si la concurrence est de 5 et splitFactor de 5, les données sont divisées en 5 × 5 = 25 parties et exécutées sur 5 threads concurrents. Remarque Plage de valeurs recommandée : 1 à 100. Des valeurs excessivement élevées peuvent provoquer des erreurs de dépassement de mémoire (OOM). | Non | 5 |
splitPk | Lorsque PostgreSQL Reader extrait des données, si vous spécifiez splitPk, la colonne représentée par splitPk est utilisée pour le partitionnement des données. La synchronisation des données démarre des tâches concurrentes pour améliorer les performances de synchronisation :
| Non | N/A |
where | Condition de filtre. PostgreSQL Reader concatène le SQL en fonction des conditions column, table et where spécifiées, et extrait les données en fonction du SQL. Par exemple, lors des tests, vous pouvez utiliser la condition where pour spécifier un scénario métier. Généralement, les données du jour en cours sont synchronisées. Vous pouvez spécifier la condition where comme
| Non | N/A |
querySql (mode avancé, non disponible en mode assistant) | Dans certains scénarios métier, la configuration where est insuffisante pour décrire les conditions de filtre. Utilisez ce paramètre pour définir un SQL de filtre personnalisé. Lorsque ce paramètre est configuré, le système de synchronisation des données ignore les configurations de tables, de colonnes et de splitPk, et utilise directement le contenu de ce paramètre pour filtrer les données. Par exemple, pour synchroniser des données après une jointure multi-tables, utilisez | Non | N/A |
fetchSize | Ce paramètre spécifie le nombre d'enregistrements extraits par lot entre le plug-in et le serveur de base de données. Cette valeur détermine le nombre d'interactions réseau entre Data Integration et le serveur, et peut améliorer considérablement les performances d'extraction des données. Remarque Une valeur fetchSize trop élevée (>2048) peut entraîner un dépassement de mémoire (OOM) du processus de synchronisation des données. | Non | 512 |
Démonstration de script Writer
Voici un exemple de configuration de script. Pour plus d'informations, consultez les descriptions des paramètres ci-dessus.
{ "type":"job", "version":"2.0",// The version number. "steps":[ { "stepType":"stream", "parameter":{}, "name":"Reader", "category":"reader" }, { "stepType":"postgresql",// The plugin name. "parameter":{ "datasource":"",// The data source. "column":[// The columns. "col1", "col2" ], "table":"",// The table name. "preSql":[],// The SQL statements executed before the data synchronization task. "postSql":[],// The SQL statements executed after the data synchronization task. }, "name":"Writer", "category":"writer" } ], "setting":{ "errorLimit":{ "record":"0"// The error count. }, "speed":{ "throttle":true,// A value of false for throttle indicates that throttling is disabled and the mbps parameter does not take effect. A value of true indicates that throttling is enabled. "concurrent":1, // The concurrency of the job. "mbps":"12"// The throttling rate. 1 mbps = 1 MB/s. } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }
Paramètres du script Writer
Paramètre | Description | Obligatoire | Valeur par défaut |
datasource | Nom de la source de données. Le mode script vous permet d'ajouter des sources de données. La valeur de ce paramètre doit être identique au nom de la source de données que vous avez ajoutée. | Oui | N/A |
table | Nom de la table vers laquelle vous souhaitez synchroniser les données. | Oui | N/A |
writeMode | Mode d'écriture. Actuellement, les modes insert et copy sont pris en charge :
| Non | insert |
column | Colonnes vers lesquelles les données sont écrites dans la table de destination, séparées par des virgules. Par exemple, | Oui | N/A |
preSql | Instructions SQL à exécuter avant l'exécution de la tâche de synchronisation des données. Actuellement, le mode assistant n'autorise qu'une seule instruction SQL, tandis que le mode script prend en charge plusieurs instructions SQL, par exemple pour effacer les anciennes données. | Non | N/A |
postSql | Instructions SQL à exécuter après l'exécution de la tâche de synchronisation des données. Actuellement, le mode assistant n'autorise qu'une seule instruction SQL, tandis que le mode script prend en charge plusieurs instructions SQL, par exemple pour ajouter un horodatage. | Non | N/A |
batchSize | Nombre d'enregistrements soumis par lot. Cette valeur peut réduire considérablement le nombre d'interactions réseau entre Data Integration et PostgreSQL, et améliorer le débit global. Toutefois, si cette valeur est trop élevée, le processus Data Integration risque de manquer de mémoire (OOM). | Non | 1 024 |
pgType | Configuration de conversion pour les types spécifiques à PostgreSQL. Les types pris en charge incluent bigint[], double[], text[], Jsonb et JSON. Voici un exemple de configuration. | Non | N/A |
Annexe 2 : Ajouter une authentification SSL pour une source de données PostgreSQL
Description des fichiers d'authentification SSL PostgreSQL
Lorsque vous créez ou modifiez une connexion de source de données PostgreSQL dans DataWorks, vous pouvez configurer l'authentification SSL. Les paramètres de configuration de l'authentification SSL sont décrits ci-dessous.
Base de données PostgreSQL | Configuration de la source de données PostgreSQL DataWorks | |||
Chiffrement de liaison SSL | Chiffrement client | Configuration ACL | Élément de configuration | Description |
Activé | Désactivé | N/A | Fichier de certificat Truststore | Facultatif. Le client utilise ce certificat pour authentifier le serveur.
|
Activé | Configuration ACL définie sur prefer |
| Le Fichier de certificat Keystore et le Fichier de clé privée sont tous deux facultatifs. Lorsque la Configuration ACL est définie sur prefer, le serveur n'impose pas la vérification du certificat client.
| |
Configuration ACL définie sur verify-ca |
| |||
-
Lorsque la configuration ACL est définie sur prefer, le contenu du client n'est pas imposé pour la vérification.
Si aucun fichier n'est configuré pour l'authentification SSL, une connexion régulière est utilisée.
Si des fichiers d'authentification sont ajoutés pour l'authentification SSL, reportez-vous aux descriptions correspondantes dans le tableau ci-dessus.
Lorsque la configuration ACL est définie sur verify-ca, configurez le Fichier de certificat Keystore, le Fichier de clé privée et le Mot de passe de la clé privée pour créer la source de données.
Obtenir les fichiers d'authentification SSL PostgreSQL
Cette section utilise une instance ApsaraDB RDS for PostgreSQL comme exemple pour générer des certificats d'authentification SSL.
-
Obtenez le Fichier de certificat Truststore.
Pour plus d'informations sur l'obtention du Fichier de certificat Truststore, consultez Configurer une connexion chiffrée SSL.
Accédez à la liste des instances RDS, cliquez sur l'instance RDS dans la région correspondante, puis cliquez sur l'ID de l'instance cible pour accéder à la page des détails de l'instance.
-
Sélectionnez la chaîne de connexion que vous souhaitez protéger.
Cliquez sur l'onglet SSL.
Cliquez sur Use Cloud Certificate.
Dans la ligne Configure Database Certificate (Prevent Database Spoofing), cliquez sur Modify.
Dans la boîte de dialogue Select Connection String to Protect, sélectionnez la chaîne de connexion cible (par exemple, l'adresse du réseau interne).
Cliquez sur OK.
RemarqueSi le point de terminaison public est activé, les points de terminaison internes et publics sont affichés. Un certificat cloud ne peut protéger qu'un seul point de terminaison. Étant donné que le point de terminaison interne est relativement plus sécurisé, nous vous recommandons de protéger le point de terminaison public. Pour plus d'informations sur la façon de visualiser les points de terminaison internes et publics, consultez Afficher les points de terminaison internes et publics.
Si vous devez protéger à la fois les points de terminaison internes et publics, consultez Configurer un certificat personnalisé.
Après avoir configuré le certificat cloud, le Running Status de l'instance passe à Modifying SSL. Cet état dure environ trois minutes. Attendez que l'état d'exécution passe à Running avant de poursuivre.
c. Cliquez sur Download CA Certificate pour obtenir le fichier Truststore certificate.
Le package de certificats CA téléchargé contient trois fichiers. Lorsque vous configurez la source de données PostgreSQL dans DataWorks, téléchargez le fichier avec l'extension
.pemou le fichier avec l'extension.p7bdans l'élément de configuration Truststore certificate file. -
Obtenez et configurez le Fichier de certificat Keystore, le Fichier de clé privée et le Mot de passe de la clé privée.
Prérequis : Vous avez terminé la configuration d'une connexion chiffrée SSL ou la configuration d'un certificat personnalisé, et vous disposez de l'outil OpenSSL.
RemarqueSi vous utilisez un système Linux, OpenSSL est préinstallé. Si vous utilisez un système Windows, téléchargez et installez le package logiciel OpenSSL.
Pour plus d'informations sur l'obtention et la configuration du Fichier de certificat Keystore, du Fichier de clé privée et du Mot de passe de la clé privée, consultez Configurer un certificat client.
-
Utilisez l'outil OpenSSL sur un système Linux ou installez le logiciel OpenSSL sur un système Windows pour générer un certificat autosigné (ca1.crt) et sa clé privée (ca1.key).
openssl req -new -x509 -days 3650 -nodes -out ca1.crt -keyout ca1.key -subj "/CN=root-ca1" -
Générez un fichier de demande de signature de certificat client (client.csr) et une clé privée de certificat client (client.key).
openssl req -new -nodes -text -out client.csr -keyout client.key -subj "/CN=<client_username>"Dans cette commande, la valeur CN après le paramètre
-subjdoit être définie sur le nom d'utilisateur utilisé par le client pour accéder à la base de données. -
Générez le certificat client (client.crt).
openssl x509 -req -in client.csr -text -days 365 -CA ca1.crt -CAkey ca1.key -CAcreateserial -out client.crt -
Si votre serveur RDS PostgreSQL requiert la vérification du certificat CA client, ouvrez le fichier de certificat autosigné client généré ca1.crt, copiez le contenu du certificat et collez-le dans la boîte de dialogue Client CA Certificate Public Key Content en tant que certificat CA client.
Dans le panneau Configure Client CA Certificate, cliquez sur Enable Client CA Certificate. Dans la boîte de dialogue qui s'affiche, collez le contenu de la clé publique du certificat CA généré (ca1.crt) dans la zone de texte Public Key, puis cliquez sur OK. Après la modification du certificat CA client, l'instance redémarre automatiquement.
-
Après avoir configuré le certificat CA client côté RDS, lorsque vous configurez la source de données PostgreSQL dans DataWorks, convertissez la clé privée du certificat client client.key en un fichier client.pk8 et téléchargez le fichier client.pk8 dans l'élément de configuration Private key file de la configuration de la source de données PostgreSQL DataWorks.
cp client.key client.pk8 -
Configurez le mot de passe de la clé privée.
openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DESRemarqueLorsque vous exécutez la commande pour configurer le mot de passe de la clé privée, vous devez saisir un mot de passe. Si vous définissez un mot de passe, utilisez le même mot de passe pour le mot de passe de la clé privée dans la configuration de la source de données PostgreSQL DataWorks.
-
Configurer les fichiers d'authentification SSL PostgreSQL
Lorsque vous téléchargez les fichiers de certificat obtenus dans les éléments de configuration PostgreSQL DataWorks, effectuez les opérations suivantes :
Truststore certificate file : Téléchargez le fichier avec l'extension
.pemou le fichier avec l'extension.p7bobtenu à l'étape Obtenir le fichier de certificat Truststore.Keystore certificate file : Téléchargez le fichier de certificat client client.crt obtenu à l'étape Générer le certificat client.
Private key file : Téléchargez le fichier client.pk8 converti à partir de la clé privée du certificat client client.key à l'étape Convertir le fichier de clé privée.
Private key password : Mot de passe configuré à l'étape Configurer le mot de passe de la clé privée.
ACL configuration : Accédez à la liste des instances RDS, cliquez sur l'instance RDS dans la région correspondante, cliquez sur l'ID de l'instance cible pour accéder à la page des détails de l'instance, puis cliquez sur Data Security > ACL Configuration pour modifier le paramètre. Vous pouvez sélectionner différentes méthodes d'authentification SSL. Pour plus d'informations, consultez Configurer ACL.
Les méthodes d'authentification SSL disponibles sont :
prefer : Chiffre la liaison de données.
verify-ca : Chiffre la liaison de données et vérifie l'authenticité du certificat client.
verify-full : Chiffre la liaison de données, vérifie l'authenticité du certificat client et vérifie que le CN du certificat correspond au nom d'utilisateur de la base de données.
cert : Utilise un certificat au lieu d'un mot de passe pour se connecter, chiffre la liaison de données, vérifie l'authenticité du certificat client et vérifie que le CN du certificat correspond au nom d'utilisateur de la base de données.
Si la méthode d'authentification ACL est définie sur prefer, le serveur PostgreSQL n'impose pas la vérification du certificat client.
Si la méthode d'authentification ACL est définie sur verify-ca dans RDS PostgreSQL, vous devez télécharger le certificat client correct lors de la configuration de la source de données PostgreSQL dans DataWorks, afin que le serveur puisse vérifier l'authentification du client.