Lernprogramm: Verwenden von Azure Key Vault mit einem virtuellen Computer in .NET

Azure Key Vault hilft Ihnen, geheime Schlüssel wie API-Schlüssel und Datenbankverbindungszeichenfolgen zu schützen, die Ihre Anwendungen, Dienste und Ressourcen benötigen.

In diesem Lernprogramm konfigurieren Sie eine Konsolenanwendung zum Lesen von Informationen aus Azure Key Vault. Die Anwendung verwendet die verwaltete Identität des virtuellen Computers, um sich bei Key Vault zu authentifizieren.

Das Tutorial veranschaulicht folgende Vorgehensweisen:

  • Erstellen Sie eine Ressourcengruppe.
  • Erstellen eines Schlüsseltresors.
  • Hinzufügen eines Geheimnisses zum Schlüsseltresor.
  • Abrufen eines Geheimnisses aus dem Schlüsseltresor.
  • Erstellen Sie einen Azure virtuellen Computer.
  • Aktivieren einer verwalteten Identität für den virtuellen Computer
  • Zuweisen von Berechtigungen zur VM-Identität.

Lesen Sie vor Beginn Key Vault grundlegende Konzepte.

Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein free-Konto.

Voraussetzungen

Für Windows, Mac und Linux:

Erstellen von Ressourcen und Zuweisen von Berechtigungen

Bevor Sie mit der Programmierung beginnen, müssen Sie einige Ressourcen erstellen, ein Geheimnis in Ihren Schlüsseltresor legen und Berechtigungen zuweisen.

Anmelden bei Azure

Melden Sie sich mit dem Azure CLI oder Azure PowerShell bei Azure an:

az login

Erstellen einer Ressourcengruppe und eines Schlüsseltresors

In dieser Schnellstartanleitung wird ein vorkonfigurierter Azure Key Vault verwendet. Sie können einen Schlüsseltresor erstellen, indem Sie die Schritte in den folgenden Schnellstarts ausführen:

Alternativ können Sie diese Azure CLI oder Azure PowerShell Befehle ausführen.

Wichtig

Jeder Schlüsseltresor muss einen eindeutigen Namen haben. Ersetzen Sie in den folgenden Beispielen <vault-name> durch den Namen Ihres Schlüsseltresors.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Einfügen eines Geheimnisses in Ihren Schlüsseltresor

Erstellen Sie ein Geheimnis mit dem Namen mySecret und dem Wert Success! . Ein Geheimer Schlüssel kann ein Kennwort, ein SQL-Verbindungszeichenfolge oder andere Informationen sein, die Sie benötigen, um sowohl sicher als auch für Ihre Anwendung verfügbar zu sein.

Fügen Sie Ihrem neu erstellten Schlüsseltresor mit dem folgenden Befehl ein Geheimnis hinzu:

az keyvault secret set --vault-name "<vault-name>" --name "mySecret" --value "Success!"

Erstellen eines virtuellen Computers

Erstellen Sie eine Windows- oder Linux-VM mithilfe einer der folgenden Methoden:

Windows Linux
Azure CLI Azure CLI
PowerShell PowerShell
Azure Portal Azure Portal

Zuweisen einer Identität zum virtuellen Computer

Erstellen Sie eine vom System zugewiesene verwaltete Identität für den virtuellen Computer:

az vm identity assign --name <vm-name> --resource-group <resource-group>

Beachten Sie die systemseitig zugewiesene Identität, die im folgenden Code angezeigt wird. Die Ausgabe des obigen Befehls lautet etwa wie folgt:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Zuweisen von Berechtigungen für die VM-Identität

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).

Melden Sie sich bei der VM an

Um sich an der VM anzumelden, folgen Sie den Anweisungen in Herstellen einer Verbindung mit einem virtuellen Azure-Windows-Computer und Anmelden bei diesem oder Herstellen einer Verbindung mit einem virtuellen Azure-Linux-Computer und Anmelden bei diesem.

Einrichten der Konsolen-App

Erstellen Sie eine Konsolen-App, und installieren Sie die erforderlichen Pakete mit dem dotnet Befehl.

Installieren von .NET

Um .NET zu installieren, wechseln Sie zur Seite ".NET Downloads".

Erstellen und Ausführen einer Beispiel-.NET-App

Öffnen Sie eine Eingabeaufforderung, und führen Sie folgenden Befehl aus:

dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run

Die App druckt „Hallo Welt“ in der Konsole.

Installieren der Pakete

Installieren Sie im Konsolenfenster die Azure Key Vault-Clientbibliothek für Geheimnisse und die Azure Identity-Bibliothek:

dotnet add package Azure.Security.KeyVault.Secrets
dotnet add package Azure.Identity

Bearbeiten der Konsolen-App

Öffnen Sie Program.cs und fügen Sie die folgenden using-Direktiven hinzu:

using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

Ersetzen Sie die Methode Main durch den folgenden Code und aktualisieren Sie <vault-name> mit dem Namen Ihres Schlüsseltresors. Dieser Code verwendet DefaultAzureCredential zum Authentifizieren bei Key Vault, das ein Token aus der verwalteten Identität des virtuellen Computers verwendet. Es konfiguriert auch ein exponentielles Backoff für Wiederholungsversuche, wenn Key Vault gedrosselt wird.

  class Program
    {
        static void Main(string[] args)
        {
            string secretName = "mySecret";
            string keyVaultName = "<vault-name>";
            var kvUri = "https://<vault-name>.vault.azure.net";
            SecretClientOptions options = new SecretClientOptions()
            {
                Retry =
                {
                    Delay= TimeSpan.FromSeconds(2),
                    MaxDelay = TimeSpan.FromSeconds(16),
                    MaxRetries = 5,
                    Mode = RetryMode.Exponential
                 }
            };

            var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);

            Console.Write("Input the value of your secret > ");
            string secretValue = Console.ReadLine();

            Console.Write("Creating a secret in " + keyVaultName + " called '" + secretName + "' with the value '" + secretValue + "' ...");

            client.SetSecret(secretName, secretValue);

            Console.WriteLine(" done.");

            Console.WriteLine("Forgetting your secret.");
            secretValue = "";
            Console.WriteLine("Your secret is '" + secretValue + "'.");

            Console.WriteLine("Retrieving your secret from " + keyVaultName + ".");

            KeyVaultSecret secret = client.GetSecret(secretName);

            Console.WriteLine("Your secret is '" + secret.Value + "'.");

            Console.Write("Deleting your secret from " + keyVaultName + " ...");

            client.StartDeleteSecret(secretName);

            System.Threading.Thread.Sleep(5000);
            Console.WriteLine(" done.");

        }
    }

Bereinigen von Ressourcen

Wenn Sie sie nicht mehr benötigen, löschen Sie die VM und den Schlüsseltresor.

Nächste Schritte