مشاركة عبر


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

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

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

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

ملاحظة

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

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

رسم تخطيطي يوضح حل الاستدارة.

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

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

المتطلبات

ملاحظة

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

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

الارتباط المسمى 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 App Service
  • حساب تخزين لإدارة مشغلات تطبيق الوظائف
  • نهج وصول للوصول إلى الأسرار في Key Vault
  • دور Storage Account Key Operator Service المعين لتطبيق الوظائف حتى يتمكن من الوصول إلى مفاتيح الوصول إلى حساب التخزين
  • دالة تدوير المفتاح مع مشغل حدث ومشغل 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 إعادة إنشائه:

لقطة شاشة تعرض إخراج الأمر A Z keyvault secret show لحساب التخزين الأول.

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

az storage account keys list -n vaultrotationstorage 

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

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

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

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

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

  • دور Storage Account Key Operator Service المعين لتطبيق الوظائف حتى يتمكن من الوصول إلى مفاتيح الوصول إلى حساب التخزين.
  • اشتراك حدث 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

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

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 إعادة إنشائه:

لقطة شاشة تعرض إخراج الأمر A Z keyvault secret show لحساب التخزين الثاني.

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

az storage account keys list -n vaultrotationstorage 

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

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

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

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

وظائف تدوير Key Vault لمجموعتين من بيانات الاعتماد

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

ملاحظة

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

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