دعم KeyVaultReference لـService Fabric Applications الموزعة في Azure

يتمثل أحد التحديات المتداولة عند إنشاء التطبيقات السحابية في كيفية توزيع البيانات السرية بشكل آمن على تطبيقاتك. على سبيل المثال، قد ترغب في توزيع مفتاح قاعدة بيانات للتطبيق الخاص بك دون الكشف عن المفتاح أثناء البنية الأساسية أو عامل التشغيل. يسهّل دعم Service Fabric KeyVaultReference توزيع البيانات السرية إلى تطبيقاتك ببساطة عن طريق الرجوع إلى عنوان URL للبيانات السرية المخزنة في Key Vault. ستتعامل Service Fabric مع إحضار هذه البيانات السرية نيابةً عن Managed Identity للتطبيق الخاص بك، وتفعيل التطبيق مع البيانات السرية.

ملاحظة

دعم KeyVaultReference لـService Fabric Applications هو GA (خارج الإصدار الأولي) بدءاً من Service Fabric الإصدار 7.2 CU5. يوصى بالترقية إلى هذا الإصدار قبل استخدام هذه الميزة.

ملاحظة

يدعم دعم KeyVaultReference لـService Fabric Applications البيانات السرية ذات الإصدارات فقط. البيانات السرية عديمة الإصدار غير مدعومة. يجب أن يكون Key Vault في الاشتراك نفسه مثل نظام مجموعة نسيج الخدمة الخاصة بك.

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

  • Managed Identity لـService Fabric Applications

    دعم Service Fabric KeyVaultReference يستخدم Managed Identity لإحضار البيانات السرية نيابة عن التطبيق، لذلك يجب توزيع التطبيق الخاص بك عبر وتعيين هوية مُدارة. اتبع هذا المستند لتمكين الهوية المدارة لتطبيقك.

  • Central Secrets Store (CSS).

    Central Secrets Store (CSS) هو ذاكرة التخزين المؤقت للبيانات السرية المحلية المشفرة لـService Fabric. تستخدم هذه الميزة CSS لحماية البيانات السرية واستمرارها بعد أن يتم إحضارها من Key Vault. مطلوب أيضاً تمكين هذه الخدمة الاختيارية للنظام لاستخدام هذه الميزة. اتبع هذا المستند لتمكين وتكوين CSS.

  • منح إذن الوصول إلى الهوية المُدارة للتطبيق إلى keyvault

    ارجع إلى هذا المستند لمعرفة كيفية منح إذن الوصول إلى هوية مُدارة إلى keyvault. لاحظ أيضاً أنه في حالة استخدام الهوية المُدارة المعينة من النظام، فلن تُنشأ الهوية المدارة إلا بعد توزيع التطبيق. يمكن أن يؤدي ذلك إلى خلق حالة تعارض حيث يحاول التطبيق الوصول إلى البيانات السرية قبل منح الهوية إذن الوصول إلى المخزن. سيكون اسم هوية النظام المعين هو {cluster name}/{application name}/{service name}.

استخدم KeyVaultReferences في تطبيقك

يمكن استخدام KeyVaultReferences بعدة طرق

على هيئة متغير بيئة

<EnvironmentVariables>
      <EnvironmentVariable Name="MySecret" Type="KeyVaultReference" Value="<KeyVaultURL>"/>
</EnvironmentVariables>
string secret =  Environment.GetEnvironmentVariable("MySecret");

مثبتة على هيئة ملف في الحاوية الخاصة بك

  • أضف قسماً إلى settings.xml

    حدد معلمة MySecret بالنوع KeyVaultReference والقيمة <KeyVaultURL>

    <Section Name="MySecrets">
        <Parameter Name="MySecret" Type="KeyVaultReference" Value="<KeyVaultURL>"/>
    </Section>
    
  • أشِر إلى القسم الجديد في ApplicationManifest.xml in <ConfigPackagePolicies>

    <ServiceManifestImport>
        <Policies>
        <IdentityBindingPolicy ServiceIdentityRef="MyServiceMI" ApplicationIdentityRef="MyApplicationMI" />
        <ConfigPackagePolicies CodePackageRef="Code">
            <!--Linux container example-->
            <ConfigPackage Name="Config" SectionName="MySecrets" EnvironmentVariableName="SecretPath" MountPoint="/var/secrets"/>
            <!--Windows container example-->
            <!-- <ConfigPackage Name="Config" SectionName="dbsecrets" EnvironmentVariableName="SecretPath" MountPoint="C:\secrets"/> -->
        </ConfigPackagePolicies>
        </Policies>
    </ServiceManifestImport>
    
  • استخدام البيانات السرية من تعليمة الخدمة البرمجية

    ستكون كل معلمة مدرجة ضمن <Section Name=MySecrets> ملفاً ضمن المجلد المشار إليه بواسطة EnvironmentVariable SecretPath. توضح القصاصة البرمجية لـ#C أدناه كيفية قراءة MySecret من تطبيقك.

    string secretPath = Environment.GetEnvironmentVariable("SecretPath");
    using (StreamReader sr = new StreamReader(Path.Combine(secretPath, "MySecret"))) 
    {
        string secret =  sr.ReadToEnd();
    }
    

    ملاحظة

    يتحكم MountPoint في المجلد حيث سيتم إدخال الملفات التي تحتوي على قيم بيانات سرية.

على هيئة مرجع إلى كلمة مرور مستودع الحاوية

 <Policies>
      <ContainerHostPolicies CodePackageRef="Code">
        <RepositoryCredentials AccountName="MyACRUser" Type="KeyVaultReference" Password="<KeyVaultURL>"/>
      </ContainerHostPolicies>

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