Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u migreert van traditionele verificatiemethoden naar veiligere, wachtwoordloze verbindingen met Azure Database for MySQL.
Toepassingsaanvragen voor Azure Database for MySQL moeten worden geverifieerd. Azure Database for MySQL 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 MySQL, biedt deze een gebruikersnaam en wachtwoordpaar om verbinding te maken met de database. Afhankelijk van waar de identiteiten worden opgeslagen, zijn er twee typen verificatie: Microsoft Entra-verificatie en MySQL-verificatie.
Microsoft Entra-authenticatie
Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for MySQL met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met behulp van Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, wat het beheer van machtigingen vereenvoudigt.
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 MySQL-databasegebruikers om identiteiten op databaseniveau te verifiëren.
- Ondersteuning van verificatie op basis van tokens voor toepassingen die verbinding maken met Azure Database for MySQL.
MySQL-verificatie
U kunt accounts maken in MySQL. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de user tabel. Omdat Deze wachtwoorden worden opgeslagen in MySQL, moet u de rotatie van de wachtwoorden zelf beheren.
Hoewel u verbinding kunt maken met Azure Database for MySQL met behulp van wachtwoorden, moet u ze voorzichtig gebruiken. Wees ijverig om de wachtwoorden nooit zichtbaar te maken op een onveilige locatie. Iedereen die toegang krijgt tot de wachtwoorden, kan worden geverifieerd. Een kwaadwillende gebruiker heeft bijvoorbeeld toegang tot de toepassing als u per ongeluk een verbindingsreeks incheckt voor broncodebeheer, het verzendt via een onveilig e-mailbericht, plakt u deze in de verkeerde chat of als iemand zonder toestemming deze bekijkt. 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 verbindingsreeksen.
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 vereist is, 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.
Opmerking
Een beheerde identiteit biedt een beveiligingsidentiteit die een app of service vertegenwoordigt. De identiteit wordt beheerd door het Azure-platform en vereist niet dat u geheimen inricht of roteert. 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_MYSQL_AD_NON_ADMIN_USERNAME=<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>
export AZ_MYSQL_AD_MI_USERNAME=<YOUR_AZURE_AD_MI_DISPLAY_NAME>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)
Vervang de tijdelijke aanduidingen door de volgende waarden, die in dit artikel worden gebruikt:
-
<YOUR_RESOURCE_GROUP>: De naam van de resourcegroep voor uw bronnen. -
<YOUR_DATABASE_SERVER_NAME>: De naam van uw MySQL-server, die uniek moet zijn in Azure. -
<YOUR_AZURE_AD_NON_ADMIN_USER_DISPLAY_NAME>: De weergavenaam van uw Microsoft Entra-gebruiker zonder beheerdersrechten. Zorg ervoor dat de naam een geldige gebruiker is in uw Microsoft Entra tenant. -
<YOUR_AZURE_AD_MI_DISPLAY_NAME>: De weergavenaam van Microsoft Entra-gebruiker voor uw beheerde identiteit. Zorg ervoor dat de naam een geldige gebruiker is in uw Microsoft Entra tenant. -
<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: De naam van uw door de gebruiker toegewezen beheerde identiteitsserver, die uniek moet zijn in Azure.
1) Azure Database for MySQL configureren
1.1) Verificatie op basis van Microsoft Entra-id inschakelen
Als u Microsoft Entra ID toegang wilt gebruiken met Azure Database for MySQL, stelt u eerst de gebruiker van de Microsoft Entra-beheerder in. Alleen een Microsoft Entra-beheerder kan gebruikers maken of inschakelen voor verificatie op basis van Microsoft Entra ID.
Als u Azure CLI gebruikt, voert u de volgende opdracht uit om ervoor te zorgen dat deze over voldoende machtigingen beschikt:
az login --scope https://graph.microsoft.com/.default
Voer de volgende opdracht uit om een gebruikersidentiteit te maken voor het toewijzen:
az identity create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_USER_IDENTITY_NAME
Belangrijk
Nadat u de door de gebruiker toegewezen identiteit hebt gemaakt, vraagt u de globale beheerder of bevoorrechte rolbeheerder om de volgende machtigingen voor deze identiteit te verlenen: User.Read.All, GroupMember.Read.Allen Application.Read.ALL. Zie de sectie Machtigingen van Active Directory-verificatie voor meer informatie.
Voer de volgende opdracht uit om de identiteit toe te wijzen aan de MySQL-server voor het maken van de Microsoft Entra-beheerder:
az mysql flexible-server identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--server-name $AZ_DATABASE_SERVER_NAME \
--identity $AZ_USER_IDENTITY_NAME
Voer vervolgens de volgende opdracht uit om de Microsoft Entra-beheerder in te stellen:
az mysql flexible-server ad-admin create \
--resource-group $AZ_RESOURCE_GROUP \
--server-name $AZ_DATABASE_SERVER_NAME \
--display-name $CURRENT_USERNAME \
--object-id $CURRENT_USER_OBJECTID \
--identity $AZ_USER_IDENTITY_NAME
Met deze opdracht stelt u de Microsoft Entra-beheerder in op de huidige aangemelde gebruiker.
Opmerking
U kunt slechts één Microsoft Entra-beheerder per MySQL-server maken. Als u een andere beheerder selecteert, wordt de bestaande Microsoft Entra-beheerder die voor de server is geconfigureerd, overschreven.
2) Azure Database for MySQL configureren voor lokale ontwikkeling
2.1) Een firewallregel configureren voor lokaal IP-adres
Azure Database for MySQL-exemplaren worden standaard beveiligd. Ze hebben een firewall die geen binnenkomende verbinding toestaat.
U kunt deze stap overslaan als u Bash gebruikt, omdat met de flexible-server create opdracht al uw lokale IP-adres is gedetecteerd en dit is ingesteld op de MySQL-server.
Als u verbinding maakt met uw MySQL-server vanuit het 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 mysql server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_SERVER_NAME-database-allow-local-ip-wsl \
--server $AZ_DATABASE_SERVER_NAME \
--start-ip-address $AZ_WSL_IP_ADDRESS \
--end-ip-address $AZ_WSL_IP_ADDRESS \
--output tsv
2.2) Maak een MySQL-niet-beheerdersgebruiker aan en verleen rechten
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.sql voor het maken van een niet-beheerdersgebruiker. Voeg de volgende inhoud toe en sla deze lokaal op:
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_NON_ADMIN_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_NON_ADMIN_USERNAME'@'%';
FLUSH privileges;
EOF
Gebruik vervolgens de volgende opdracht om het SQL-script uit te voeren en de Microsoft Entra niet-beheerdersgebruiker te maken:
mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Gebruik nu de volgende opdracht om het tijdelijke SQL-scriptbestand te verwijderen:
rm create_ad_user.sql
Opmerking
Zie Gebruikers maken in Azure Database for MySQL voor meer informatie over het maken van MySQL-gebruikers.
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 MySQL. Verifieer 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.
Voeg in uw project de volgende verwijzing toe aan het
azure-identity-extensionspakket. 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>Schakel de Azure MySQL-verificatieinvoegtoepassing in de JDBC-URL in. Identificeer de locaties in uw code die momenteel een
java.sql.Connectionverbinding maken met Azure Database for MySQL. Werkurlenuserin uw bestand application.properties bij zodat deze overeenkomen met de volgende waarden:url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin user=$AZ_MYSQL_AD_NON_ADMIN_USERNAMEOpmerking
Als u de klasse
MysqlConnectionPoolDataSourceals gegevensbron in uw toepassing gebruikt, laatdefaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugindan uit de URL weg.url=jdbc:mysql://$AZ_DATABASE_SERVER_NAME.mysql.database.azure.com:3306/$AZ_DATABASE_NAME?serverTimezone=UTC&sslMode=REQUIRED&authenticationPlugins=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin user=$AZ_MYSQL_AD_NON_ADMIN_USERNAMEVervang de
$AZ_DATABASE_SERVER_NAME,$AZ_DATABASE_NAMEen$AZ_MYSQL_AD_NON_ADMIN_USERNAMEvariabelen door de waarden die u aan het begin van dit artikel hebt geconfigureerd.Verwijder de
passworduit de JDBC-URL.
De app lokaal uitvoeren
Nadat u deze codewijzigingen hebt aangebracht, voert u uw toepassing lokaal uit. De nieuwe configuratie haalt uw lokale referenties op als u bent aangemeld bij een compatibel IDE- of opdrachtregelprogramma, zoals de Azure CLI, Visual Studio of IntelliJ. De rollen die u hebt toegewezen aan uw lokale dev-gebruiker in Azure toestaan dat uw app lokaal verbinding kan maken met de Azure-service.
4) De Azure-hostingomgeving configureren
Nadat u uw toepassing hebt geconfigureerd voor het gebruik van verbindingen zonder wachtwoord en deze lokaal hebt uitgevoerd, kan dezelfde code worden geverifieerd bij Azure services nadat u deze hebt 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 uw toepassing op een manier zonder wachtwoord uit te voeren in een Azure hostingomgeving:
- Wijs de beheerde identiteit toe voor uw Azure-hostingomgeving.
- Wijs rollen toe aan de beheerde identiteit.
Opmerking
Azure biedt ook serviceconnector, waarmee u uw hostingservice kunt verbinden met PostgreSQL. Door serviceconnector te gebruiken om uw hostingomgeving te configureren, kunt u de stap voor het toewijzen van rollen aan uw beheerde identiteit weglaten, omdat Service Connector deze voor u toewijst. In de volgende sectie wordt beschreven hoe u uw Azure-hostingomgeving op twee manieren configureert: één via serviceconnector en de andere door elke hostingomgeving rechtstreeks te configureren.
Belangrijk
Voor de opdrachten van serviceconnector 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.
Selecteer Identiteit in het navigatiedeelvenster op de hoofdpagina van uw Azure App Service-exemplaar.
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.
U kunt ook een beheerde identiteit toewijzen aan 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
Wijs vervolgens machtigingen toe aan de beheerde identiteit die u hebt toegewezen voor toegang tot uw MySQL-exemplaar.
Met deze stappen maakt u een Microsoft Entra gebruiker voor de beheerde identiteit en verleent u alle machtigingen voor de database$AZ_DATABASE_NAME. U kunt de databasenaam $AZ_DATABASE_NAME aanpassen aan uw behoeften.
Maak eerst een SQL-script met de naam create_ad_user.sql voor het maken van een niet-beheerdersgebruiker. Voeg de volgende inhoud toe en sla deze lokaal op:
export AZ_MYSQL_AD_MI_USERID=$(az ad sp show --id $AZ_MI_OBJECT_ID --query appId --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_MI_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_MI_USERID';
GRANT ALL PRIVILEGES ON $AZ_DATABASE_NAME.* TO '$AZ_MYSQL_AD_MI_USERNAME'@'%';
FLUSH privileges;
EOF
Gebruik vervolgens de volgende opdracht om het SQL-script uit te voeren en de Microsoft Entra niet-beheerdersgebruiker te maken:
mysql -h $AZ_DATABASE_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql
Gebruik nu de volgende opdracht om het tijdelijke SQL-scriptbestand te verwijderen:
rm create_ad_user.sql
De app testen
Voordat u de app implementeert in de hostingomgeving, moet u nog een wijziging aanbrengen in de code omdat de toepassing verbinding maakt met MySQL met behulp van de gebruiker die u voor de beheerde identiteit hebt gemaakt.
Werk uw code bij om de gebruiker te gebruiken die is gemaakt voor de beheerde identiteit:
properties.put("user", "$AZ_MYSQL_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 MySQL-database. Het kan enkele minuten 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.
Zie de volgende bronnen voor meer informatie over de concepten die in dit artikel worden besproken: