Öğretici: .NET'da sanal makineyle Azure Key Vault kullanma

Azure Key Vault, uygulamalarınızın, hizmetlerinizin ve kaynaklarınızın ihtiyaç duyduğu API anahtarları ve veritabanı bağlantı dizeleri gibi gizli dizileri korumanıza yardımcı olur.

Bu öğreticide, bir konsol uygulamasını Azure Key Vault bilgilerini okuyacak şekilde yapılandıracaksınız. Uygulama, Key Vault kimlik doğrulaması yapmak için VM'nin yönetilen kimliğini kullanır.

Öğretici şunların nasıl yapıldığını göstermektedir:

  • Bir kaynak grubu oluşturun.
  • Anahtar kasası oluştur.
  • Anahtar kasasına bir gizli anahtar kaydedin.
  • Anahtar kasasından bir sır al.
  • Azure bir sanal makine oluşturun.
  • Sanal Makine için yönetilen kimliği etkinleştirin.
  • VM kimliğine izinler atayın.

Başlamadan önce Key Vault temel kavramları okuyun.

Azure aboneliğiniz yoksa free hesabı oluşturun.

Önkoşullar

Windows, Mac ve Linux için:

Kaynak oluşturma ve izin atama

Kodlamaya başlamadan önce bazı kaynaklar oluşturmanız, anahtar kasanızda bir gizli anahtar yerleştirmeniz ve izin atamanız gerekir.

Azure oturum açma

Azure CLI veya Azure PowerShell ile Azure oturum açın:

az login

Bir kaynak grubu ve anahtar kasası oluşturun

Bu hızlı başlangıç kılavuzunda önceden oluşturulmuş bir Azure anahtar kasası kullanılır. Bu hızlı başlangıçlarda yer alan adımları izleyerek bir anahtar kasası oluşturabilirsiniz:

Alternatif olarak, bu Azure CLI veya Azure PowerShell komutlarını çalıştırabilirsiniz.

Önemli

Her anahtar kasasının benzersiz bir adı olmalıdır. Aşağıdaki örneklerde <vault-name>'yi anahtar kasanızın adıyla değiştirin.

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

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

Anahtar kasanızı gizli diziyle doldurma

Şimdi mySecret adlı ve Success! değerine sahip bir gizli anahtar oluşturalım. Gizli bir bilgi, bir parola, SQL bağlantı dizesi veya hem güvenli hem de uygulamanızın kullanımına açık tutmanız gereken diğer bilgiler olabilir.

Yeni oluşturduğunuz anahtar kasanıza bir gizli eklemek için aşağıdaki komutu kullanın:

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

Sanal makine oluşturun

Aşağıdaki yöntemlerden birini kullanarak bir Windows veya Linux VM oluşturun:

Windows Linux
Azure CLI Azure CLI
PowerShell PowerShell
Azure portalı Azure portalı

VM'ye kimlik atayın

VM için sistem tarafından atanan bir yönetilen kimlik oluşturun:

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

Aşağıdaki kodda görüntülenen sistem tarafından atanan kimliği not edin. Yukarıdaki komutun çıktısı şöyle olacaktır:

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

VM kimliğine izin atama

Role-Based Access Control (RBAC) aracılığıyla anahtar kasanıza izinler almak için Azure CLI komutunu az role assignment create kullanarak "Kullanıcı Asıl Adı"na (UPN) bir rol atayın.

az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

, <upn>ve <subscription-id> değerlerini gerçek değerlerinizle değiştirin<vault-name>. Eğer farklı bir kaynak grubu adı kullandıysanız, "myResourceGroup" yerine bunu koyun. UPN'niz genellikle bir e-posta adresi biçiminde olur (ör. username@domain.com).

VM'de oturum açma

VM'de oturum açmak için Azure Windows sanal makinesine bağlanma ve oturum açma veya Azure Linux sanal makinesine bağlanıp oturum açma başlığı altındaki yönergeleri izleyin.

Konsol uygulamasını ayarlama

Bir konsol uygulaması oluşturun ve komutuyla dotnet gerekli paketleri yükleyin.

.NET yükleme

.NET yüklemek için .NET indirmeler sayfasına gidin.

Örnek .NET uygulaması oluşturma ve çalıştırma

Bir komut istemi açın ve şu komutu çalıştırın:

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

Uygulama konsola "Merhaba Dünya" yazdırır.

Paketleri yükleme

Konsol penceresinden Azure Key Vault Gizli Dizileri istemci kitaplığını ve Azure Kimlik kitaplığını yükleyin:

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

Konsol uygulamasını düzenleme

Program.cs öğesini açın ve aşağıdaki using yönergelerini ekleyin:

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

Main yöntemini aşağıdaki kodla değiştirin ve <vault-name> öğesini anahtar kasanızın adıyla güncelleştirin. Bu kod, Key Vault’ta kimlik doğrulaması yapmak için VM’nin yönetilen kimliğinden bir belirteç kullanan DefaultAzureCredential kullanır. Ayrıca, Key Vault kısıtlandığında yeniden denemeler için üstel geri çekilmeyi yapılandırır.

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

        }
    }

Kaynakları temizle

Artık ihtiyacınız kalmadığında VM'yi ve anahtar kasasını silin.

Sonraki adımlar