Spuštění služby jako místního uživatelského účtu nebo místního systémového účtu

Pomocí Azure Service Fabric můžete zabezpečit aplikace, které běží v clusteru pod různými uživatelskými účty. Ve výchozím nastavení běží aplikace Service Fabric pod účtem, pod kterým běží proces Fabric.exe. Service Fabric také poskytuje možnost spouštět aplikace pod místním uživatelským nebo systémovým účtem. Podporované typy místních systémových účtů jsou LocalUser, NetworkService, LocalService a LocalSystem. Pokud service Fabric používáte v samostatném clusteru s Windows, můžete službu spustit v rámci účtů domény Active Directory nebo skupinových účtů spravované služby.

V manifestu aplikace definujete uživatelské účty potřebné ke spouštění služeb nebo zabezpečení prostředků v části Objekty zabezpečení . Můžete také definovat a vytvářet skupiny uživatelů tak, aby jednoho nebo více uživatelů bylo možné spravovat společně. To je užitečné, pokud existuje více uživatelů pro různé vstupní body služby a potřebují společná oprávnění, která jsou k dispozici na úrovni skupiny. Na uživatele se pak odkazuje v zásadách Spustit jako, které se použijí pro konkrétní službu nebo všechny služby v aplikaci.

Ve výchozím nastavení se na hlavní vstupní bod použije zásada Spustit jako. Pokud potřebujete spustit určité operace nastavení s vysokými oprávněními v rámci systémového účtu nebo hlavního i instalačního bodu, můžete také použít zásadu Spustit jako na vstupní bod instalace.

Poznámka

Pokud na službu použijete zásadu Spustit jako a manifest služby deklaruje prostředky koncového bodu pomocí protokolu HTTP, musíte zadat zásadu SecurityAccessPolicy. Další informace najdete v tématu Přiřazení zásad zabezpečení přístupu pro koncové body HTTP a HTTPS.

Spuštění služby jako místní uživatel

Můžete vytvořit místního uživatele, který může pomoct zabezpečit službu v rámci aplikace. Pokud je v části principals manifestu aplikace zadaný typ účtu LocalUser , Service Fabric vytvoří místní uživatelské účty na počítačích, na kterých je aplikace nasazená. Ve výchozím nastavení tyto účty nemají stejné názvy jako účty zadané v manifestu aplikace (například Zákazník3 v následujícím příkladu manifestu aplikace). Místo toho se generují dynamicky a mají náhodná hesla.

V části RunAsPolicy pro ServiceManifestImport zadejte uživatelský účet z oddílu Instanční objekty , který spustí balíček kódu služby. Následující příklad ukazuje, jak vytvořit místního uživatele a použít zásadu Spustit jako na hlavní vstupní bod:

<?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>

Vytvoření místní skupiny uživatelů

Můžete vytvořit skupiny uživatelů a přidat do skupiny jednoho nebo více uživatelů. To je užitečné, pokud existuje více uživatelů pro různé vstupní body služby a potřebují určitá společná oprávnění, která jsou k dispozici na úrovni skupiny. Následující příklad manifestu aplikace ukazuje místní skupinu s názvem LocalAdminGroup s oprávněními správce. Členy této místní skupiny jsou dva uživatelé , Customer1 a Customer2. V části ServiceManifestImport se použije zásada Spustit jako ke spuštění balíčku kódu Stateful1Pkg jako Customer2. Pro spuštění balíčku kódu Web1Pkg jako Customer1 se použijí jiné zásady Spustit jako.

<?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>

Použití výchozích zásad pro všechny balíčky kódu služby

Část DefaultRunAsPolicy slouží k určení výchozího uživatelského účtu pro všechny balíčky kódu, které nemají definovanou konkrétní zásadu RunAsPolicy . Pokud většina balíčků kódu zadaných v manifestu služby používaném aplikací musí běžet pod stejným uživatelem, může aplikace definovat výchozí zásadu Spustit jako s tímto uživatelským účtem. Následující příklad určuje, že pokud balíček kódu nemá zadaný RunAsPolicy , měl by balíček kódu běžet pod uživatelem MyDefaultAccount zadaným v části objekty zabezpečení. Podporované typy účtů jsou LocalUser, NetworkService, LocalSystem a LocalService. Pokud používáte místního uživatele nebo službu, zadejte také název účtu a heslo.

<?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>

Místní ladění balíčku kódu pomocí přesměrování konzoly

Občas je užitečné pro účely ladění zobrazit výstup konzoly ze spuštěné služby. Zásady přesměrování konzoly můžete nastavit na vstupním bodě v manifestu služby, který zapisuje výstup do souboru. Výstup souboru se zapíše do složky aplikace s názvem log na uzlu clusteru, kde je aplikace nasazená a spuštěná.

Upozornění

Nikdy nepoužívejte zásady přesměrování konzoly v aplikaci, která je nasazena v produkčním prostředí, protože to může mít vliv na převzetí služeb při selhání aplikace. Používejte ho pouze pro účely místního vývoje a ladění.

Následující příklad manifestu služby ukazuje povolení přesměrování konzoly s hodnotou FileRetentionCount:

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

Další kroky