Share via


Een toepassing migreren om wachtwoordloze verbindingen te gebruiken met Azure Database for PostgreSQL

In dit artikel wordt uitgelegd hoe u migreert van traditionele verificatiemethoden naar veiligere, wachtwoordloze verbindingen met Azure Database for PostgreSQL.

Toepassingsaanvragen voor Azure Database for PostgreSQL moeten worden geverifieerd. Azure Database for PostgreSQL biedt verschillende manieren waarop apps veilig verbinding kunnen maken. Een van de manieren is om wachtwoorden te gebruiken. U moet echter waar mogelijk prioriteit geven aan verbindingen zonder wachtwoord in uw toepassingen.

Verificatieopties vergelijken

Wanneer de toepassing wordt geverifieerd met Azure Database for PostgreSQL, biedt deze een combinatie van gebruikersnaam en wachtwoord om verbinding te maken met de database. Afhankelijk van waar de identiteiten worden opgeslagen, zijn er twee typen verificatie: Microsoft Entra-verificatie en PostgreSQL-verificatie.

Microsoft Entra-verificatie

Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for PostgreSQL met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.

Het gebruik van Microsoft Entra ID voor verificatie biedt de volgende voordelen:

  • Verificatie van gebruikers in Azure Services op een uniforme manier.
  • Beheer van wachtwoordbeleid en wachtwoordrotatie op één plaats.
  • Meerdere vormen van verificatie die worden ondersteund door Microsoft Entra ID, waardoor wachtwoorden niet meer hoeven op te slaan.
  • Klanten kunnen databasemachtigingen beheren met behulp van externe (Microsoft Entra ID)-groepen.
  • Microsoft Entra-verificatie maakt gebruik van PostgreSQL-databasegebruikers om identiteiten op databaseniveau te verifiëren.
  • Ondersteuning van verificatie op basis van tokens voor toepassingen die verbinding maken met Azure Database for PostgreSQL.

PostgreSQL-verificatie

U kunt accounts maken in PostgreSQL. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de user tabel. Omdat deze wachtwoorden zijn opgeslagen in PostgreSQL, moet u de rotatie van de wachtwoorden zelf beheren.

Hoewel het mogelijk is om verbinding te maken met Azure Database for PostgreSQL met wachtwoorden, moet u ze voorzichtig gebruiken. U moet ijverig zijn om de wachtwoorden nooit zichtbaar te maken op een onbeveiligde locatie. Iedereen die toegang krijgt tot de wachtwoorden, kan worden geverifieerd. Er bestaat bijvoorbeeld een risico dat een kwaadwillende gebruiker toegang heeft tot de toepassing als een verbindingsreeks per ongeluk wordt ingecheckt bij broncodebeheer, wordt verzonden via een onbeveiligde e-mail, geplakt in de verkeerde chat of wordt bekeken door iemand die niet gemachtigd mag zijn. In plaats daarvan kunt u overwegen uw toepassing bij te werken voor het gebruik van verbindingen zonder wachtwoord.

Introductie van verbindingen zonder wachtwoord

Met een verbinding zonder wachtwoord kunt u verbinding maken met Azure-services zonder referenties op te slaan in de toepassingscode, de configuratiebestanden of in omgevingsvariabelen.

Veel Azure-services ondersteunen verbindingen zonder wachtwoord, bijvoorbeeld via Azure Managed Identity. Deze technieken bieden robuuste beveiligingsfuncties die u kunt implementeren met behulp van DefaultAzureCredential vanuit de Azure Identity-clientbibliotheken. In deze zelfstudie leert u hoe u een bestaande toepassing bijwerkt voor gebruik DefaultAzureCredential in plaats van alternatieven zoals verbindingsreeks s.

DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt automatisch welke tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokale ontwikkelomgeving versus productie) zonder omgevingsspecifieke code te implementeren.

De volgorde en locaties waarin DefaultAzureCredential wordt gezocht naar referenties, vindt u in het overzicht van de Azure Identity-bibliotheek. Wanneer u bijvoorbeeld lokaal werkt, DefaultAzureCredential wordt doorgaans geverifieerd met het account dat de ontwikkelaar heeft gebruikt om zich aan te melden bij Visual Studio. Wanneer de app wordt geïmplementeerd in Azure, DefaultAzureCredential wordt automatisch overgeschakeld naar het gebruik van een beheerde identiteit. Er zijn geen codewijzigingen vereist voor deze overgang.

Om ervoor te zorgen dat verbindingen zonder wachtwoord zijn, moet u rekening houden met zowel lokale ontwikkeling als de productieomgeving. Als een verbindingsreeks op beide plaatsen is vereist, is de toepassing niet wachtwoordloos.

In uw lokale ontwikkelomgeving kunt u zich verifiëren met Azure CLI, Azure PowerShell, Visual Studio of Azure-invoegtoepassingen voor Visual Studio Code of IntelliJ. In dit geval kunt u deze referentie in uw toepassing gebruiken in plaats van eigenschappen te configureren.

Wanneer u toepassingen implementeert in een Azure-hostingomgeving, zoals een virtuele machine, kunt u beheerde identiteit in die omgeving toewijzen. Vervolgens hoeft u geen referenties op te geven om verbinding te maken met Azure-services.

Notitie

Een beheerde identiteit biedt een beveiligingsidentiteit die een app of service vertegenwoordigt. De identiteit wordt beheerd door het Azure-platform en u hoeft geen geheimen in te richten of te draaien. Meer informatie over beheerde identiteiten vindt u in de overzichtsdocumentatie .

Een bestaande toepassing migreren om verbindingen zonder wachtwoord te gebruiken

In de volgende stappen wordt uitgelegd hoe u een bestaande toepassing migreert om verbindingen zonder wachtwoord te gebruiken in plaats van een oplossing op basis van een wachtwoord.

0) De werkomgeving voorbereiden

Gebruik eerst de volgende opdracht om enkele omgevingsvariabelen in te stellen.

export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)

Vervang de tijdelijke aanduidingen door de volgende waarden, die overal in dit artikel worden gebruikt:

  • <YOUR_RESOURCE_GROUP>: De naam van de resourcegroep waarin uw resources zich bevinden.
  • <YOUR_DATABASE_SERVER_NAME>: De naam van uw PostgreSQL-server. Deze moet uniek zijn binnen Azure.
  • <YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: De weergavenaam van de niet-beheerdersgebruiker van Microsoft Entra. Zorg ervoor dat de naam een geldige gebruiker is in uw Microsoft Entra-tenant.
  • <YOUR_LOCAL_IP_ADDRESS>: Het IP-adres van uw lokale computer, van waaruit u uw Spring Boot-toepassing uitvoert. Een handige manier om het te vinden is door whatismyip.akamai.com te openen.

1) Azure Database for PostgreSQL configureren

1.1) Verificatie op basis van Microsoft Entra-id inschakelen

Als u Microsoft Entra ID-toegang wilt gebruiken met Azure Database for PostgreSQL, moet u eerst de Microsoft Entra-beheerder instellen. Alleen een Microsoft Entra-Beheer gebruiker kan gebruikers maken/inschakelen voor verificatie op basis van Microsoft Entra ID.

Als u een Microsoft Entra-beheerder wilt instellen nadat u de server hebt gemaakt, volgt u de stappen in Microsoft Entra-rollen beheren in Azure Database for PostgreSQL - Flexible Server.

Notitie

PostgreSQL Flexible Server kan meerdere Microsoft Entra-beheerders maken.

2) Azure Database for PostgreSQL configureren voor lokale ontwikkeling

2.1) Een firewallregel configureren voor lokaal IP-adres

Azure Database for PostgreSQL-instanties worden standaard beveiligd. Ze hebben een firewall die geen enkele binnenkomende verbinding toestaat. Om uw database te kunnen gebruiken, moet u een firewallregel toevoegen waarmee het lokale IP-adres toegang krijgt tot de databaseserver.

Aangezien u aan het begin van dit artikel een lokaal IP-adres hebt geconfigureerd, kunt u de firewall van de server openen door de volgende opdracht uit te voeren:

az postgres flexible-server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME \
    --rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_LOCAL_IP_ADDRESS \
    --end-ip-address $AZ_LOCAL_IP_ADDRESS \
    --output tsv

Als u verbinding maakt met uw PostgreSQL-server vanaf Windows-subsysteem voor Linux (WSL) op een Windows-computer, moet u de WSL-host-id toevoegen aan uw firewall.

Haal het IP-adres van uw hostcomputer op door de volgende opdracht uit te voeren in WSL:

cat /etc/resolv.conf

Kopieer het IP-adres na de term nameserveren gebruik vervolgens de volgende opdracht om een omgevingsvariabele in te stellen voor het WSL IP-adres:

export AZ_WSL_IP_ADDRESS=<the-copied-IP-address>

Gebruik vervolgens de volgende opdracht om de firewall van de server te openen naar uw WSL-app:

az postgres flexible-server firewall-rule create \
    --resource-group $AZ_RESOURCE_GROUP \
    --name $AZ_DATABASE_SERVER_NAME \
    --rule-name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip \
    --start-ip-address $AZ_WSL_IP_ADDRESS \
    --end-ip-address $AZ_WSL_IP_ADDRESS \
    --output tsv

2.2) Maak een niet-beheerder van PostgreSQL en ververleent machtigingen

Maak vervolgens een microsoft Entra-gebruiker die geen beheerder is en verdeel alle machtigingen voor de $AZ_DATABASE_NAME database. U kunt de databasenaam $AZ_DATABASE_NAME aanpassen aan uw behoeften.

Maak een SQL-script met de naam create_ad_user_local.sql voor het maken van een niet-beheerdersgebruiker. Voeg de volgende inhoud toe en sla deze lokaal op:

cat << EOF > create_ad_user_local.sql
select * from pgaadauth_create_principal('$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME', false, false);
EOF

Gebruik vervolgens de volgende opdracht om het SQL-script uit te voeren om de niet-beheerdersgebruiker van Microsoft Entra te maken:

psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_local.sql

Gebruik nu de volgende opdracht om het tijdelijke SQL-scriptbestand te verwijderen:

rm create_ad_user_local.sql

Notitie

Meer gedetailleerde informatie over het maken van PostgreSQL-gebruikers vindt u in Create users in Azure Database for PostgreSQL.

3) Meld u aan en migreer de app-code om wachtwoordloze verbindingen te gebruiken

Zorg ervoor dat u voor lokale ontwikkeling bent geverifieerd met hetzelfde Microsoft Entra-account waaraan u de rol hebt toegewezen in uw PostgreSQL. U kunt zich verifiëren via de Azure CLI, Visual Studio, Azure PowerShell of andere hulpprogramma's, zoals IntelliJ.

Meld u aan bij Azure via de Azure CLI met behulp van de volgende opdracht:

az login

Gebruik vervolgens de volgende stappen om uw code bij te werken voor het gebruik van verbindingen zonder wachtwoord. Hoewel conceptueel vergelijkbaar, gebruikt elke taal verschillende implementatiedetails.

  1. Voeg in uw project de volgende verwijzing toe aan het azure-identity-extensions pakket. Deze bibliotheek bevat alle entiteiten die nodig zijn voor het implementeren van verbindingen zonder wachtwoord.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-extensions</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. Schakel de Azure PostgreSQL-verificatieinvoegtoepassing in in de JDBC-URL. Identificeer de locaties in uw code die momenteel een java.sql.Connection verbinding maken met Azure Database for PostgreSQL. Werk url het bestand application.properties bij en user komt overeen met de volgende waarden:

    url=jdbc:postgresql://$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com:5432/$AZ_DATABASE_NAME?sslmode=require&authenticationPluginClassName=com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin
    user=$AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME
    
  3. Vervang de $AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME en de twee $AZ_DATABASE_SERVER_NAME variabelen door de waarde die u aan het begin van dit artikel hebt geconfigureerd.

De app lokaal uitvoeren

Nadat u deze codewijzigingen hebt aangebracht, voert u uw toepassing lokaal uit. De nieuwe configuratie moet uw lokale referenties ophalen als u bent aangemeld bij een compatibel IDE- of opdrachtregelprogramma, zoals de Azure CLI, Visual Studio of IntelliJ. Met de rollen die u hebt toegewezen aan uw lokale dev-gebruiker in Azure, kan uw app lokaal verbinding maken met de Azure-service.

4) De Azure-hostingomgeving configureren

Nadat uw toepassing is geconfigureerd voor het gebruik van verbindingen zonder wachtwoord en deze lokaal wordt uitgevoerd, kan dezelfde code worden geverifieerd bij Azure-services nadat deze is geïmplementeerd in Azure. Een toepassing die is geïmplementeerd in een Azure-app Service-exemplaar waaraan een beheerde identiteit is toegewezen, kan bijvoorbeeld verbinding maken met Azure Storage.

In deze sectie voert u twee stappen uit om ervoor te zorgen dat uw toepassing op een wachtwoordloze manier kan worden uitgevoerd in een Azure-hostingomgeving:

  • Wijs de beheerde identiteit toe voor uw Azure-hostingomgeving.
  • Wijs rollen toe aan de beheerde identiteit.

Notitie

Azure biedt ook Service Verbinding maken or, waarmee u uw hostingservice kunt verbinden met PostgreSQL. Met Service Verbinding maken or voor het configureren van uw hostingomgeving kunt u de stap voor het toewijzen van rollen aan uw beheerde identiteit weglaten, omdat Service Verbinding maken or dit voor u doet. In de volgende sectie wordt beschreven hoe u uw Azure-hostingomgeving op twee manieren configureert: één via Service Verbinding maken or en de andere door elke hostingomgeving rechtstreeks te configureren.

Belangrijk

Voor opdrachten van de service Verbinding maken or is Azure CLI 2.41.0 of hoger vereist.

De beheerde identiteit toewijzen met behulp van Azure Portal

De volgende stappen laten zien hoe u een door het systeem toegewezen beheerde identiteit toewijst voor verschillende webhostingservices. De beheerde identiteit kan veilig verbinding maken met andere Azure-services met behulp van de app-configuraties die u eerder hebt ingesteld.

  1. Selecteer Identiteit in het navigatiedeelvenster op de hoofdpagina van uw Azure-app Service-exemplaar.

  2. Zorg ervoor dat u op het tabblad Systeem toegewezen het veld Status instelt op Aan. Een door het systeem toegewezen identiteit wordt intern beheerd door Azure en verwerkt beheertaken voor u. De details en id's van de identiteit worden nooit weergegeven in uw code.

    Screenshot of Azure portal Identity page of App Service resource with System assigned tab showing and Status field highlighted.

U kunt ook beheerde identiteit toewijzen in een Azure-hostingomgeving met behulp van de Azure CLI.

U kunt een beheerde identiteit toewijzen aan een Azure-app Service-exemplaar met de opdracht az webapp identity assign, zoals wordt weergegeven in het volgende voorbeeld:

export AZ_MI_OBJECT_ID=$(az webapp identity assign \
    --resource-group $AZ_RESOURCE_GROUP \
    --name <service-instance-name> \
    --query principalId \
    --output tsv)

Rollen toewijzen aan de beheerde identiteit

Verwijs vervolgens machtigingen aan de beheerde identiteit die u hebt toegewezen voor toegang tot uw PostgreSQL-exemplaar.

Als u uw services hebt verbonden met service Verbinding maken or, hebben de opdrachten van de vorige stap de rol al toegewezen, zodat u deze stap kunt overslaan.

De app testen

Voordat u de app implementeert in de hostingomgeving, moet u nog een wijziging aanbrengen in de code omdat de toepassing verbinding gaat maken met PostgreSQL met behulp van de gebruiker die is gemaakt voor de beheerde identiteit.

Werk uw code bij om de gebruiker te gebruiken die is gemaakt voor de beheerde identiteit:

Notitie

Als u de opdracht Service Verbinding maken or hebt gebruikt, kunt u deze stap overslaan.

properties.put("user", "$AZ_POSTGRESQL_AD_MI_USERNAME");

Nadat u deze codewijzigingen hebt aangebracht, kunt u de toepassing bouwen en opnieuw implementeren. Blader vervolgens naar uw gehoste toepassing in de browser. Uw app moet verbinding kunnen maken met de PostgreSQL-database. Houd er rekening mee dat het enkele minuten kan duren voordat de roltoewijzingen zijn doorgegeven via uw Azure-omgeving. Uw toepassing is nu geconfigureerd om zowel lokaal als in een productieomgeving uit te voeren zonder dat de ontwikkelaars geheimen in de toepassing zelf hoeven te beheren.

Volgende stappen

In deze zelfstudie hebt u geleerd hoe u een toepassing migreert naar verbindingen zonder wachtwoord.

U kunt de volgende bronnen lezen om de concepten die in dit artikel worden besproken, uitgebreider te verkennen: