البرنامج التعليمي: استخدام Azure Key Vault مع جهاز افتراضي في .NET
يساعدك Azure Key Vault على حماية الأسرار مثل مفاتيح واجهة برمجة التطبيقات وسلاسل اتصال قاعدة البيانات التي تحتاجها للوصول إلى التطبيقات والخدمات وموارد تكنولوجيا المعلومات.
في هذا البرنامج التعليمي، تتعلم كيفية الحصول على تطبيق وحدة تحكم لقراءة المعلومات من Azure Key Vault. التطبيق سيستخدم هوية الجهاز الافتراضي المدارة للمصادقة على Key Vault.
يوضح لك هذا البرنامج التعليمي كيفية:
- قم بإنشاء مجموعة موارد.
- إنشاء مخزن رئيسي.
- إضافة سر إلى key vault.
- استرجاع سر من Key Vault.
- إنشاء جهاز افتراضي من Azure.
- تمكين هوية مدارة للجهاز الافتراضي.
- تعيين أذونات إلى هوية VM.
قبل البدء، اقرأ المفاهيم الأساسية لـ Key Vault.
إذا لم يكن لديك اشتراك Azure، فأنشئ حسابًا مجانًا.
المتطلبات الأساسية
بالنسبة Windows, Mac, and Linux:
إنشاء الموارد وتعيين الأذونات
قبل البدء في الترميز تحتاج إلى إنشاء بعض الموارد، ووضع سر في مخزن المفاتيح الخاص بك، وتعيين الأذونات.
تسجيل الدخول إلى Azure
قم بتسجيل الدخول إلى Azure باستخدام الأمر التالي:
az login
إنشاء مجموعة موارد ومخزن رئيسي
تستخدم هذا التشغيل السريع مخزن بيانات سرية لـ Azure تم إنشاؤه مسبقاً. يمكنك إنشاء مخزن بيانات سرية باتباع الخطوات الواردة في بداية سريعة إلى Azure CLI أو بداية سريعة إلى Azure PowerShell أو بداية سريعة إلى مدخل Microsoft Azure.
بدلاً من ذلك، يمكنك ببساطة تشغيل أوامر Azure CLI أو Azure PowerShell أدناه.
هام
يجب أن يكون لكل مخزن رئيسي اسم فريد. استبدل <your-unique-keyvault-name> باسم المخزن الرئيس في الأمثلة التالية.
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"
ملء key vault الخاص بك ببيانات سرية
لنقم بإنشاء سر يسمى mySecret، بقيمة Success!. قد يكون السر عبارة عن كلمة مرور أو سلسلة اتصال SQL أو أي معلومات أخرى تحتاجها للحفاظ على أمانها وإتاحتها لتطبيقك.
لإضافة سر إلى مخزن المفاتيح الذي أنشأته حديثاً، استخدم الأمر التالي:
az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"
إنشاء جهاز ظاهري
إنشاء جهاز افتراضي Windows أو Linux باستخدام إحدى الطرق التالية:
Windows | Linux |
---|---|
Azure CLI | Azure CLI |
بوويرشيل | بوويرشيل |
مدخل Microsoft Azure | مدخل Microsoft Azure |
تعيين هوية لجهاز VM
إنشاء هوية معينة من قبل النظام للجهاز الافتراضي مع المثال التالي:
az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>
لاحظ الهوية المعينة من قبل النظام التي يتم عرضها في التعليمات البرمجية التالية. مخرج الأمر السابق سيكون:
{
"systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"userAssignedIdentities": {}
}
تعيين أذونات إلى هوية VM
تعيين أذونات الهوية التي تم إنشاؤها مسبقاً إلى مخزن المفاتيح الخاص بك مع الأمر az keyvault set-policy:
az keyvault set-policy --name '<your-unique-key-vault-name>' --object-id <VMSystemAssignedIdentity> --secret-permissions get list set delete
تسجيل الدخول إلى الجهاز الافتراضي
لتسجيل الدخول إلى الجهاز الافتراضي، اتبع الإرشادات الواردة في الاتصال بالجهاز الافتراضي Azure Windows وتسجيل الدخول إليه أو الاتصال بجهاز Azure Linux الافتراضي وتسجيل الدخول إليه .
إعداد تطبيق وحدة التحكم
إنشاء تطبيق وحدة تحكم وتثبيت الحزم المطلوبة باستخدام dotnet
الأمر.
تثبيت .NET Core
لتثبيت .NET Core، انتقل إلى صفحة تنزيلات .NET.
إنشاء نموذج لتطبيق .NET وتشغيله
افتح موجه الأوامر.
يمكنك طباعة "Hello World" إلى وحدة التحكم عن طريق تشغيل الأوامر التالية:
dotnet new console -n keyvault-console-app
cd keyvault-console-app
dotnet run
تثبيت الحزمة
من نافذة وحدة التحكم، قم بتثبيت مكتبة عميل أسرار Azure Key Vault لصالح .NET:
dotnet add package Azure.Security.KeyVault.Secrets
لهذه البداية السريعة، ستحتاج إلى تثبيت حزمة الهوية التالية للمصادقة على Azure Key Vault:
dotnet add package Azure.Identity
تحرير تطبيق وحدة التحكم
افتح ملف Program.cs، ثم قم بإضافة الحزم التالية:
using System;
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
أضف هذه السطور، مع تحديث URI لتعكس vaultUri
خزنة المفاتيح. الرمز أدناه يستخدم "DefaultAzureCredential()' للمصادقة على مخزن المفاتيح، والذي يستخدم الرمز المميز من هوية التطبيق المُدارة للمصادقة. يستخدم الكود أيضاً تراجعات أسية لإعادة المحاولة في حال تعطيل Key Vault.
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.");
}
}
تنظيف الموارد
عندما لا تكون هناك حاجة إليها، احذف الجهاز الظاهري، وخزنة المفاتيح.