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. Ha felügyelt identitást használ, a létrehozott szolgáltatásnévvel létrehozhat egy hozzáférési jogkivonatot a hitelesítéshez a Key Vault.

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 most már biztonságosan tárolja az összes hitelesítő adatokat és kapcsolati sztringet egy Azure Key Vault.

A készletnyilvántartó alkalmazás egy virtuális gépen fut, így Ön használhatja a rendszer által hozzárendelt felügyelt identitást, amelyet létrehozott. 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 hozzáférést ad a felügyelt identitásnak a virtuális géphez, hogy az alkalmazás lekérni tudja az adatbázis-kapcsolatot. Végül egy alkalmazást fog felépíteni és futtatni a virtuális gépen, hogy hozzáférjen Key Vault és lekéri az adatokat.

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. Lépjen az identity/secretapp mappába.

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

    nano Program.cs
    

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

  4. Vizsgálja meg a Main metódust.

    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. Nézze 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 SecretClient GetSecretAsync metódusát, hogy lekérjen egy adott titkos kódot, és megjelenítse annak értékét. Ha az ügyfél nem rendelkezik engedéllyel a kulcs eléréséhez, ez a kód kivételt jelez, é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éshez nyomja le a Ctrl+O billentyűkombinációt,majd nyomja le az Enter billentyűt.

  8. A nano szerkesztőt a Ctrl+X billentyűkombinációval zárja be.

Az alkalmazás tesztelése

  1. Futtassa a következő parancsot az alkalmazás felépítéséhez.

    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 a következő 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ó csatlakozást.

    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. (Az előző gyakorlatban a változó értéke $VMNAME prodserver .)

    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. A rendszerbiztonsági tagazonosítóval engedélyezze a virtuális gépnek a kulcstartóban tárolt titkos kulcsok lekérését és listzá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áltsa át a identity/secretapp mappát.

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

    dotnet run
    

    Ezúttal az alkalmazásnak le kellkérni a titkos adatokat a Key Vault és meg kell jelenni az értéke.

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