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

Azure Key Vault API anahtarları, uygulamalarınıza, hizmetlerinize ve BT kaynaklarınıza erişmek için ihtiyacınız olan veritabanı bağlantı dizesi gibi gizli dizileri korumanıza yardımcı olur.

Bu öğreticide, Azure Key Vault'tan bilgi okumak için bir konsol uygulaması almayı öğreneceksiniz. Uygulama, Key Vault'ta kimlik doğrulaması yapmak için sanal makine tarafından yönetilen kimlik kullanır.

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

  • Kaynak grubu oluşturun.
  • Anahtar kasası oluşturma.
  • Anahtar kasasına bir gizli dizi ekleyin.
  • Anahtar kasasından bir gizli dizi alma.
  • Azure sanal makinesi oluşturma.
  • Sanal Makine için yönetilen kimliği etkinleştirin.
  • VM kimliğine izinler atayın.

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

Azure aboneliğiniz yoksa ücretsiz hesap 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ıza bir gizli dizi yerleştirmeniz ve izinleri atamanız gerekir.

Azure'da oturum açma

Aşağıdaki komutu kullanarak Azure'da oturum açmak için:

az login

Kaynak grubu ve anahtar kasası oluşturma

Bu hızlı başlangıçta önceden oluşturulmuş bir Azure anahtar kasası kullanılır. Azure CLI hızlı başlangıcı, Azure PowerShell hızlı başlangıcı veya Azure portalı hızlı başlangıcı adımlarını izleyerek anahtar kasası oluşturabilirsiniz.

Alternatif olarak, aşağıdaki 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 unique-keyvault-name> değerini anahtar kasanızın adıyla değiştirin<.

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

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Anahtar kasanızı gizli diziyle doldurma

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

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

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

Sanal makine oluşturun

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

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

VM'ye kimlik atama

Aşağıdaki örnekle sanal makine için sistem tarafından atanan bir kimlik oluşturun:

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

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

Az keyvault set-policy komutuyla daha önce oluşturulmuş kimlik izinlerini anahtar kasanıza atayın:

az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions  get list set delete

Sanal makinede oturum açma

Sanal makinede oturum açmak için Bağlan yönergeleri izleyin ve Azure Windows sanal makinesinde veya Bağlan oturum açın ve Bir Azure Linux sanal makinesinde oturum açın.

Konsol uygulamasını ayarlama

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

.NET Core’u yükleme

.NET Core'u yüklemek için .NET indirmeleri sayfasına gidin.

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

Komut istemi açın.

Aşağıdaki komutları çalıştırarak konsola "Merhaba Dünya" yazdırabilirsiniz:

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

paketini yükleyin

Konsol penceresinden .NET için Azure Key Vault Gizli Dizileri istemci kitaplığını yükleyin:

dotnet add package Azure.Security.KeyVault.Secrets

Bu hızlı başlangıç için Azure Key Vault'ta kimlik doğrulaması yapmak için aşağıdaki kimlik paketini yüklemeniz gerekir:

dotnet add package Azure.Identity

Konsol uygulamasını düzenleme

Program.cs dosyasını açın ve şu paketleri ekleyin:

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

URI'yi anahtar kasanızı yansıtacak şekilde vaultUri güncelleştirerek bu satırları ekleyin. Aşağıdaki kod, kimlik doğrulaması için uygulama tarafından yönetilen kimlikten belirteç kullanan anahtar kasası kimlik doğrulaması için 'DefaultAzureCredential()' kullanıyor. Anahtar kasasının kısıtlanmış olması durumunda yeniden denemeler için üstel geri alma da kullanıyor.

  class Program
    {
        static void Main(string[] args)
        {
            string secretName = "mySecret";
            string keyVaultName = "<your-key-vault-name>";
            var kvUri = "https://<your-key-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ı temizleme

Artık gerekli olmadığında sanal makineyi ve anahtar kasanızı silin.

Sonraki adımlar