إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
أفضل طريقة للمصادقة مع خدمات Azure هي باستخدام هوية مدارة، لكن بعض السيناريوهات تتطلب مفتاح وصول، كلمة مرور، أو سر آخر. تدوير تلك الأسرار بانتظام لتقليل تأثير تسريب الاعتمادات.
يوضح هذا الدرس كيفية أتمتة التدوير السري الدوري لقواعد البيانات والخدمات التي تستخدم مجموعة واحدة من بيانات المصادقة. للحصول على نظرة عامة على التدوير التلقائي عبر أنواع الأصول المختلفة، راجع فهم التدوير التلقائي في Azure Key Vault.
تحديدا، يقوم هذا الدرس بتدوير كلمة مرور SQL Server المخزنة في Azure Key Vault، باستخدام دالة يتم تفعيلها بواسطة إشعار Azure Event Grid:
نصيحة
بالنسبة ل قاعدة بيانات Azure SQL و مثيل Azure SQL المُدار، أفضل المصادقة التي تعتمد فقط على Microsoft Entra بدلا من تسجيل الدخول إلى SQL. استخدم نمط تدوير كلمة المرور في هذا الدرس فقط عندما يتطلب عبء العمل مصادقة SQL.
- قبل ثلاثين يوما من تاريخ انتهاء السرية، تنشر Key Vault حدث "قريب من الانتهاء" على Event Grid.
- تتحقق Event Grid من اشتراكات الحدث وتستخدم HTTP POST لاستدعاء نقطة نهاية تطبيق الوظائف المشتركة في الحدث.
- تطبيق الوظيفة يستقبل المعلومات السرية، ويولد كلمة مرور عشوائية جديدة، وينشئ نسخة جديدة للسر باستخدام كلمة المرور الجديدة في Key Vault.
- يقوم تطبيق الوظيفة بتحديث SQL Server بكلمة المرور الجديدة.
ملاحظة
قد يكون هناك تأخير بين الخطوتين 3 و4. خلال تلك الفترة، لا يمكن للسر في Key Vault التحقق من صحته إلى SQL Server. إذا فشلت أي خطوة، تعيد شبكة الأحداث المحاولة لمدة ساعتين.
المتطلبات
- اشتراك Azure - create one مجانا.
- Azure Key Vault.
- SQL Server.
إذا لم يكن لديك بالفعل خزنة مفاتيح ومثيل SQL Server، استخدم رابط النشر هذا:
- تحت مجموعة الموارد، اختر إنشاء جديد، وأعط المجموعة اسما. هذا الدرس يستخدم akvrotation.
- تحت تسجيل دخول مسؤول SQL، أدخل اسم تسجيل دخول مسؤول SQL.
- حدد "Review + create".
- حدد إنشاء.
الآن لديك مخزن مفاتيح ومثيل SQL Server. تحقق من هذا الإعداد في Azure CLI:
az resource list -o table -g akvrotation
تبدو النتيجة مشابهة للمخرج التالي:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
akvrotation-kv akvrotation eastus Microsoft.KeyVault/vaults
akvrotation-sql akvrotation eastus Microsoft.Sql/servers
akvrotation-sql/master akvrotation eastus Microsoft.Sql/servers/databases
akvrotation-sql2 akvrotation eastus Microsoft.Sql/servers
akvrotation-sql2/master akvrotation eastus Microsoft.Sql/servers/databases
إنشاء ونشر دالة تدوير كلمة مرور SQL Server
هام
يتطلب هذا القالب أن تكون خزنة المفتاح، ومثيل SQL Server، وتطبيق الدوال في نفس مجموعة الموارد.
بعد ذلك، أنشئ تطبيق وظيفة بهوية مدارة مخصصة للنظام مع المكونات المطلوبة الأخرى، ونشر وظيفة تدوير كلمة مرور SQL Server.
يتطلب تطبيق الوظائف هذه المكونات:
- An "Azure App Service" plan.
- تطبيق وظائف يحتوي على دالة تدوير كلمة مرور SQL تحتوي على مشغل شبكة الأحداث ومشغل HTTP.
- حساب تخزين لإدارة محفزات تطبيقات الوظائف.
- تعيين دور في Azure يسمح لتطبيق الوظيفة بالوصول إلى الأسرار في خزنة المفاتيح.
- اشتراك حدث Event Grid لحدث SecretNearExpiry .
اختر رابط نشر قالب Azure:
في قائمة Resource group ، حدد akvrotation.
في SQL Server Name، أدخل اسم نسخة SQL Server التي تريد تدوير كلمة مرورها.
في Key Vault Name، أدخل اسم key vault.
في اسم تطبيق الوظيفة، أدخل اسم تطبيق الوظيفة.
في الاسم السري، أدخل الاسم السري الذي يخزن كلمة المرور.
في Repo URL، أدخل موقع GitHub لرمز الدالة:
https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git.حدد "Review + create".
حدد إنشاء.
ملاحظة
يستخدم هذا القالب من ARM نشر التحكم المصدري في خدمة التطبيقات (Kudu) لسحب كود الدالة من GitHub. بالنسبة لعمال العمل الإنتاجي، نوصي بنشر قائم على الحزم مثل func azure functionapp publish أو نشر zip مع WEBSITE_RUN_FROM_PACKAGE بدلا من ذلك.
بعد إكمال الخطوات السابقة، سيكون لديك حساب تخزين، ومزرعة خوادم، وتطبيق وظائف. تحقق من هذا الإعداد في Azure CLI:
az resource list -o table -g akvrotation
تبدو النتيجة مشابهة للمخرج التالي:
Name ResourceGroup Location Type Status
----------------------- -------------------- ---------- --------------------------------- --------
akvrotation-kv akvrotation eastus Microsoft.KeyVault/vaults
akvrotation-sql akvrotation eastus Microsoft.Sql/servers
akvrotation-sql/master akvrotation eastus Microsoft.Sql/servers/databases
cfogyydrufs5wazfunctions akvrotation eastus Microsoft.Storage/storageAccounts
akvrotation-fnapp akvrotation eastus Microsoft.Web/serverFarms
akvrotation-fnapp akvrotation eastus Microsoft.Web/sites
akvrotation-fnapp akvrotation eastus Microsoft.insights/components
لمزيد من المعلومات حول إنشاء تطبيق وظائف واستخدام هوية مدارة للوصول إلى Key Vault، راجع إنشاء تطبيق وظائف من بوابة Azure، وكيفية استخدام الهوية المدارة لخدمة التطبيقات ودالات Azure، وتوفير الوصول إلى Key Vault مع Azure RBAC.
ملاحظة
تستهدف دالة العينة نموذج .NET قيد العملية لنظام دالات Azure. للتطوير الجديد، استخدم نموذج العامل المعزول .NET، وهو النموذج المدعوم للمستقبل.
دالة التدوير
الوظيفة التي تم نشرها في الخطوة السابقة تستخدم حدثا لتفعيل الدوران السري. يقوم بتحديث Key Vault وقاعدة بيانات SQL.
حدث مشغل الدالة
تقرأ هذه الدالة بيانات الحدث وتشغل منطق التدوير:
public static class SimpleRotationEventHandler
{
[FunctionName("AKVSQLRotation")]
public static void Run([EventGridTrigger]EventGridEvent eventGridEvent, ILogger log)
{
log.LogInformation("C# Event trigger function processed a request.");
var secretName = eventGridEvent.Subject;
var secretVersion = Regex.Match(eventGridEvent.Data.ToString(), "Version\":\"([a-z0-9]*)").Groups[1].ToString();
var keyVaultName = Regex.Match(eventGridEvent.Topic, ".vaults.(.*)").Groups[1].ToString();
log.LogInformation($"Key Vault Name: {keyVaultName}");
log.LogInformation($"Secret Name: {secretName}");
log.LogInformation($"Secret Version: {secretVersion}");
SecretRotator.RotateSecret(log, secretName, keyVaultName);
}
}
منطق تدوير البيانات السرية
يقرأ أسلوب التدوير هذا معلومات قاعدة البيانات من السر، وينشئ إصدارا جديدا من البيانات السرية، ويحدث قاعدة البيانات بالسر الجديد:
public class SecretRotator
{
private const string CredentialIdTag = "CredentialId";
private const string ProviderAddressTag = "ProviderAddress";
private const string ValidityPeriodDaysTag = "ValidityPeriodDays";
public static void RotateSecret(ILogger log, string secretName, string keyVaultName)
{
//Retrieve Current Secret
var kvUri = "https://" + keyVaultName + ".vault.azure.net";
var client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential());
KeyVaultSecret secret = client.GetSecret(secretName);
log.LogInformation("Secret Info Retrieved");
//Retrieve Secret Info
var credentialId = secret.Properties.Tags.ContainsKey(CredentialIdTag) ? secret.Properties.Tags[CredentialIdTag] : "";
var providerAddress = secret.Properties.Tags.ContainsKey(ProviderAddressTag) ? secret.Properties.Tags[ProviderAddressTag] : "";
var validityPeriodDays = secret.Properties.Tags.ContainsKey(ValidityPeriodDaysTag) ? secret.Properties.Tags[ValidityPeriodDaysTag] : "";
log.LogInformation($"Provider Address: {providerAddress}");
log.LogInformation($"Credential Id: {credentialId}");
//Check Service Provider connection
CheckServiceConnection(secret);
log.LogInformation("Service Connection Validated");
//Create new password
var randomPassword = CreateRandomPassword();
log.LogInformation("New Password Generated");
//Add secret version with new password to Key Vault
CreateNewSecretVersion(client, secret, randomPassword);
log.LogInformation("New Secret Version Generated");
//Update Service Provider with new password
UpdateServicePassword(secret, randomPassword);
log.LogInformation("Password Changed");
log.LogInformation($"Secret Rotated Successfully");
}
}
يمكنك العثور على الكود الكامل على GitHub.
أضف السر إلى Key Vault
خصص لنفسك دور ضابط Key Vault Secrets حتى تتمكن من إدارة الأسرار في الخزنة:
az role assignment create --role "Key Vault Secrets Officer" --assignee <email-address-of-user> --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/akvrotation-kv
أنشئ سرا يحتوي على وسوم تحتوي على معرف مورد SQL Server، واسم تسجيل الدخول في SQL Server، وفترة صلاحية السر بأيام. حدد الاسم السري، وكلمة المرور الأولية من قاعدة بيانات SQL (Simple123 في هذا المثال)، وتاريخ انتهاء صلاحية ليصبح غدا حتى يتم تفعيل التدوير فورا.
tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name sqlPassword --vault-name akvrotation-kv --value "Simple123" --tags "CredentialId=sqlAdmin" "ProviderAddress=<sql-database-resource-id>" "ValidityPeriodDays=90" --expires $tomorrowDate
تعيين تاريخ انتهاء قصير ينشر حدثا SecretNearExpiry خلال 15 دقيقة، مما يؤدي إلى تشغيل الدالة لتدوير السر.
الاختبار والتحقق
للتحقق من أن السر تغير، اذهب إلى KeyVaultSecrets>:
افتح سر sqlPassword واعرض الإصدارات الأصلية والمدارة:
أنشئ تطبيق ويب
للتحقق من بيانات اعتماد SQL، قم بإنشاء تطبيق ويب. يقوم تطبيق الويب باسترجاع السر من Key Vault، ويستخرج معلومات قاعدة بيانات SQL وبيانات اعتمادها من السر، ويختبر الاتصال ب SQL Server.
يتطلب تطبيق الويب هذه المكونات:
- تطبيق ويب مع هوية مدارة معينة من النظام.
- تعيين دور يسمح لهوية تطبيق الويب المدارة بقراءة الأسرار في خزنة المفاتيح.
اختر رابط نشر قالب Azure:
حدد مجموعة موارد akvrotation .
في SQL Server Name، أدخل اسم SQL Server الذي قمت بتدوير كلمة المرور له.
في Key Vault Name، أدخل اسم key vault.
في الاسم السري، أدخل الاسم السري الذي يخزن كلمة المرور.
في عنوان Repo، أدخل موقع GitHub لكود تطبيق الويب:
https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git.حدد "Review + create".
حدد إنشاء.
فتح تطبيق الويب
اذهب إلى رابط التطبيق المنشور: https://akvrotation-app.azurewebsites.net/.
عند فتح التطبيق في المتصفح، تعرض الصفحة القيمة السرية المولدة وقيمة متصلة بقاعدة البيانات ل true.
استخدم الذكاء الاصطناعي لتخصيص وظيفة التدوير لقاعدة بياناتك
هذا الدرس يوضح الدوران السري لنظام SQL Server، لكن يمكنك تعديل دالة التدوير لأنواع قواعد بيانات أخرى. يمكن ل GitHub Copilot مساعدتك في تعديل كود دالة التدوير ليعمل مع قاعدة بياناتك أو نوع الاعتماد.
I'm using the Azure Key Vault secret rotation tutorial for SQL Server. Help me modify the rotation function to work with PostgreSQL instead. The function should:
1. Generate a new secure password
2. Update the PostgreSQL database user password
3. Store the new password in Key Vault
Show me the changes needed to the C# function code, including the correct PostgreSQL connection library and password update command.
يمكن ل Copilot أيضا مساعدتك في تكييف هذا النمط لأنواع أخرى من الاعتمادات مثل مفاتيح API، سلاسل الاتصال، أو كلمات مرور حسابات الخدمة.
GitHub Copilot مدعوم بالذكاء الاصطناعي، لذا من الممكن حدوث مفاجآت وأخطاء محتملة. لمزيد من المعلومات، راجع Copilot الأسئلة الشائعة.