Verbinding maken met PostgreSQL
Voor het tot stand brengen van beveiligde verbindingen met Azure Database for PostgreSQL moet u inzicht krijgen in de onderdelen van de verbindingsreeks, verificatieopties en configuratie van transportlaagbeveiliging. Voor AI-toepassingen die regelmatig gegevens lezen en schrijven, voorkomt het ophalen van de verbindingsconfiguratie vanaf het begin verificatiefouten en beveiligingsproblemen in productie.
Basisprincipes van verbindingen
PostgreSQL-verbindingen vereisen verschillende parameters waarmee de server-, database- en gebruikersreferenties worden geïdentificeerd. Azure Database for PostgreSQL maakt gebruik van een specifieke eindpuntindeling en dwingt standaard veilig transport af.
Uw servereindpunt volgt het patroon <server-name>.postgres.database.azure.com, waarbij <server-name> de unieke naam is die u hebt opgegeven bij het maken van de server. De FQDN (Fully Qualified Domain Name) wordt omgezet in het openbare IP-adres van de server bij gebruik van openbare toegang of een privé-IP-adres bij het gebruik van VNet-integratie.
Voor een PostgreSQL-verbinding zijn deze kernparameters vereist: de host (server-FQDN), poort (5432 voor directe verbindingen of 6432 voor PgBouncer), databasenaam, gebruikersnaam (voor Entra-verificatie, gebruik username@servername indeling), wachtwoord (statisch of Entra-token) en SSL-modus. Verschillende clientbibliotheken en hulpprogramma's accepteren deze parameters in verschillende indelingen, waaronder verbindingsreeksen, trefwoord-waardeparen of afzonderlijke parameters.
Verificatiemethoden
Azure Database for PostgreSQL ondersteunt twee verificatiemethoden: Microsoft Entra-verificatie biedt een sterkere beveiliging via toegang op basis van tokens, terwijl systeemeigen PostgreSQL-verificatie gebruikmaakt van traditionele gebruikersnaam- en wachtwoordreferenties.
Microsoft Entra-verificatie maakt gebruik van OAuth 2.0-tokens in plaats van wachtwoorden. Deze benadering kan worden geïntegreerd met het identiteitsplatform van Azure en biedt gecentraliseerd identiteitsbeheer, elimineert wachtwoordopslag (tokens zijn kortlevend), ondersteunt beheerde identiteiten voor door Azure gehoste toepassingen en maakt audittrails in aanmeldingslogboeken van Entra. Als u Entra-verificatie wilt gebruiken, configureert u een Microsoft Entra-beheerder op uw server (een gebruikersaccount, groep of service-principal). Na de configuratie maken Entra-identiteiten verbinding door een token van de https://ossrdbms-aad.database.windows.net resource te verkrijgen.
Het verbindingsproces werkt als volgt:
- Uw toepassing vraagt om een toegangstoken van Microsoft Entra ID.
- Entra valideert de identiteit en retourneert een token.
- Uw toepassing maakt verbinding met PostgreSQL met behulp van het token als het wachtwoord.
- PostgreSQL valideert het token op basis van de geconfigureerde Entra-beheerder.
In Python kunt u de azure-identity bibliotheek gebruiken om tokens te verkrijgen:
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")
# Use token.token as the password in your connection string
De DefaultAzureCredential klasse probeert automatisch meerdere verificatiemethoden op volgorde, inclusief beheerde identiteit (wanneer deze wordt uitgevoerd in Azure), Azure CLI-referenties (voor lokale ontwikkeling) en andere opties.
Met systeemeigen PostgreSQL-verificatie worden gebruikersnamen en versleutelde wachtwoorden opgeslagen in de database. Deze aanpak is geschikt wanneer toepassingen geen Entra-verificatie (verouderde toepassingen) kunnen gebruiken, moet u tijdens de ontwikkeling toegang verlenen tot identiteiten buiten uw Entra-tenant of in een omgeving zonder Azure-connectiviteit. Wanneer u PostgreSQL-verificatie gebruikt, slaat u wachtwoorden op in Azure Key Vault in plaats van toepassingsconfiguratie, roteert u wachtwoorden regelmatig, gebruikt u sterk gegenereerde wachtwoorden en beperkt u de machtigingen van elke databasegebruiker. De gebruikersnaam en het wachtwoord van de beheerder die u opgeeft tijdens het maken van de server, maken gebruik van PostgreSQL-verificatie.
TLS/SSL-configuratie
Azure Database for PostgreSQL versleutelt alle verbindingen met tls (Transport Layer Security). De server vereist standaard TLS en ondersteunt TLS 1.2 en 1.3. Verbindingen met oudere TLS-versies worden geweigerd.
PostgreSQL-clients gebruiken de parameter voor het sslmode beheren van versleuteling en certificaatvalidatie. De beschikbare modi zijn:
- Uitschakelen: Geen versleuteling. Azure weigert verbindingen met behulp van deze modus.
- Toestaan: Versleutelt als de server deze nodig heeft, maar geen certificaten valideert.
- Liever: Versleutelt als de server deze ondersteunt, maar geen certificaten valideert.
- Vereist: Hiermee wordt versleuteling afgedwongen, maar worden certificaten niet gevalideerd.
- verify-ca: Dwingt versleuteling af en valideert het servercertificaat tegen vertrouwde certificeringsinstanties.
- controleren-volledig: Dwingt versleuteling af, valideert de CA en bevestigt dat de hostnaam van het certificaat overeenkomt met de server.
Gebruik voor productietoepassingen verify-full om ervoor te zorgen dat u verbinding maakt met de legitieme Azure PostgreSQL-server. Deze modus valideert dat de server een certificaat presenteert dat is ondertekend door een vertrouwde certificeringsinstantie en dat de algemene naam of alternatieve naam van het certificaat overeenkomt met de hostnaam van de server.
De verify-ca en verify-full modi vereisen dat uw client toegang heeft tot de basis-CA-certificaten die het certificaat van de server hebben ondertekend. De meeste besturingssystemen en Azure-hostingomgevingen bevatten al de DigiCert- en Microsoft-basis-CA's die door Azure Database for PostgreSQL worden gebruikt. Als certificaatvalidatie mislukt, moet u mogelijk de basiscertificaten downloaden uit de PKI-opslagplaats van Microsoft en uw client configureren om deze te gebruiken.
Groepsgewijze verbindingen met PgBouncer
Azure Database for PostgreSQL bevat ingebouwde PgBouncer, die u kunt inschakelen via de configuratie-instellingen van de server in Azure Portal of met behulp van de Azure CLI. Als dit is ingeschakeld, maakt u verbinding op poort 6432 in plaats van 5432.
Belangrijk
PgBouncer is alleen beschikbaar op de rekenlagen voor gewoon gebruik en geheugen geoptimaliseerd. Als uw server gebruikmaakt van de Burstable-laag, kunt u ingebouwde PgBouncer niet inschakelen.
PgBouncer onderhoudt een pool van verbindingen met de databaseserver en multipext clientverbindingen naar deze pool. Dit vermindert de overhead van het tot stand brengen van verbindingen, wat waardevol is voor toepassingen die veel kortstondige verbindingen maken.
PgBouncer inschakelen met behulp van de Azure CLI:
az postgres flexible-server parameter set \
--resource-group myResourceGroup \
--server-name myserver \
--name pgbouncer.enabled \
--value true
Nadat u de verbindingsreeks hebt ingeschakeld, werkt u de verbindingsreeks bij om poort 6432 te gebruiken:
postgresql://user@myserver.postgres.database.azure.com:6432/mydb?sslmode=require
Optimalisatiestrategieën voor groepsgewijze verbindingen, waaronder poolgrootte en transactie versus sessiemodi, worden behandeld in de module Prestaties, indexeren en schalen optimaliseren.
Overwegingen voor netwerktoegang
Azure Database for PostgreSQL ondersteunt twee netwerkmodellen: openbare toegang met firewallregels en privétoegang met VNet-integratie. Uw platform- of operations-team configureert deze instellingen doorgaans, maar als u deze begrijpt, kunt u verbindingsproblemen oplossen.
Met openbare toegang heeft de server een openbaar IP-adres en firewallregels die bepalen welke client-IP-adressen verbinding kunnen maken. Als u geen verbinding kunt maken vanaf uw ontwikkelcomputer, controleert u of uw IP-adres is toegestaan in de firewallregels.
Met privétoegang heeft de server alleen een privé-IP-adres in een virtueel Azure-netwerk. U kunt alleen verbinding maken vanuit resources binnen hetzelfde VNet, gekoppelde netwerken of via VPN/ExpressRoute. Privétoegang is gebruikelijk in productieomgevingen waar netwerkisolatie vereist is.
Voorbeelden van verbindingsreeksen
In de volgende voorbeelden ziet u veelvoorkomende verbindingsreekspatronen voor Azure Database for PostgreSQL.
# Basic connection with SSL required
postgresql://myuser:mypassword@myserver.postgres.database.azure.com/mydb?sslmode=require
# Connection with certificate verification
postgresql://myuser:mypassword@myserver.postgres.database.azure.com/mydb?sslmode=verify-full&sslrootcert=/etc/ssl/certs/ca-certificates.crt
# Connection through PgBouncer (note port 6432)
postgresql://myuser:mypassword@myserver.postgres.database.azure.com:6432/mydb?sslmode=require