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 helfen, dieses Problem zu lösen, indem sie Azure-Diensten eine automatisch verwaltete Identität in Microsoft Entra ID bereitstellen. Sie können diese Identität verwenden, um sich bei jedem Dienst zu authentifizieren, der Microsoft Entra Authentifizierung unterstützt, einschließlich Key Vault, ohne anmeldeinformationen im Code anzeigen zu müssen.
In diesem Lernprogramm erstellen und bereitstellen Sie Azure Webanwendung für Azure App Service. Sie verwenden eine verwaltete Identität, um Ihre Azure-Web-App mit einem Azure Key Vault zu authentifizieren, indem Sie die Azure Key Vault Secret Client-Bibliothek für .NET und die Azure CLI verwenden. Die gleichen Grundprinzipien gelten, wenn Sie die Entwicklungssprache Ihrer Wahl, Azure PowerShell und/oder das Azure Portal verwenden.
Weitere Informationen zu Azure-App Dienstwebanwendungen und zur Bereitstellung, die in diesem Lernprogramm vorgestellt werden, finden Sie unter:
- App Service: Übersicht
- Create an ASP.NET Core Web App in Azure App Service
- Lokale Git-Bereitstellung auf Azure 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).
- Installation von Git-Version 2.28.0 oder einer höheren Version
- 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 Ihre Webanwendung bereits in Azure App Service bereitgestellt wurde, können Sie zu Konfigurieren des Webanwendungszugriffs auf einen Key Vault und Ändern des Webanwendungscodes überspringen.
Erstellen einer .NET Core-App
In diesem Schritt richten Sie das lokale .NET Core-Projekt ein.
Erstellen Sie in einem Terminalfenster auf Ihrem Computer ein Verzeichnis mit dem Namen akvwebapp, und wechseln Sie in dieses Verzeichnis:
mkdir akvwebapp
cd akvwebapp
Erstellen Sie eine .NET Core-App mithilfe des Befehls dotnet new web:
dotnet new web
Führen Sie die Anwendung lokal aus, damit Sie wissen, wie sie aussehen sollte, wenn Sie sie für Azure bereitstellen:
dotnet run
Wechseln Sie in einem Webbrowser unter http://localhost:5000 zur App.
Die Meldung "Hallo Welt!" der Beispiel-App wird auf der Seite angezeigt.
Weitere Informationen zum Erstellen von Webanwendungen für Azure finden Sie unter Create an ASP.NET Core Web App in Azure App Service
Bereitstellen der App für Azure
In diesem Schritt stellen Sie Ihre .NET Core-Anwendung mithilfe von lokalem Git auf Azure App Service bereit. Weitere Informationen zum Erstellen und Bereitstellen von Anwendungen finden Sie unter Create an ASP.NET Core Web App in Azure.
Konfigurieren der lokalen Git-Bereitstellung
Drücken Sie im Terminalfenster STRG+C, um den Webserver zu schließen. Initialisieren Sie ein Git-Repository für das .NET Core-Projekt:
git init --initial-branch=main
git add .
git commit -m "first commit"
Sie können FTP und lokale Git verwenden, um eine Azure Web-App mithilfe eines Deployment-Benutzers bereitzustellen. Nachdem Sie ihren Bereitstellungsbenutzer konfiguriert haben, können Sie ihn für alle Ihre Azure Bereitstellungen verwenden. Der Benutzername und das Kennwort für die Bereitstellung auf Kontoebene unterscheiden sich von Ihren Azure Abonnementanmeldeinformationen.
Führen Sie zum Konfigurieren des Bereitstellungsbenutzers den Befehl az webapp deployment user set aus. Wählen Sie einen Benutzernamen und das zugehörige Kennwort gemäß den folgenden Richtlinien aus:
- Der Benutzername muss innerhalb Azure eindeutig sein. Bei lokalen Git-Pushvorgängen darf er kein at-Zeichen (@) enthalten.
- Das Kennwort muss mindestens acht Zeichen lang sein und zwei der folgenden drei Elemente enthalten: Buchstaben, Zahlen und Symbole.
az webapp deployment user set --user-name "<username>" --password "<password>"
In der JSON-Ausgabe wird das Kennwort als null angezeigt. Wenn Sie den Fehler 'Conflict'. Details: 409 erhalten, müssen Sie den Benutzernamen ändern. Wenn Sie den Fehler 'Bad Request'. Details: 400 erhalten, müssen Sie ein sichereres Kennwort verwenden.
Notieren Sie Ihren Benutzernamen und das Kennwort, damit Sie sie für die Bereitstellung Ihrer Web-Apps verwenden können.
Erstellen einer Ressourcengruppe
Eine Ressourcengruppe ist ein logischer Container, in dem Sie Azure Ressourcen bereitstellen und verwalten. Verwenden Sie den Befehl az group create für die Erstellung einer Ressourcengruppe, die sowohl Ihren Schlüsseltresor als auch Ihre Web-App enthält:
az group create --name "<resource-group>" -l "EastUS"
Einen App Service-Plan erstellen
Erstellen Sie einen App Service-Plan mithilfe des Befehls Azure CLI az appservice plan create. Im folgenden Beispiel wird ein App Service-Plan namens myAppServicePlan im Tarif FREE erstellt:
az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE
Wenn der App Service-Plan erstellt wird, werden im Azure CLI Informationen ähnlich wie hier angezeigt:
{
"adminSiteName": null,
"appServicePlanName": "myAppServicePlan",
"geoRegion": "West Europe",
"hostingEnvironmentProfile": null,
"id": "/subscriptions/0000-0000/resourceGroups/<resource-group>/providers/Microsoft.Web/serverfarms/myAppServicePlan",
"kind": "app",
"location": "West Europe",
"maximumNumberOfWorkers": 1,
"name": "myAppServicePlan",
< JSON data removed for brevity. >
"targetWorkerSizeId": 0,
"type": "Microsoft.Web/serverfarms",
"workerTierName": null
}
Weitere Informationen finden Sie unter Manage an App Service plan in Azure.
Erstellen einer Web-App
Erstellen Sie eine Azure Web App im myAppServicePlan App Service-Plan.
Wichtig
Wie ein Schlüsseltresor muss eine Azure Web-App einen eindeutigen Namen haben. Ersetzen Sie in den folgenden Beispielen <webapp-name> durch den Namen Ihrer Web-App.
az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>" --deployment-local-git
Wenn die Web-App erstellt wird, zeigt die Azure CLI die Ausgabe ähnlich wie hier gezeigt an:
Local git is configured with url of 'https://<username>@<your-webapp-name>.scm.azurewebsites.net/<ayour-webapp-name>.git'
{
"availabilityState": "Normal",
"clientAffinityEnabled": true,
"clientCertEnabled": false,
"clientCertExclusionPaths": null,
"cloningInfo": null,
"containerSize": 0,
"dailyMemoryTimeQuota": 0,
"defaultHostName": "<your-webapp-name>.azurewebsites.net",
"deploymentLocalGitUrl": "https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git",
"enabled": true,
< JSON data removed for brevity. >
}
Die URL des Git-Remote wird in der deploymentLocalGitUrl-Eigenschaft im Format https://<username>@<webapp-name>.scm.azurewebsites.net/<webapp-name>.git angezeigt. Speichern Sie diese URL. Sie benötigen die Information später.
Konfigurieren Sie nun Ihre Web-App für die Bereitstellung über den main-Branch:
az webapp config appsettings set -g MyResourceGroup --name "<webapp-name>" --settings deployment_branch=main
Navigieren Sie mit dem folgenden Befehl zu Ihrer neuen App. Ersetzen Sie <webapp-name> durch den Namen Ihrer App.
https://<webapp-name>.azurewebsites.net
Die Standardwebseite für eine neue Azure Web-App wird angezeigt.
Bereitstellen Ihrer lokalen App
Fügen Sie im lokalen Terminalfenster Ihrem lokalen Git-Repository eine Azure-Remote hinzu. Ersetzen Sie im folgenden Befehl <deployment-url> durch die URL des Git-Remotespeicherorts, die Sie im Abschnitt Erstellen einer Web-App gespeichert haben.
git remote add azure <deployment-url>
Verwenden Sie den folgenden Befehl, um an das Azure-Remote zu pushen und Ihre App zu deployen. Wenn Sie von Git Credential Manager zur Eingabe von Anmeldeinformationen aufgefordert werden, verwenden Sie die Anmeldeinformationen, die Sie im Abschnitt Konfigurieren der lokalen Git-Bereitstellung erstellt haben.
git push azure main
Die Ausführung dieses Befehls kann einige Minuten dauern. Während der Ausführung werden Informationen der folgenden Art angezeigt:
Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 285 bytes | 95.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Deploy Async remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'd6b54472f7'. remote: Repository path is /home/site/repository remote: Running oryx build... remote: Build orchestrated by Microsoft Oryx, https://github.com/Microsoft/Oryx remote: You can report issues at https://github.com/Microsoft/Oryx/issues remote: remote: Oryx Version : 0.2.20200114.13, Commit: 204922f30f8e8d41f5241b8c218425ef89106d1d, ReleaseTagName: 20200114.13 remote: Build Operation ID: |imoMY2y77/s=.40ca2a87_ remote: Repository Commit : d6b54472f7e8e9fd885ffafaa64522e74cf370e1 . . . remote: Deployment successful. remote: Deployment Logs : 'https://<your-webapp-name>.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/d6b54472f7e8e9fd885ffafaa64522e74cf370e1/log' To https://<your-webapp-name>.scm.azurewebsites.net:443/<your-webapp-name>.git d87e6ca..d6b5447 main -> main
Navigieren Sie in Ihrem Webbrowser zur bereitgestellten Anwendung, oder aktualisieren Sie die Ansicht:
http://<webapp-name>.azurewebsites.net
Sie sehen die Meldung "Hallo Welt!", die Sie zuvor gesehen haben, als Sie http://localhost:5000 besucht haben.
Weitere Informationen zum Bereitstellen von Webanwendungen mit Git finden Sie unter Local Git deployment to Azure App Service
Konfigurieren der Web-App für die Verbindung mit Key Vault
In diesem Abschnitt konfigurieren Sie den Webzugriff auf Key Vault und aktualisieren Ihren Anwendungscode, um einen geheimen Schlüssel aus Key Vault abzurufen.
Erstellen einer verwalteten Identität und Zuweisen des Zugriffs
In diesem Lernprogramm verwenden wir managed Identity zum Authentifizieren bei Key Vault. Mit der verwalteten Identität werden die Anmeldeinformationen der Anwendung automatisch verwaltet.
Führen Sie im Azure CLI zum Erstellen der Identität für die Anwendung den Befehl az webapp-identity assign aus:
az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"
Vom Befehl wird der folgende JSON-Codeausschnitt zurückgegeben:
{
"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 Tutorial verwenden Sie die Azure Key Vault Secret Clientbibliothek zu Demonstrationszwecken. Sie können auch Azure Key Vault Zertifikatclientbibliothek oder Azure Key Vault Schlüsselclientbibliothek verwenden.
Installieren der Pakete
Installieren Sie im Terminalfenster die Azure Key Vault geheime Clientbibliothek für .NET- und Azure Identity-Clientbibliothekspakete:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Aktualisieren des Codes
Suchen und öffnen Sie die Startup.cs Datei für .NET 5.0 oder früher oder Program.cs Datei für .NET 6.0 in Ihrem akvwebapp-Projekt.
Fügen Sie dem Header die folgenden Zeilen hinzu:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Fügen Sie die folgenden Zeilen vor dem app.UseEndpoints-Aufruf (.NET 5.0 oder früher) oder dem app.MapGet-Aufruf (.NET 6.0) ein, und aktualisieren Sie den URI, damit er dem vaultUri Ihres Schlüsseltresors entspricht. Dieser Code verwendet DefaultAzureCredential() zum Authentifizieren bei Key Vault, bei dem ein Token aus verwalteter Identität zum Authentifizieren verwendet wird. Weitere Informationen zur Authentifizierung für Key Vault finden Sie im Handbuch Developer. Darüber hinaus wird im Code das exponentielle Backoff für Wiederholungen verwendet, falls Key Vault gedrosselt wird. Weitere Informationen zu Key Vault Transaktionsgrenzwerten 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;
.NET 5.0 oder früher
Aktualisieren Sie die Zeile await context.Response.WriteAsync("Hallo Welt!"); so, dass sie wie diese Zeile aussieht:
await context.Response.WriteAsync(secretValue);
.NET 6.0
Aktualisieren Sie die Zeile app.MapGet("/", () => "Hallo Welt!"); so, dass sie wie diese Zeile aussieht:
app.MapGet("/", () => secretValue);
Achten Sie darauf, dass Sie Ihre Änderungen speichern, bevor Sie mit dem nächsten Schritt fortfahren.
Erneutes Bereitstellen Ihrer Web-App
Nachdem Sie Ihren Code aktualisiert haben, können Sie ihn mit den folgenden Git-Befehlen erneut für Azure bereitstellen:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
Navigieren zur fertigen Web-App
http://<webapp-name>.azurewebsites.net
Anstelle der zuvor angezeigten Nachricht „Hallo Welt! sollte nun der Wert Ihres Geheimnisses angezeigt werden.