أتمتة دوران البيانات السرية للموارد التي تحتوي على مجموعتين من بيانات اعتماد المصادقة

تتمثل أفضل طريقة للمصادقة على خدمات Azure في استخدام هوية مدارة، ولكن تتوافر بعض السيناريوهات التي لا تُشكل خيارًا. في هذه الحالات، تُستخدم مفاتيح الوصول أو كلمات المرور. عليك تدوير مفاتيح الوصول وكلمات المرور بشكل متكرر.

يوضح هذا البرنامج التعليمي كيفية أتمتة التدوير الدوري للبيانات السرية لقواعد البيانات والخدمات التي تستخدم مجموعتين من بيانات اعتماد المصادقة. فعلى وجه التحديد، يوضح هذا البرنامج التعليمي كيفية تدوير مفاتيح حساب تخزين Azure المخزنة في Azure Key Vault كبيانات سرية. ستستخدم دالة تم تشغيلها بواسطة إشعار Azure Event Grid.

إشعار

بالنسبة لخدمات حساب التخزين، يوصى باستخدام معرف Microsoft Entra لتخويل الطلبات. لمزيد من المعلومات، راجع تخويل الوصول إلى الكائنات الثنائية كبيرة الحجم باستخدام معرف Microsoft Entra. بعض الخدمات تتطلب سلاسل اتصال حساب التخزين بجانب مفاتيح الوصول. ولهذا السيناريو، نوصي بهذا الحل.

إليك حل الدوران الموضح في هذا البرنامج التعليمي:

رسم توضيحي يوضح حل الدوران

في هذا الحل، يخزن Azure Key Vault مفاتيح الوصول الفردية لحساب التخزين كإصدارات لنفس البيانات السرية، بالتناوب بين المفتاح الأساسي والثانوي في الإصدارات اللاحقة. وعند تخزين مفتاح وصول واحد في أحدث إصدار من البيانات السرية، يُحدد المفتاح البديل ويُضاف إلى مفتاح Key Vault كأحدث إصدار جديد من البيانات السرية يوفر الحل دورة دوران التطبيق بالكامل لتحديثها إلى أحدث مفتاح مجدد.

  1. ينشر Key Vault، قبل ثلاثين يومًا من تاريخ انتهاء صلاحية أي بيانات سرية، حدثًا أوشك على انتهاء صلاحيته إلى شبكة الحدث.
  2. تقوم شبكة الأحداث بفحص اشتراكات الحدث وتستخدم HTTP POST لطلب نقطة نهاية تطبيق الدالة المشتركة في الحدث.
  3. يعرف تطبيق الدالة المفتاح البديل (وليس آخر مفتاح) ويطلب حساب التخزين لإعادة إنشائه.
  4. يضيف تطبيق الدالة المفتاح الجديد المجدد إلى Azure Key Vault باعتباره الإصدار الجديد من البيانات السرية.

المتطلبات الأساسية

إشعار

يبطل تدوير مفتاح حساب التخزين المشترك توقيع الوصول المشترك على مستوى الحساب (SAS) الذي تم إنشاؤه استنادًا إلى هذا المفتاح. بعد تدوير مفتاح حساب التخزين، يتعين عليك إعادة إنشاء رموز SAS المميزة على مستوى الحساب لتجنب تعطيل التطبيقات.

يمكنك استخدام رابط النشر هذا إن لم يتوافر لديك key vault حالي أو حسابات تخزين:

الارتباط المسمى Deploy to Azure.

  1. ضمن ⁧⁩Resource group⁦⁩⁧⁩، اختر ⁧⁩Create new⁧⁩. قم بتسمية دوران مخزن المجموعة ثم حدد موافق.

  2. حدد "Review + create".

  3. حدد إنشاء.

    لقطة شاشة توضح كيفية إنشاء مجموعة موارد جديدة.

سيكون لديك الآن key vault وحسابين للتخزين. يمكنك التحقق من هذا الإعداد في Azure CLI أو Azure PowerShell عن طريق تشغيل هذا الأمر:

az resource list -o table -g vaultrotation

ستبدو النتائج مثل هذا المثال:

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
vaultrotation-kv         vaultrotation      westus      Microsoft.KeyVault/vaults
vaultrotationstorage     vaultrotation      westus      Microsoft.Storage/storageAccounts
vaultrotationstorage2    vaultrotation      westus      Microsoft.Storage/storageAccounts

إنشاء دالة دوران المفتاح ونشرها

بعد ذلك، ستقوم بإنشاء تطبيق دالة بهوية مدارة من خلال النظام بالإضافة إلى المكونات المطلوبة الأخرى. ستنشر كذلك دالة دوران لمفاتيح حساب التخزين.

تتطلب دالة دوران تطبيق دالة المكونات والتهيئة التاليين:

  • خطة خدمة تطبيق Azure
  • حساب تخزين لإدارة مشغلات تطبيق الدالة
  • نهج وصول إلى بالبيانات السرية للوصول في Key Vault
  • دور خدمة عامل تشغيل مفتاح حساب التخزين المعين لتطبيق الدالة بغرض الوصول إلى مفاتيح الوصول إلى حساب التخزين
  • دالة دوران مفتاح مع مشغل حدث ومشغل HTTP (دوران عند الطلب)
  • اشتراك حدث Event Grid لحدث SecretNearExpiry
  1. حدد رابط توزيع قالب Azure:

    ارتباط توزيع قالب Azure.

  2. في قائمة Resource group ، حدد vaultrotation.

  3. في المربع Storage Account RG، أدخل اسم مجموعة الموارد التي يوجد بها حساب التخزين الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان حساب التخزين الخاص بك موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.

  4. في المربع اسم حساب التخزين، أدخل اسم حساب التخزين الذي يحتوي على مفاتيح الوصول للتدوير. احتفظ بالقيمة الافتراضية [concat(resourceGroup().name, 'storage')] إذا كنت تستخدم حساب التخزين الذي تم إنشاؤه في المتطلبات الأساسية.

  5. في المربع Key Vault RG، أدخل اسم مجموعة الموارد التي يوجد بها مخزن المفاتيح الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان مخزن المفاتيح موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.

  6. في المربع Key Vault Name ، أدخل اسم key vault. احتفظ بالقيمة الافتراضية [concat(resourceGroup().name, '-kv')] إذا كنت تستخدم مخزن المفاتيح الذي تم إنشاؤه في المتطلبات الأساسية.

  7. في المربع نوع خطة خدمة التطبيقات، حدد خطة الاستضافة. الخطة المتميزة مطلوبة فقط عندما يكون مخزن المفاتيح خلف جدار الحماية.

  8. في المربع Function App Name ، أدخل اسم تطبيق الوظائف.

  9. في المربع اسم السر، أدخل اسم السر حيث ستقوم بتخزين مفاتيح الوصول.

  10. في مربع Repo URL ، أدخل موقع GitHub للتعليمات البرمجية للدالة. في هذا البرنامج التعليمي، يمكنك استخدام https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .

  11. حدد "Review + create".

  12. حدد إنشاء.

    لقطة شاشة توضح كيفية إنشاء دالة ونشرها.

بعد إكمال الخطوات السابقة، سيكون لديك حساب تخزين وكتلة خوادم وتطبيق دالة وApplication Insights. عند اكتمال النشر، ستظهر هذه الصفحة:

لقطة شاشة تظهر صفحة اكتمال النشر.

إشعار

إذا واجهت فشلا، يمكنك تحديد إعادة النشر لإنهاء نشر المكونات.

يمكنك العثور على قوالب النشر والرمز لدالة التدوير في نماذج Azure.

إضافة مفاتيح الوصول إلى حساب التخزين إلى بيانات Key Vault السرية

أولا، قم بتعيين نهج الوصول الخاص بك لمنح أذونات إدارة البيانات السرية لمدير المستخدم الخاص بك:

az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list

يمكنك الآن إنشاء بيانات سرية باستخدام مفتاح وصول إلى حساب تخزين كقيمة له. ستحتاج أيضًا إلى معرف مورد حساب التخزين وفترة صلاحية البيانات السرية ومعرف المفتاح لإضافته إلى البيانات السرية حتى تتمكن دالة الدوران من إعادة إنشاء المفتاح في حساب التخزين.

تحديد معرف مورد حساب التخزين. يمكنك العثور على هذه القيمة في الخاصية id .

az storage account show -n vaultrotationstorage

اسرد مفاتيح الوصول إلى حساب التخزين حتى تتمكن من الحصول على قيم المفاتيح:

az storage account keys list -n vaultrotationstorage

أضف بيانات سرية إلى key vault مع فترة صلاحية لمدة 60 يوما، ومعرف مورد حساب التخزين، ولأغراض العرض التوضيحي لتشغيل التدوير، قم بتعيين تاريخ انتهاء الصلاحية على الفور إلى الغد. قم بتشغيل هذا الأمر، باستخدام القيم التي تم استردادها من أجل key1Value وstorageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

سيؤدي هذا السر إلى تشغيل SecretNearExpiry الحدث في غضون عدة دقائق. سيؤدي هذا الحدث بدوره إلى تشغيل الدالة لتدوير البيانات السرية مع تعيين انتهاء الصلاحية إلى 60 يومًا. في هذا التكوين، سيتم تشغيل حدث "SecretNearExpiry" كل 30 يوما (30 يوما قبل انتهاء الصلاحية) وستتناوب وظيفة التدوير بين key1 وkey2.

يمكنك التحقق من إعادة تجديد مفاتيح الوصول عن طريق استرداد مفتاح حساب التخزين والبيانات السرية في Key Vault ومقارنتهما.

استخدم هذا الأمر للحصول على المعلومات السرية:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey

لاحظ أنه CredentialId تم تحديثه إلى البديل keyName ويتم value إعادة إنشائه:

لقطة شاشة توضح نتائج keyvault من الألف إلى الياء لحساب التخزين الأول.

استرداد مفاتيح الوصول لمقارنة القيم:

az storage account keys list -n vaultrotationstorage 

لاحظ أن value المفتاح هو نفس السر في key vault:

لقطة شاشة توضح مخرجات قائمة مفاتيح حساب التخزين من الألف إلى الياء في حساب التخزين الأول.

استخدام وظيفة الدوران الحالية لحسابات تخزين متعددة

يمكنك إعادة استخدام نفس تطبيق الدالة لتدوير المفاتيح لاستخدامها في حسابات تخزين متعددة.

لإضافة مفاتيح حساب تخزين إلى دالة موجودة للتدوير، تحتاج إلى:

  • دور خدمة مشغل مفتاح حساب التخزين المعين لتطبيق الدالة حتى يتمكن من الوصول إلى مفاتيح الوصول إلى حساب التخزين.
  • اشتراك حدث Event Grid لحدث SecretNearExpiry .
  1. حدد رابط توزيع قالب Azure:

    ارتباط توزيع قالب Azure.

  2. في قائمة Resource group ، حدد vaultrotation.

  3. في المربع Storage Account RG، أدخل اسم مجموعة الموارد التي يوجد بها حساب التخزين الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان حساب التخزين الخاص بك موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.

  4. في المربع اسم حساب التخزين، أدخل اسم حساب التخزين الذي يحتوي على مفاتيح الوصول للتدوير.

  5. في المربع Key Vault RG، أدخل اسم مجموعة الموارد التي يوجد بها مخزن المفاتيح الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان مخزن المفاتيح موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.

  6. في المربع Key Vault Name ، أدخل اسم key vault.

  7. في المربع Function App Name ، أدخل اسم تطبيق الوظائف.

  8. في المربع اسم السر، أدخل اسم السر حيث ستقوم بتخزين مفاتيح الوصول.

  9. حدد "Review + create".

  10. حدد إنشاء.

    لقطة شاشة توضح كيفية إنشاء حساب تخزين إضافي.

إضافة مفتاح الوصول إلى حساب التخزين إلى بيانات Key Vault السرية

تحديد معرف مورد حساب التخزين. يمكنك العثور على هذه القيمة في الخاصية id .

az storage account show -n vaultrotationstorage2

إدراج مفاتيح الوصول إلى حساب التخزين حتى تتمكن من الحصول على قيمة المفتاح 2:

az storage account keys list -n vaultrotationstorage2

أضف بيانات سرية إلى key vault مع فترة صلاحية لمدة 60 يوما، ومعرف مورد حساب التخزين، ولأغراض العرض التوضيحي لتشغيل التدوير، قم بتعيين تاريخ انتهاء الصلاحية على الفور إلى الغد. قم بتشغيل هذا الأمر، باستخدام القيم التي تم استردادها من أجل key2Value وstorageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

استخدم هذا الأمر للحصول على المعلومات السرية:

az keyvault secret show --vault-name vaultrotation-kv --name storageKey2

لاحظ أنه CredentialId تم تحديثه إلى البديل keyName ويتم value إعادة إنشائه:

لقطة شاشة تظهر نتائج أمر عرض البيانات السرية لتطبيق keyvault من الألف حتى الياء في حساب التخزين الثاني.

استرداد مفاتيح الوصول لمقارنة القيم:

az storage account keys list -n vaultrotationstorage 

لاحظ أن value المفتاح هو نفس السر في key vault:

لقطة شاشة توضح نتائج أمر قائمة مفاتيح حساب التخزين من الألف إلى الياء لحساب التخزين الثاني.

تعطيل الدوران للبيانات السرية

يمكنك تعطيل تدوير البيانات السرية ببساطة عن طريق حذف اشتراك Event Grid لهذا السر. استخدم الأمر cmdlet Azure PowerShell Remove-AzEventGridSubscription أو الأمر Azure CLI az event grid event--subscription delete.

دوال دوران Key Vault الرئيسية لمجموعتين من بيانات الاعتماد

قالب دوال الدوران لمجموعتين من بيانات الاعتماد والعديد من الدوال الجاهزة للاستخدام:

إشعار

يتم إنشاء دالات التدوير هذه من قبل عضو في المجتمع وليس من قبل Microsoft. وظائف المجتمع غير مدعومة ضمن أي برنامج أو خدمة دعم Microsoft، ويتم توفيرها AS IS دون ضمان من أي نوع.

الخطوات التالية