إدارة البيانات السرية المشفرة في تطبيقات Service Fabric

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

يتضمن استخدام البيانات السرية المشفرة في تطبيق Service Fabric ثلاث خطوات:

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

إعداد شهادة تشفير وتشفير البيانات السرية

يختلف إعداد شهادة تشفير واستخدامها لتشفير البيانات السرية بين Windows وLinux.

تحديد البيانات السرية المشفرة في أحد التطبيقات

تصف الخطوة السابقة كيفية تشفير بيانات سرية بشهادة وإنتاج سلسلة مشفرة بالأساس 64 لاستخدامها في أحد التطبيقات. يمكن تحديد هذه السلسلة المشفرة بالأساس 64 على هيئة معلمة مشفرة في Settings.xml للخدمة أو على هيئة environment variable مشفرة في ServiceManifest.xml الخاص بالخدمة.

حدد parameter مشفرة في ملف تكوين Settings.xml للخدمة الخاصة بك مع تعيين السمة IsEncrypted على true:

<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MySettings">
    <Parameter Name="MySecret" IsEncrypted="true" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
  </Section>
</Settings>

حدد متغير بيئة مشفراً في ملف ServiceManifest.xml للخدمة الخاصة بك مع تعيين السمة Type على Encrypted:

<CodePackage Name="Code" Version="1.0.0">
  <EnvironmentVariables>
    <EnvironmentVariable Name="MyEnvVariable" Type="Encrypted" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
  </EnvironmentVariables>
</CodePackage>

يجب أيضاً تضمين البيانات السرية في تطبيق Service Fabric الخاص بك عن طريق تحديد شهادة في بيان التطبيق. أضف عنصر SecretsCertificate إلى ApplicationManifest.xml وقم بتضمين بصمة الإبهام للشهادة المطلوبة.

<ApplicationManifest … >
  ...
  <Certificates>
    <SecretsCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbrint]"/>
  </Certificates>
</ApplicationManifest>

ملاحظة

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

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

ضخ البيانات السرية التطبيق في مثيلات التطبيق

من الناحية المثالية، يجب أن يكون النشر في البيئات المختلفة آلياً قدر الإمكان. يمكن تحقيق ذلك عن طريق إجراء تشفير سري في بيئة بناء وتوفير البيانات السرية المشفرة كمعلمات عند إنشاء مثيلات التطبيق.

استخدم المعلمات القابلة للتجاوز في Settings.xml

يسمح ملف التكوين Settings.xml بالمعلمات القابلة للتجاوز التي يمكن توفيرها في وقت إنشاء التطبيق. استخدم السمة MustOverride بدلاً من توفير قيمة للمعلمة:

<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Section Name="MySettings">
    <Parameter Name="MySecret" IsEncrypted="true" Value="" MustOverride="true" />
  </Section>
</Settings>

لتجاوز القيم في Settings.xml، قم بتعريف معلمة تجاوز للخدمة في ApplicationManifest.xml:

<ApplicationManifest ... >
  <Parameters>
    <Parameter Name="MySecret" DefaultValue="" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides>
      <ConfigOverride Name="Config">
        <Settings>
          <Section Name="MySettings">
            <Parameter Name="MySecret" Value="[MySecret]" IsEncrypted="true" />
          </Section>
        </Settings>
      </ConfigOverride>
    </ConfigOverrides>
  </ServiceManifestImport>

يمكن الآن تحديد القيمة على أنها معلمة تطبيق عند إنشاء مثيل للتطبيق. يمكن برمجة إنشاء مثيل تطبيق باستخدام PowerShell، أو كتابته بلغة C #، لسهولة التكامل في عملية الإنشاء.

باستخدام PowerShell، يتم توفير المعلمة للأمر New-ServiceFabricApplication على هيئة جدول التجزئة:

New-ServiceFabricApplication -ApplicationName fabric:/MyApp -ApplicationTypeName MyAppType -ApplicationTypeVersion 1.0.0 -ApplicationParameter @{"MySecret" = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM="}

باستخدام C#، يتم تحديد معلمات التطبيق في ApplicationDescription على هيئة NameValueCollection:

FabricClient fabricClient = new FabricClient();

NameValueCollection applicationParameters = new NameValueCollection();
applicationParameters["MySecret"] = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=";

ApplicationDescription applicationDescription = new ApplicationDescription(
    applicationName: new Uri("fabric:/MyApp"),
    applicationTypeName: "MyAppType",
    applicationTypeVersion: "1.0.0",
    applicationParameters: applicationParameters)
);

await fabricClient.ApplicationManager.CreateApplicationAsync(applicationDescription);

فك تشفير البيانات السرية من التعليمة البرمجية للخدمة

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

// Access decrypted parameters from Settings.xml
ConfigurationPackage configPackage = FabricRuntime.GetActivationContext().GetConfigurationPackageObject("Config");
bool MySecretIsEncrypted = configPackage.Settings.Sections["MySettings"].Parameters["MySecret"].IsEncrypted;
if (MySecretIsEncrypted)
{
    SecureString MySecretDecryptedValue = configPackage.Settings.Sections["MySettings"].Parameters["MySecret"].DecryptValue();
}

// Access decrypted environment variables from ServiceManifest.xml
// Note: you do not have to call any explicit API to decrypt the environment variable.
string MyEnvVariable = Environment.GetEnvironmentVariable("MyEnvVariable");

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