إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
أفضل طريقة للمصادقة على خدمات Azure هي باستخدام هوية مدارة، ولكن هناك بعض السيناريوهات التي لا يكون فيها ذلك خيارا. في هذه الحالات، يتم استخدام مفاتيح الوصول أو الأسرار. يجب تدوير مفاتيح الوصول أو الأسرار بشكل دوري.
يوضح هذا البرنامج التعليمي كيفية أتمتة التدوير الدوري للبيانات السرية لقواعد البيانات والخدمات التي تستخدم مجموعة واحدة من بيانات اعتماد المصادقة. للحصول على نظرة عامة شاملة على مفاهيم وفوائد التشغيل التلقائي عبر أنواع الأصول المختلفة، راجع فهم التشغيل التلقائي في Azure Key Vault.
على وجه التحديد، يقوم هذا البرنامج التعليمي بتدوير كلمات مرور SQL Server المخزنة في Azure Key Vault باستخدام وظيفة تم تشغيلها بواسطة إعلام Azure Event Grid:
- قبل ثلاثين يوما من تاريخ انتهاء صلاحية البيانات السرية، ينشر Key Vault الحدث "قرب انتهاء الصلاحية" إلى Event Grid.
- تتحقق Event Grid من اشتراكات الحدث وتستخدم HTTP POST لاستدعاء نقطة نهاية تطبيق الوظائف المشتركة في الحدث.
- يتلقى تطبيق الوظائف المعلومات السرية، وينشئ كلمة مرور عشوائية جديدة، وينشئ إصدارا جديدا للسر مع كلمة المرور الجديدة في Key Vault.
- يقوم تطبيق الدالة بتحديث SQL Server بكلمة المرور الجديدة.
ملاحظة
قد يكون هناك فارق بين الخطوين 3 و4. خلال ذلك الوقت، لن يتمكن السر في Key Vault من المصادقة على SQL Server. في حالة فشل أي من الخطوات، تعيد Event Grid المحاولة لمدة ساعتين.
المتطلبات
- اشتراك Azure - إنشاء اشتراك مجاناً.
- Azure Key Vault
- SQL Server
إذا لم يكن لديك Key Vault وSQL Server موجودان، يمكنك استخدام ارتباط النشر هذا:
- ضمن Resource group، اختر Create new. إعطاء اسم للمجموعة، نستخدم akvrotation في هذا البرنامج التعليمي.
- ضمن تسجيل دخول مسؤول SQL، اكتب اسم تسجيل دخول مسؤول SQL.
- حدد "Review + create".
- حدد إنشاء.
سيكون لديك الآن Key Vault ومثيل 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 ونشرها
هام
يتطلب هذا القالب أن يكون مخزن المفاتيح وخادم SQL وAzure Function في نفس مجموعة الموارد.
بعد ذلك، قم بإنشاء تطبيق دالة بهوية مدارة من قبل النظام، بالإضافة إلى المكونات المطلوبة الأخرى، ونشر وظائف تدوير كلمة مرور خادم SQL
يتطلب تطبيق الوظائف هذه المكونات:
- خطة Azure App Service
- تطبيق دالة مع وظائف تدوير كلمة مرور SQL مع مشغل الحدث ومشغل http
- حساب تخزين مطلوب لإدارة مشغل تطبيق الوظائف
- نهج وصول لهوية تطبيق الوظائف للوصول إلى الأسرار في Key Vault
- اشتراك حدث Event Grid لحدث SecretNearExpiry
حدد ارتباط توزيع قالب Azure:
في قائمة Resource group ، حدد akvrotation.
في SQL Server Name، اكتب اسم SQL Server مع كلمة المرور للتدوير
في Key Vault Name، اكتب اسم key vault
في Function App Name، اكتب اسم تطبيق الدالة
في الاسم السري، اكتب اسما سريا حيث سيتم تخزين كلمة المرور
في Repo Url، اكتب رمز الدالة GitHub location (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp.git)
حدد "Review + create".
حدد إنشاء.
بعد إكمال الخطوات السابقة، سيكون لديك حساب تخزين ومزرعة خوادم والتطبيق الوظيفي. يمكنك التحقق من هذا الإعداد في 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، راجع إنشاء تطبيق دالة من مدخل Microsoft Azure، وكيفية استخدام الهوية المدارة لخدمة التطبيقات ووظائف Azure، وتعيين نهج الوصول إلى Key Vault باستخدام مدخل Microsoft Azure.
دالة التدوير
تستخدم وظيفة الخطوة السابقة التي تم نشرها في دالة الخطوة السابقة حدثا لتشغيل تدوير البيانات السرية عن طريق تحديث 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
تعيين نهج الوصول لمنح أذونات إدارة البيانات السرية للمستخدمين:
az keyvault set-policy --upn <email-address-of-user> --name akvrotation-kv --secret-permissions set delete get list
إنشاء سر جديد مع العلامات التي تحتوي على معرف مورد SQL Server واسم تسجيل الدخول إلى SQL Server وفترة صلاحية السر بالأيام. أدخل اسما لكلمة المرور السرية الأولية من قاعدة بيانات SQL (في مثالنا "Simple123") وقم بتضمين تاريخ انتهاء الصلاحية الذي تم تعيينه للغد.
$tomorrowDate = (get-date).AddDays(+1).ToString("yyy-MM-ddThh:mm:ssZ")
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 دقيقة، ما سيؤدي بدوره إلى تشغيل الدالة لتدوير السر.
الاختبار والتحقق
للتحقق من تدوير البيانات السرية، انتقل إلى Key Vault>Secrets:
افتح سر sqlPassword واعرض الإصدارات الأصلية والمدارة:
أنشئ تطبيق ويب
للتحقق من بيانات اعتماد SQL، قم بإنشاء تطبيق ويب. سيحصل تطبيق الويب هذا على السر من Key Vault، ويستخرج معلومات قاعدة بيانات SQL وبيانات الاعتماد من السر، ويختبر الاتصال ب SQL Server.
يتطلب تطبيق الويب هذه المكونات:
- تطبيق ويب بهوية مدارة من قبل النظام
- نهج وصول للوصول إلى الأسرار في Key Vault عبر الهوية المدارة لتطبيق الويب
حدد ارتباط توزيع قالب Azure:
حدد مجموعة موارد akvrotation .
في SQL Server Name، اكتب اسم SQL Server مع كلمة المرور للتدوير
في Key Vault Name، اكتب اسم key vault
في الاسم السري، اكتب اسما سريا حيث يتم تخزين كلمة المرور
في Repo Url، اكتب رمز تطبيق الويب موقع GitHub (https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp-WebApp.git)
حدد "Review + create".
حدد إنشاء.
فتح تطبيق الويب
انتقل إلى عنوان URL للتطبيق المنشور:
'https://akvrotation-app.azurewebsites.net/'
عند فتح التطبيق في المستعرض، سترى القيمة السرية التي تم إنشاؤها وقيمة قاعدة بيانات متصلةبالقيمة true.