أتمتة دوران البيانات السرية للموارد التي تحتوي على مجموعتين من بيانات اعتماد المصادقة
تتمثل أفضل طريقة للمصادقة على خدمات Azure في استخدام هوية مدارة، ولكن تتوافر بعض السيناريوهات التي لا تُشكل خيارًا. في هذه الحالات، تُستخدم مفاتيح الوصول أو كلمات المرور. عليك تدوير مفاتيح الوصول وكلمات المرور بشكل متكرر.
يوضح هذا البرنامج التعليمي كيفية أتمتة التدوير الدوري للبيانات السرية لقواعد البيانات والخدمات التي تستخدم مجموعتين من بيانات اعتماد المصادقة. فعلى وجه التحديد، يوضح هذا البرنامج التعليمي كيفية تدوير مفاتيح حساب تخزين Azure المخزنة في Azure Key Vault كبيانات سرية. ستستخدم دالة تم تشغيلها بواسطة إشعار Azure Event Grid.
إشعار
بالنسبة لخدمات حساب التخزين، يوصى باستخدام معرف Microsoft Entra لتخويل الطلبات. لمزيد من المعلومات، راجع تخويل الوصول إلى الكائنات الثنائية كبيرة الحجم باستخدام معرف Microsoft Entra. بعض الخدمات تتطلب سلاسل اتصال حساب التخزين بجانب مفاتيح الوصول. ولهذا السيناريو، نوصي بهذا الحل.
إليك حل الدوران الموضح في هذا البرنامج التعليمي:
في هذا الحل، يخزن Azure Key Vault مفاتيح الوصول الفردية لحساب التخزين كإصدارات لنفس البيانات السرية، بالتناوب بين المفتاح الأساسي والثانوي في الإصدارات اللاحقة. وعند تخزين مفتاح وصول واحد في أحدث إصدار من البيانات السرية، يُحدد المفتاح البديل ويُضاف إلى مفتاح Key Vault كأحدث إصدار جديد من البيانات السرية يوفر الحل دورة دوران التطبيق بالكامل لتحديثها إلى أحدث مفتاح مجدد.
- ينشر Key Vault، قبل ثلاثين يومًا من تاريخ انتهاء صلاحية أي بيانات سرية، حدثًا أوشك على انتهاء صلاحيته إلى شبكة الحدث.
- تقوم شبكة الأحداث بفحص اشتراكات الحدث وتستخدم HTTP POST لطلب نقطة نهاية تطبيق الدالة المشتركة في الحدث.
- يعرف تطبيق الدالة المفتاح البديل (وليس آخر مفتاح) ويطلب حساب التخزين لإعادة إنشائه.
- يضيف تطبيق الدالة المفتاح الجديد المجدد إلى Azure Key Vault باعتباره الإصدار الجديد من البيانات السرية.
المتطلبات الأساسية
- اشتراك Azure. أنشئ حسابًا مجانًا.
- Azure Cloud Shell. يستخدم هذا البرنامج التعليمي portal Cloud Shell with PowerShell env
- Azure Key Vault.
- حسابا تخزين Azure.
إشعار
يبطل تدوير مفتاح حساب التخزين المشترك توقيع الوصول المشترك على مستوى الحساب (SAS) الذي تم إنشاؤه استنادًا إلى هذا المفتاح. بعد تدوير مفتاح حساب التخزين، يتعين عليك إعادة إنشاء رموز SAS المميزة على مستوى الحساب لتجنب تعطيل التطبيقات.
يمكنك استخدام رابط النشر هذا إن لم يتوافر لديك key vault حالي أو حسابات تخزين:
ضمن Resource group، اختر Create new. قم بتسمية دوران مخزن المجموعة ثم حدد موافق.
حدد "Review + create".
حدد إنشاء.
سيكون لديك الآن 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
حدد رابط توزيع قالب Azure:
في قائمة Resource group ، حدد vaultrotation.
في المربع Storage Account RG، أدخل اسم مجموعة الموارد التي يوجد بها حساب التخزين الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان حساب التخزين الخاص بك موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.
في المربع اسم حساب التخزين، أدخل اسم حساب التخزين الذي يحتوي على مفاتيح الوصول للتدوير. احتفظ بالقيمة الافتراضية [concat(resourceGroup().name, 'storage')] إذا كنت تستخدم حساب التخزين الذي تم إنشاؤه في المتطلبات الأساسية.
في المربع Key Vault RG، أدخل اسم مجموعة الموارد التي يوجد بها مخزن المفاتيح الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان مخزن المفاتيح موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.
في المربع Key Vault Name ، أدخل اسم key vault. احتفظ بالقيمة الافتراضية [concat(resourceGroup().name, '-kv')] إذا كنت تستخدم مخزن المفاتيح الذي تم إنشاؤه في المتطلبات الأساسية.
في المربع نوع خطة خدمة التطبيقات، حدد خطة الاستضافة. الخطة المتميزة مطلوبة فقط عندما يكون مخزن المفاتيح خلف جدار الحماية.
في المربع Function App Name ، أدخل اسم تطبيق الوظائف.
في المربع اسم السر، أدخل اسم السر حيث ستقوم بتخزين مفاتيح الوصول.
في مربع Repo URL ، أدخل موقع GitHub للتعليمات البرمجية للدالة. في هذا البرنامج التعليمي، يمكنك استخدام https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .
حدد "Review + create".
حدد إنشاء.
بعد إكمال الخطوات السابقة، سيكون لديك حساب تخزين وكتلة خوادم وتطبيق دالة و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
إعادة إنشائه:
استرداد مفاتيح الوصول لمقارنة القيم:
az storage account keys list -n vaultrotationstorage
لاحظ أن value
المفتاح هو نفس السر في key vault:
استخدام وظيفة الدوران الحالية لحسابات تخزين متعددة
يمكنك إعادة استخدام نفس تطبيق الدالة لتدوير المفاتيح لاستخدامها في حسابات تخزين متعددة.
لإضافة مفاتيح حساب تخزين إلى دالة موجودة للتدوير، تحتاج إلى:
- دور خدمة مشغل مفتاح حساب التخزين المعين لتطبيق الدالة حتى يتمكن من الوصول إلى مفاتيح الوصول إلى حساب التخزين.
- اشتراك حدث Event Grid لحدث SecretNearExpiry .
حدد رابط توزيع قالب Azure:
في قائمة Resource group ، حدد vaultrotation.
في المربع Storage Account RG، أدخل اسم مجموعة الموارد التي يوجد بها حساب التخزين الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان حساب التخزين الخاص بك موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.
في المربع اسم حساب التخزين، أدخل اسم حساب التخزين الذي يحتوي على مفاتيح الوصول للتدوير.
في المربع Key Vault RG، أدخل اسم مجموعة الموارد التي يوجد بها مخزن المفاتيح الخاص بك. احتفظ بالقيمة الافتراضية [resourceGroup().name] إذا كان مخزن المفاتيح موجودا بالفعل في نفس مجموعة الموارد حيث ستقوم بنشر دالة تدوير المفتاح.
في المربع Key Vault Name ، أدخل اسم key vault.
في المربع Function App Name ، أدخل اسم تطبيق الوظائف.
في المربع اسم السر، أدخل اسم السر حيث ستقوم بتخزين مفاتيح الوصول.
حدد "Review + create".
حدد إنشاء.
إضافة مفتاح الوصول إلى حساب التخزين إلى بيانات 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
إعادة إنشائه:
استرداد مفاتيح الوصول لمقارنة القيم:
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 دون ضمان من أي نوع.