تشغيل الخدمة كحساب مستخدم محلي أو حساب نظام محلي

باستخدام Azure Service Fabric، يمكنك تأمين التطبيقات التي يتم تشغيلها في نظام المجموعة ضمن حسابات المستخدمين المختلفة. بشكل افتراضي، يتم تشغيل التطبيقات الخاصة بـ Service Fabric ضمن الحساب الذي يتم تشغيل عملية Fabric.exe تحته. يوفر Service Fabric أيضًا القدرة على تشغيل التطبيقات ضمن الحساب الخاص بالمستخدم المحلي أو حساب النظام. أنواع حسابات النظام المحلي المدعومة هي ⁧⁩LocalUser⁧⁩ ،⁧⁩NetworkService⁧⁩،⁧⁩ LocalService⁧⁩ و⁧⁩ LocalSystem⁧⁩. إذا كنت تقوم بتشغيل Service Fabric على نظام مجموعة نافذة مستقلة، فإنه يمكنك تشغيل خدمة ضمن حسابات ⁧⁩مجال Active Directory ⁧⁩أو⁧⁩حسابات الخدمة المدارة للمجموعة⁧⁩.

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

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

ملاحظة

في حالة قمت بتطبيق نهج RunAs على خدمة وبيان الخدمة يعلن عن موارد نقطة النهاية باستخدام بروتوكول HTTP، يجب تحديد SecurityAccessPolicy. لمزيد من التفاصيل، راجع ⁧⁩تعيين نهج وصول أمان لنقاط نهاية HTTP وHTTPS⁧⁩.

تشغيل الخدمة كمستخدم محلي

تستطيع إنشاء مستخدم محلي يمكن استخدامه للمساعدة في تأمين خدمة داخل التطبيق. عند تحديد نوع حساب ⁧⁩LocalUser⁧⁩ في المقطع أساسيات بيان التطبيق، ينشئ Service Fabric حسابات المستخدمين المحليين على الأجهزة حيث يتم توزيع التطبيق. بشكل افتراضي، لا تحتوي هذه الحسابات على نفس الأسماء المحددة في بيان التطبيق (على سبيل المثال، ⁧⁩العميل 3⁧⁩ في مثال بيان التطبيق التالي). بدلاً من ذلك، يتم إنشاؤها بشكل حيوي ولها كلمات مرور عشوائية.

في المقطع ⁧⁩RunAsPolicy⁧⁩ لـ ⁧⁩ServiceManifestImport⁧⁩، حدد الحساب الخاص بالمستخدم من المقطع ⁧⁩المبادئ⁧⁩ لتشغيل حزمة التعليمات البرمجية للخدمة. يعرض المثال التالي كيفية إنشاء مستخدم محلي وتطبيق نهج RunAs على نقطة الإدخال الرئيسية:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application7Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="Customer3" EntryPointType="Main" />
    </Policies>
  </ServiceManifestImport>
  <DefaultServices>    
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
  <Principals>
    <Users>
      <User Name="Customer3" />
    </Users>
  </Principals>
</ApplicationManifest>

إنشاء مجموعة خاصة بمستخدمين محليين

يمكنك إنشاء مجموعات خاصة بالمستخدمين وإضافة مستخدم واحد أو أكثر إلى المجموعة. يكون هذا مفيدًا إذا كان هناك مستخدمون متعددون لنقاط دخول خدمة مختلفة ويحتاجون إلى الحصول على امتيازات مشتركة معينة متوفرة على المستوى الخاص بالمجموعة. يعرض المثال الخاص ببيان التطبيق التالي مجموعة محلية تسمى ⁧⁩LocalAdminGroup⁧⁩ لها امتيازات المسؤول. يتم تعيين اثنين من المستخدمين، ⁧⁩العميل 1⁧⁩ و⁧⁩العميل 2⁧⁩، أعضاء في هذه المجموعة المحلية. في المقطع ⁧⁩ServiceManifestImport⁧⁩، يتم تطبيق نهج RunAs لتشغيل الحزمة الخاصة بالتعليمات البرمجية ⁧⁩Stateful1Pkg⁧⁩⁧⁩كعميل 2⁧⁩. يتم تطبيق نهج RunAs آخر لتشغيل الحزمة الخاصة بالتعليمات البرمجية ⁧⁩Web1Pkg⁧⁩⁧⁩كعميل1⁧⁩.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application7Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Stateful1_MinReplicaSetSize" DefaultValue="3" />
    <Parameter Name="Stateful1_PartitionCount" DefaultValue="1" />
    <Parameter Name="Stateful1_TargetReplicaSetSize" DefaultValue="3" />
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="Customer2" EntryPointType="Main"/>
    </Policies>
  </ServiceManifestImport>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <RunAsPolicy CodePackageRef="Code" UserRef="Customer1" EntryPointType="Main"/>
    </Policies>
  </ServiceManifestImport>
  <DefaultServices>
    <Service Name="Stateful1" ServicePackageActivationMode="ExclusiveProcess">
      <StatefulService ServiceTypeName="Stateful1Type" TargetReplicaSetSize="[Stateful1_TargetReplicaSetSize]" MinReplicaSetSize="[Stateful1_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[Stateful1_PartitionCount]" LowKey="-9223372036854775808" HighKey="9223372036854775807" />
      </StatefulService>
    </Service>
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
  <Principals>
    <Groups>
      <Group Name="LocalAdminGroup">
        <Membership>
          <SystemGroup Name="Administrators" />
        </Membership>
      </Group>
    </Groups>
    <Users>
      <User Name="Customer1">
        <MemberOf>
          <Group NameRef="LocalAdminGroup" />
        </MemberOf>
      </User>
      <User Name="Customer2">
        <MemberOf>
          <Group NameRef="LocalAdminGroup" />
        </MemberOf>
      </User>
    </Users>
  </Principals>
</ApplicationManifest>

تطبيق النهج الافتراضي على كافة حزم التعليمة برمجية للخدمة

تستطيع استخدام المقطع⁧⁩ DefaultRunAsPolicy⁧⁩ لتحديد حساب المستخدم الافتراضي لكافة حزم التعليمات البرمجية التي لم يتم تعريف⁧⁩ RunAsPolicy⁧⁩ معينة. إذا كانت معظم حزم التعليمات البرمجية المحددة في بيان الخدمة المستخدم بواسطة أحد التطبيقات بحاجة إلى التشغيل تحت نفس المستخدم، فإنه يمكن للتطبيق فقط تحديد نهج RunAs افتراضي باستخدام الحساب الخاص بالمستخدم هذا. يحدد المثال التالي أنه إذا لم يكن لحزمة التعليمات البرمجية ⁧⁩RunAsPolicy⁧⁩ محددة، فإنه يجب تشغيل حزمة التعليمات البرمجية ضمن مستخدم ⁧⁩MyDefaultAccount⁧⁩ المحدد في القسم الخاص بالمبادئ. أنواع الحسابات المعتمدة هي LocalUser وخدمة الشبكة وLocalSystem وLocalService. في حالة كنت تستخدم مستخدمًا محليًا أو خدمة محلية، فحدد أيضًا اسم الحساب وكلمة المرور.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="Application7Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="Web1_InstanceCount" DefaultValue="-1" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Web1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    
  </ServiceManifestImport>
  <DefaultServices>    
    <Service Name="Web1" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="Web1Type" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
  <Principals>
    <Users>
      <User Name="MyDefaultAccount" AccountType="NetworkService" />      
    </Users>
  </Principals>
  <Policies>
    <DefaultRunAsPolicy UserRef="MyDefaultAccount" />
  </Policies>
</ApplicationManifest>

تتبع أخطاء حزمة تعليمات برمجية محليا باستخدام إعادة توجيه وحدة التحكم

في بعض الأحيان، يكون من المفيد لأغراض تصحيح الأخطاء رؤية إخراج وحدة التحكم من الخدمة قيد التشغيل. يمكنك تعيين نهج إعادة توجيه وحدة التحكم على نقطة الإدخال في بيان الخدمة، الذي يكتب الإخراج إلى الملف. تتم كتابة إخراج الملف إلى مجلد التطبيق المسمى ⁧⁩تسجيل الدخول⁧⁩ على ‏‏عقدة نظام المجموعة حيث يتم توزيع التطبيق وتشغيله.

تحذير

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

يوضح المثال الخاص ببيان الخدمة التالي تمكين إعادة توجيه وحدة التحكم بقيمة FileRetentionCount:

<CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>VotingWeb.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
        <ConsoleRedirection FileRetentionCount="10"/>
      </ExeHost>
    </EntryPoint>
</CodePackage>

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