تشغيل الخدمة كحساب مستخدم محلي أو حساب نظام محلي
باستخدام Azure Service Fabric، يمكنك تأمين التطبيقات التي يتم تشغيلها في نظام المجموعة ضمن حسابات المستخدمين المختلفة. بشكل افتراضي، يتم تشغيل تطبيقات Service Fabric ضمن الحساب الذي يتم تشغيل عملية Fabric.exe تحته. يوفر Service Fabric أيضًا القدرة على تشغيل التطبيقات ضمن الحساب الخاص بالمستخدم المحلي أو حساب النظام. أنواع حسابات النظام المحلي المدعومة هي LocalUser وNetworkService و LocalService و LocalSystem. إذا كنت تقوم بتشغيل Service Fabric على مجموعة Windows مستقلة، يمكنك تشغيل خدمة ضمن حسابات مجال Active Directory أو حسابات الخدمة المدارة بواسطة المجموعة.
في بيان التطبيق، يمكنك تعريف حسابات المستخدمين المطلوبة لتشغيل الخدمات أو تأمين الموارد في قسم Principals . يمكنك أيضًا تعريف مجموعات المستخدمين وإنشاؤها بحيث يمكن إدارة مستخدم واحد أو أكثر معًا. وهذا مفيد عندما يكون هناك عدة مستخدمين لنقاط إدخال خدمة مختلفة ويحتاجون إلى امتيازات عامة متوفرة على مستوى المجموعة. ثم تتم الإشارة إلى المستخدمين في نهج RunAs، الذي يتم تطبيقه على خدمة معينة أو جميع الخدمات في ذلك التطبيق.
بشكل افتراضي، يتم تطبيق النهج الخاص بـ RunAs على نقطة الإدخال الرئيسية. يمكنك أيضا تطبيق نهج RunAs على نقطة إدخال الإعداد، إذا كنت بحاجة إلى تشغيل عمليات إعداد معينة ذات امتيازات عالية ضمن حساب نظام، أو كل من نقاط الإدخال الرئيسية والإعداد.
إشعار
في حالة قمت بتطبيق نهج RunAs على خدمة وبيان الخدمة يعلن عن موارد نقطة النهاية باستخدام بروتوكول HTTP، يجب تحديد SecurityAccessPolicy. لمزيد من المعلومات، راجع تعيين نهج وصول أمان لنقاط نهاية HTTP وHTTPS.
تشغيل الخدمة كمستخدم محلي
تستطيع إنشاء مستخدم محلي يمكن استخدامه للمساعدة في تأمين خدمة داخل التطبيق. عند تحديد نوع حساب LocalUser في قسم الأساسيات في بيان التطبيق، ينشئ Service Fabric حسابات مستخدمين محلية على الأجهزة حيث يتم نشر التطبيق. بشكل افتراضي، لا تحتوي هذه الحسابات على نفس الأسماء المحددة في بيان التطبيق (على سبيل المثال، Customer3 في مثال بيان التطبيق التالي). بدلاً من ذلك، يتم إنشاؤها ديناميكياً ولها كلمات مرور عشوائية.
في قسم RunAsPolicy ل ServiceManifestImport، حدد حساب المستخدم من قسم Principals لتشغيل حزمة التعليمات البرمجية للخدمة. يعرض المثال التالي كيفية إنشاء مستخدم محلي وتطبيق نهج 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 لها امتيازات المسؤول. اثنان من المستخدمين، Customer1 وCustomer2، أعضاء في هذه المجموعة المحلية. في قسم ServiceManifestImport، يتم تطبيق نهج RunAs لتشغيل حزمة التعليمات البرمجية Stateful1Pkg كعميل2. يتم تطبيق نهج RunAs آخر لتشغيل حزمة التعليمات البرمجية Web1Pkg ك Customer1.
<?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 افتراضي باستخدام الحساب الخاص بالمستخدم هذا. يحدد المثال التالي أنه إذا لم يكن لحزمة التعليمات البرمجية نهج RunAs محدد، يجب تشغيل حزمة التعليمات البرمجية ضمن مستخدم 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>
تتبع أخطاء حزمة تعليمات برمجية محليا باستخدام إعادة توجيه وحدة التحكم
في بعض الأحيان، يكون من المفيد لأغراض تصحيح الأخطاء رؤية إخراج وحدة التحكم من الخدمة قيد التشغيل. يمكنك تعيين نهج إعادة توجيه وحدة التحكم على نقطة الإدخال في بيان الخدمة، الذي يكتب الإخراج إلى الملف. تتم كتابة ناتج الملف في مجلد التطبيق باسم log على عقدة نظام المجموعة حيث يتم نشر التطبيق وتشغيله.
تحذير
لا تستخدم نهج إعادة توجيه وحدة التحكم مطلقاً في تطبيق تم نشره في الإنتاج لأن هذا يمكن أن يؤثر على تجاوز فشل التطبيق. فقط استخدم هذا لأغراض التطوير المحلي وتصحيح الأخطاء.
يوضح المثال الخاص ببيان الخدمة التالي تمكين إعادة توجيه وحدة التحكم بقيمة FileRetentionCount:
<CodePackage Name="Code" Version="1.0.0">
<EntryPoint>
<ExeHost>
<Program>VotingWeb.exe</Program>
<WorkingFolder>CodePackage</WorkingFolder>
<ConsoleRedirection FileRetentionCount="10"/>
</ExeHost>
</EntryPoint>
</CodePackage>