Gyakorlat – Egyéni alkalmazás konfigurálása a .NET-ben felügyelt identitás használatával

Befejeződött

Az alkalmazások kapcsolati sztringjeit, hitelesítő adatait, jelszavait és egyéb bizalmas adatait tárolhatja az Azure Key Vaultban. A Key Vault eléréséhez hitelesítő adatokra van szüksége. Most, hogy az alkalmazás egy Azure-beli virtuális gépre vált, frissítheti a felügyelt identitások használatára, hogy hozzáférési jogkivonatot kapjon a Key Vaultban való hitelesítéshez.

A készletnyilvántartó alkalmazás egy Azure SQL Database-adatbázishoz csatlakozik. A helyszíni alkalmazás korábban konfigurációs fájlokban tárolta a kapcsolati sztringet. Az Azure-ba való migrálás részeként mostantól biztonságosan tárolhatja az összes hitelesítő adatot és kapcsolati sztring egy Azure Key Vaultban.

A készletkövető alkalmazás virtuális gépen (VM-en) fut, így használhatja a létrehozott rendszer által hozzárendelt felügyelt identitást. Egy olyan szabályzatot kell hozzáadnia a kulcstartóhoz, amely megadja a megfelelő engedélyeket a virtuális gépnek.

Ebben a gyakorlatban úgy fogja szerkeszteni az alkalmazást, hogy az új kulcstartót használja. Ezután megadja a felügyelt identitást a virtuális gép számára, hogy az alkalmazás le tudja kérni az adatbázis-kapcsolatot. Végül létrehoz és futtat egy alkalmazást a virtuális gépen a Key Vault eléréséhez és az információk lekéréséhez.

Alkalmazás létrehozása a titkos adatok Key Vaultból való beolvasásához

  1. Jelentkezzen be a korábban létrehozott virtuális gépre.

    ssh $publicIP
    

    Megjegyzés:

    Ha a környezeti változó publicIP nincs beállítva, állítsa alaphelyzetbe a következő parancs futtatásával:

    export publicIP=$(az vm show \
        --name prodserver \
        --resource-group <rgn>[Sandbox resource group]</rgn> \
        --show-details \
        --query [publicIps] \
        --output tsv)
    

    Ezután futtassa újra a ssh $publicIP parancsot.

  2. Ugrás az identity/secretapp mappára.

    cd ~/identity/secretapp
    
  3. Nyissa meg a Program.cs fájlt a nanoszerkesztővel.

    nano Program.cs
    

    Ez a fájl tartalmazza a mintaalkalmazás C#-forráskódját.

  4. Vizsgálja meg a Main módszert.

    static async Task Main(string[] args)
    {
        await GetSecretFromKeyVault().ConfigureAwait(false);
    }
    

    Ez a metódus az alkalmazás belépési pontja, amely csak meghívja a GetSecretFromKeyVault metódust.

  5. Görgessen le a GetSecretFromKeyVault metódusig. Vizsgálja meg a metódus első kódblokkját.

    private static async Task GetSecretFromKeyVault()
    {
        var keyVaultName = "<key vault name>";
        Uri keyVaultUri = new Uri($"https://{keyVaultName}.vault.azure.net");
    
        SecretClient secretClient = new SecretClient(keyVaultUri, new DefaultAzureCredential());
        ...
    }
    

    Írja felül a "<key vault name>" változót a saját kulcstartó nevével. Ez a kód a DefaultAzureCredential használatával hitelesíti a kérelmet intéző ügyfelet. A kód a színfalak mögött lekéri a kódot futtató virtuális gép rendszer által felügyelt identitását. Ezután létrehoz egy SecretClient példányt, amely ezt a hitelesítési sémát fogja használni. Ezt a SecretClient példányt használhatja a kulcstartóban lévő titkos kódok eléréséhez.

  6. Tekintse meg a kód következő részét.

    var keyVaultSecretName = "<secret name>";
    
    try
    {
        var secret = await secretClient.GetSecretAsync(keyVaultSecretName).ConfigureAwait(false);
    
        Console.WriteLine($"Secret: {secret.Value}");
    }
    catch (Exception exp)
    {
        Console.WriteLine($"Something went wrong: {exp.Message}");
    }
    

    Cserélje a <secret name> értéket a kulcstartóban létrehozott titkos kód nevére ("DBCredentials").

    Ez a kódblokk meghívja a SecretClientGetSecretAsync metódusát, hogy lekérjen egy adott titkos kódot, és megjelenítse annak értékét. Ha az ügyfélnek nincs engedélye a kulcs elérésére, akkor ez a kód kivételt okoz, és hibaüzenetet jelenít meg.

    Megjegyzés:

    A kódban nincs jelszó, tanúsítvány vagy titkos ügyfélkód tárolva.

  7. A módosítások mentéséhez nyomja le a Ctrl+O billentyűkombinációt, majd nyomja le az Enter billentyűt.

  8. A nanoszerkesztő bezárásához nyomja le a Ctrl+X billentyűkombinációt.

Az alkalmazás tesztelése

  1. Futtassa a következő parancsot az alkalmazás létrehozásához.

    dotnet restore
    dotnet build
    

    Ha megfelelően szerkesztette a programot, az alkalmazás fordításának hiba nélkül kell végbemennie.

  2. Futtassa az alkalmazást.

    dotnet run
    

    Még nem engedélyezte a virtuális gép szolgáltatásneve számára a kulcstartó elérését. Ezért az alkalmazásnak hibaüzenettel kell válaszolnia:

    Something went wrong: Operation returned an invalid status code 'Forbidden'

Engedélyek megadása ahhoz, hogy a szolgáltatásnév le tudja kérni a titkos kódokat a Key Vaultból

  1. Zárja be a virtuális géphez való kapcsolatot.

    exit
    
  2. Az előző gyakorlat során feljegyezte a virtuális gép résztvevő-azonosítóját. Ha nem emlékszik rá, a következő parancs futtatásával keresheti meg a virtuális gép rendszer által hozzárendelt azonosítóját. (A $VMNAME változó az előző gyakorlatban a .) értékre prodserverlett beállítva.

    az vm identity show \
      --name $VMNAME \
      --resource-group <rgn>[Sandbox resource group]</rgn>
    

    Az alábbi kód egy példa a visszaadott értékre. Az azonosítók eltérőek lesznek.

    {
        "principalId": "aba6da53-9180-47fc-8fc4-4b35f154e845",
        "tenantId": "a95baa51-dcb1-4b9a-8312-8774a8afddbe",
        "type": "SystemAssigned",
        "userAssignedIdentities": null
    }
    

    Adja meg ezt értéket a következő parancsban ahhoz, hogy az csak a résztvevő-azonosítót adja vissza.

  3. Az egyszerű azonosítóval engedélyezheti a virtuális gép számára a kulcstartó titkos kulcsainak lekérését és listázását.

    az keyvault set-policy \
        --name $KVNAME \
        --secret-permissions get list \
        --object-id $(az vm identity show \
                        --name $VMNAME \
                        --resource-group <rgn>[Sandbox resource group]</rgn> \
                        --output tsv \
                        --query principalId)
    

    A visszaadott érték JSON formátumú. Ez tartalmazza az azonosítót, a helyet, a nevet, és az összes társított tulajdonságot.

Az alkalmazás újbóli tesztelése

  1. Jelentkezzen be a virtuális gépre.

    ssh $publicIP
    
  2. Váltson a identity/secretapp mappára.

    cd ~/identity/secretapp
    
  3. Futtassa az alkalmazást.

    dotnet run
    

    Az alkalmazásnak ezúttal le kell kérnie a titkos kulcsot a Key Vaultból, és meg kell jelenítenie annak értékét.

    Database connection string:: Server=tcp:prodserverSQL.database.windows.net,1433;Database=myDataBase;User ID=mylogin@myserver;Password=examplePassword;Trusted_Connection=False;Encrypt=True;