أدِر البيانات السرية في قالب ARM خاصتك من خلال القراءة من Azure Key Vault

مكتمل

تشير البنية الأساسية باعتبارها رمزًا (IaC) إلى وصف متطلبات البنية الأساسية خاصتك بوصفها ملفات نصية يمكن للبشر قراءتها. تعد قوالب Azure Resource Manager ‏(ARM) شكلًا من أشكال IaC.

تمامًا مثل رمز التطبيق، يمكنك إدارة رمز البنية الأساسية خاصتك في نظام التحكم بالإصدار مثل Git. يتيح لك إجراء ذلك التعاون مع الآخرين وتتبع التغييرات التي تطرأ على متطلبات البنية الأساسية خاصتك أثناء تطورها.

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

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

يساعد Azure Key Vault على حماية المعلومات الحساسة

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

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

  • التحكم في الوصول استنادًا إلى الدور. يمكنك إدارة مخزنك الرئيسي باستخدام أدوار مختلفة، حتى تتمكن من التأكد من أنه قابل للاستخدام من خلال التطبيقات بالإضافة إلى مستويات مختلفة من المسؤولين.

  • السماح للمستخدمين والتطبيقات. يمكنك تكوين مخزنك الرئيسي بحيث يمكن لكل من المستخدمين المحددين وكذلك التطبيقات الوصول إلى المخزن الرئيسي. بالنسبة للتطبيقات، يمكنك إنشاء كيان الخدمة. يمكنك تكوين مخزنك الرئيسي فعليًا بحيث لا تتمكن سوى كيانات الخدمة من الوصول إليه.

    إشعار

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

  • يمكن التفاعل مع قالب ARM. أثناء توزيع قالب ARM، يمكنك القراءة من مخزن رئيسي. هناك القليل من التكوين اللازم لجعله يعمل. يقدم القسم التالي مزيدًا من التفاصيل.

تكوين الأذونات

لقد اخترت Key Vault باعتباره خدمة حيث ستُخزِن بيانات اعتمادك. من هناك، تريد أن تكون قادرًا على قراءة البيانات السرية أثناء التوزيع بحيث، على سبيل المثال، يمكنك تعيين كلمة مرور الجهاز الظاهري.

هناك العديد من خطوات التكوين التي تحتاج إلى تنفيذها لإعداد Key Vault بحيث يمكن قراءتها أثناء التوزيع. الخطوات هي:

  1. تمكين Key Vault للتوزيع. يلزم السماح لـ Key Vault بأن تُقرأ أثناء التوزيع. يمكنك تمرير هذا الإعداد عند الإنشاء أو تعديله لاحقًا.

  2. يحتاج المستخدم إلى إذن توزيع على مجموعة الموارد. هذا لا يختلف عن عمليات التوزيع الأخرى. ومع ذلك، إذا لم تنشئ مجموعة الموارد، يمكنك تعيين دورًا للتأكد من أنه يمكنك التوزيع إليها.

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

تكوين Key Vault للتوزيع

كوِّن مثيلك لـ Key Vault بحيث يمكن قراءة بيانات الاعتماد منه أثناء توزيع قالب ARM.

لتمكين Key Vault للتوزيع، هناك إعداد يمكنك تمريره، إما أثناء إنشاء مثيل Key Vault أو شيء يمكنك تعديله في وقتٍ لاحق. في PowerShell، إنه مفتاح يُسمى -EnabledForTemplateDeployment. في CLI Azure، إنها وسيطة تُسمى --enabled-for-template-deployment والتي تحتاج إلى القيمة true لتمريرها أيضًا.

إشعار

تتطلب Azure CLI أيضًا تمرير منطقي مع القيمة true.

يحتاج المستخدم إلى إذن توزيع على Key Vault ومجموعة الموارد

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

  • Owner: إذا أنشأت المخزن الرئيسي، يكون لديك هذا الدور تلقائيًا.
  • Contributorيمنحك هذا الدور إمكانية الوصول لإدارة جميع البيانات السرية. إذا لم تكن قد أنشأت مخزنًا رئيسيًا، فإن أسهل أسلوب هو أن تمنح نفسك الدور Contributor.

خيار آخر هو إنشاء دور مخصص وتعيينه، والتأكد من أن هذا الدور يحتوي على إذن Microsoft.KeyVault/vaults/deploy/action.

تكوين ملف معلمة التوزيع

بدلًا من تحديد كل معلمة وزوج قيم المفاتيح أثناء التوزيع، يمكنك استخدام ملف معلمة.

في ملف المعلمة هذا، يُحدد أي مخزن رئيسي بيانات سرية في ذلك المخزن الرئيسي أنت تهتم به. يمكنك ذلك عن طريق تعديل معلمة، ثم تحدث قالب التوزيع لاستخدام هذه المعلمة.

إشعار

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

كوِّن مخزنًا رئيسيًا وبيانًا سريًا للمعلمة

في ملف المعلمة، وبالنسبة لمعلمة معينة، أشِر إلى مخزن رئيسي لديك إذن توزيع له. بعد ذلك، حدِد ما البيانات السرية الذي تهتم به. أنت تشير إلى البيانات السرية بالاسم. أثناء التوزيع، سيُحل هذا التكوين في قيمة البيانات السرية. فيما يلي معلمة تُسمى myPassword يجري تكوينها لاستخدام مخزن رئيسي محدد، واستخدام بيانات سرية يُسمى databaseSecret.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

في JSON السابق، يمكنك تحديد المعرف الكامل إلى المخزن الرئيسي، وتواصل للسؤال عن البيانات السرية databaseSecret. ثم تُستخرج قيمة هذا البيانات السرية وتعيينه إلى المعلمة myPassword.

تعيين المعلمة إلى كلمة مرور المورد

لا تتعلق هذه الخطوة بالمخزن الرئيسي. يتعلق الأمر بضمان أن المورد المقصود يستخدم المعلمة التي كُوِنت لقراءة قيمة البيانات السرية من المخزن الرئيسي. فيما يلي قصاصة برمجية مختصرة من جهاز ظاهري، في ملف القالب، تظهر adminPassword قراءة العنصر من المعلمة myPassword. ستُقرأ قيمة السر بعد ذلك من المخزن الرئيسي في وقت التوزيع، وستُخصص للعنصر. adminPassword.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}