Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Key Vault bietet eine Möglichkeit zum Speichern von Anmeldeinformationen und anderen geheimen Schlüsseln mit erhöhter Sicherheit. Ihr Code muss sich jedoch bei Key Vault authentifizieren, um sie abzurufen. Verwaltete Identitäten für Azure-Ressourcen lösen dieses Problem, indem sie Azure-Diensten in Microsoft Entra ID eine automatisch verwaltete Identität zuweisen. Ihr Code verwendet diese Identität, um sich bei jedem Dienst zu authentifizieren, der Microsoft Entra Authentifizierung unterstützt, einschließlich Key Vault, ohne Anmeldeinformationen in den Code einzubetten.
In diesem Lernprogramm erstellen und bereitstellen Sie eine Azure Webanwendung für Azure App Service und verwenden dann eine verwaltete Identität, um die App bei einem Schlüsseltresor zu authentifizieren, indem Sie die Azure Key Vault geheime Clientbibliothek für .NET und die Azure CLI verwenden. Dieselben Prinzipien gelten, wenn Sie eine andere Sprache, Azure PowerShell oder das Azure Portal verwenden.
Weitere Informationen zu App Service-Web-Apps und -Bereitstellung finden Sie unter:
- App Service: Übersicht
- Create an ASP.NET Core Web App in Azure App Service
- Bereitstellen von Dateien in App Service
Voraussetzungen
Um dieses Lernprogramm abzuschließen, benötigen Sie Folgendes:
- Ein Azure-Abonnement. Erstellen Sie ein kostenloses Abonnement.
- Das .NET 8.0 SDK oder höher.
- Die Azure CLI oder Azure PowerShell.
- Azure Key Vault. Sie können einen Schlüsseltresor mithilfe des Azure Portals, des Azure CLI oder Azure PowerShell erstellen.
- Ein Key Vault Geheimnis. Sie können einen geheimen Schlüssel mithilfe des Azure-Portals, PowerShell oder des Azure CLI erstellen.
Wenn Sie bereits eine Web-App in Azure App Service bereitgestellt haben, fahren Sie mit der Konfiguration der Web-App fort, um eine Verbindung mit Key Vault herzustellen, und ändern Sie die App, um auf Ihre key vault zuzugreifen.
Erstellen einer .NET Core-App
Richten Sie in diesem Schritt das lokale .NET Projekt ein.
Erstellen Sie in einem Terminalfenster ein Verzeichnis mit dem Namen akvwebapp , und wechseln Sie zu diesem:
mkdir akvwebapp
cd akvwebapp
Erstellen Sie eine .NET Web-App mithilfe des neuen Webbefehls dotnet:
dotnet new web
Führen Sie die App lokal aus, um zu sehen, wie sie aussieht, bevor Sie sie für Azure bereitstellen:
dotnet run
Öffnen Sie in einem Webbrowser die App unter http://localhost:5000. In der Beispiel-App wird die Meldung "Hallo Welt!" angezeigt.
Weitere Informationen zum Erstellen von Web-Apps finden Sie unter Erstellen einer ASP.NET Core Web-App in Azure App Service.
Bereitstellen der App für Azure
Stellen Sie in diesem Schritt die .NET-App mithilfe der ZIP-Bereitstellung auf Azure App Service bereit. Die ZIP-Bereitstellung ist der empfohlene paketbasierte Bereitstellungsmechanismus für App Service. Verwenden Sie stattdessen GitHub Actions oder Azure DevOps Pipelines, um eine kontinuierliche Übermittlung aus der Quellcodeverwaltung zu erhalten.
Erstellen einer Ressourcengruppe
Erstellen Sie eine Ressourcengruppe, die den Schlüsseltresor und die Web-App enthält, indem Sie az group create verwenden:
az group create --name "<resource-group>" --location "EastUS"
Einen App Service-Plan erstellen
Erstellen Sie einen App Service-Plan mithilfe des az appservice-Plans erstellen. Im folgenden Beispiel wird ein Plan mit dem Namen myAppServicePlan im kostenlosen Tarif (FREE) erstellt:
az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE
Erstellen einer Web-App
Erstellen Sie eine Azure Web-App im myAppServicePlan Plan.
Wichtig
Wie ein Schlüsseltresor muss eine Azure Web-App einen global eindeutigen Namen haben. Ersetzen Sie <webapp-name> durch den Namen Ihrer Web-App.
az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>"
Gehen Sie zur neuen App, um zu überprüfen, ob sie läuft:
https://<webapp-name>.azurewebsites.net
Die Standardseite für eine neue Azure Web App wird angezeigt.
Stellen Sie Ihre lokale App mit Zip-Bereitstellung bereit
Erstellen Sie aus dem akvwebapp Projektverzeichnis das Projekt, und erstellen Sie eine Zip-Datei für die Bereitstellung:
dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
Tip
Unter Windows ohne zip verwenden Sie PowerShell: Compress-Archive -Path .\publish\* -DestinationPath .\akvwebapp.zip.
Bereitstellen der ZIP-Datei in Ihrer Web-App mithilfe von az webapp deploy:
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip
Aktualisieren Sie die bereitgestellte App in Ihrem Webbrowser:
https://<webapp-name>.azurewebsites.net
Sie sehen dieselbe „Hallo Welt!“-Nachricht, die Sie unter http://localhost:5000 gesehen haben.
Konfigurieren der Web-App für die Verbindung mit Key Vault
In diesem Abschnitt aktivieren Sie die Web-App für den Zugriff auf Key Vault und aktualisieren Ihren App-Code, um einen geheimen Schlüssel abzurufen.
Erstellen einer verwalteten Identität und Zuweisen des Zugriffs
Verwenden Sie eine verwaltete Identität, um die Web-App für Key Vault zu authentifizieren. Eine verwaltete Identität entfernt die Notwendigkeit, Anmeldeinformationen im Code zu verwalten.
Erstellen Sie die Identität für die App mithilfe der az webapp Identity Assign:
az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"
Der Befehl gibt einen JSON-Codeausschnitt wie folgt zurück:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Um über die rollenbasierte Zugriffskontrolle (Role-Based Access Control, RBAC) Berechtigungen für Ihren Schlüsseltresor zu erhalten, weisen Sie Ihrem Benutzerprinzipalname (User Principal Name, UPN) mit dem Azure CLI-Befehl az role assignment create eine Rolle zu.
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Ersetzen Sie <upn>, <subscription-id> und <vault-name> durch Ihre tatsächlichen Werte. Wenn Sie einen anderen Ressourcengruppennamen verwendet haben, ersetzen Sie auch "myResourceGroup". Ihr Benutzerprinzipalname (UPN) hat in der Regel das Format einer E-Mail-Adresse (z. B. username@domain.com).
Ändern Sie die App, um Zugriff auf Ihren Schlüsseltresor zu erhalten.
In diesem Lernprogramm wird die Geheime Clientbibliothek von Azure Key Vault verwendet. Sie können auch die Azure Key Vault Zertifikatclientbibliothek oder die Azure Key Vault Schlüsselclientbibliothek verwenden.
Installieren der Pakete
Installieren Sie im Terminalfenster die Azure Key Vault geheimen Clientbibliothek und die Azure Identity-Clientbibliothek:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Aktualisieren des Codes
Öffnen Sie Program.cs in Ihrem akvwebapp-Projekt.
Fügen Sie diese using Direktiven am Anfang der Datei hinzu:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Fügen Sie die folgenden Zeilen vor dem Aufruf app.MapGet hinzu und ersetzen Sie <vault-name> durch den Namen Ihres Schlüsseltresors. Dieser Code verwendet DefaultAzureCredential, um sich über die verwaltete Identität der Web-App bei Key Vault zu authentifizieren. Weitere Informationen finden Sie im Entwicklerhandbuch. Der Code konfiguriert auch ein exponentielles Backoff für Wiederholungsversuche, falls Key Vault gedrosselt wird. Ausführliche Informationen zu Transaktionsbeschränkungen finden Sie unter Azure Key Vault Einschränkungsleitfaden.
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri("https://<vault-name>.vault.azure.net/"), new DefaultAzureCredential(), options);
KeyVaultSecret secret = client.GetSecret("<secret-name>");
string secretValue = secret.Value;
Aktualisieren Sie die Zeile app.MapGet("/", () => "Hallo Welt!"); auf:
app.MapGet("/", () => secretValue);
Speichern Sie die Änderungen.
Erneutes Bereitstellen Ihrer Web-App
Erstellen Sie das Bereitstellungspaket neu und stellen Sie es erneut bereit:
dotnet publish -c Release -o ./publish
cd publish
zip -r ../akvwebapp.zip .
cd ..
az webapp deploy --resource-group "<resource-group>" --name "<webapp-name>" --src-path ./akvwebapp.zip --type zip
Navigieren zur fertigen Web-App
https://<webapp-name>.azurewebsites.net
Wo zuvor „Hallo Welt!“ angezeigt wurde, sehen Sie jetzt den Wert Ihres Secrets.