Sdílet prostřednictvím


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 spuštěné v clusteru v různých uživatelských účtech. 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 účtů místního systému jsou LocalUser, NetworkService, LocalService a LocalSystem. Pokud používáte Service Fabric v samostatném clusteru s Windows, můžete službu spustit v rámci účtů domény služby Active Directory nebo skupinových účtů spravovaných služeb.

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ů, aby jeden nebo více uživatelů bylo možné spravovat společně. To je užitečné, když existuje více uživatelů pro různé vstupní body služby a potřebují běž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í na konkrétní službu nebo všechny služby v aplikaci.

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

Poznámka:

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

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

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

V části RunAsPolicy pro ServiceManifestImport zadejte uživatelský účet z oddílu Objekty zabezpečení pro spuštění balíčku 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í mít určitá běž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. Dva uživatelé, Customer1 a Customer2, jsou členy této místní skupiny. V části ServiceManifestImport se pro spuštění balíčku kódu Stateful1Pkg jako Customer2 použije zásada RunAs. Pro spuštění balíčku kódu Web1Pkg jako Customer1 se použije další zásada Spustit jako zákazníka.

<?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í zásady pro všechny balíčky kódu služby

V části DefaultRunAsPolicy můžete určit výchozí uživatelský účet pro všechny balíčky kódu, které nemají definovanou konkrétní zásadu RunAsPolicy . Pokud se většina balíčků kódu zadaných v manifestu služby používaném aplikací musí spouštět pod stejným uživatelem, může aplikace jednoduše definovat výchozí zásady 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 , balíček kódu by měl 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

Někdy 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 bodu v manifestu služby, který zapíše výstup do souboru. Výstup souboru se zapíše do složky aplikace označované jako protokol na uzlu clusteru, kde je aplikace nasazená a spuštěná.

Upozorňující

Nikdy nepoužívejte zásadu přesměrování konzoly v aplikaci nasazené v produkčním prostředí, protože to může mít vliv na převzetí služeb při selhání aplikace. Tuto možnost použijte 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