Köra en tjänst som ett lokalt användarkonto eller lokalt systemkonto

Genom att använda Azure Service Fabric kan du skydda program som körs i klustret under olika användarkonton. Som standard körs Service Fabric-program under det konto som Fabric.exe processen körs under. Service Fabric ger också möjlighet att köra program under ett lokalt användar- eller systemkonto. Lokala systemkontotyper som stöds är LocalUser, NetworkService, LocalService och LocalSystem. Om du kör Service Fabric på ett fristående Windows-kluster kan du köra en tjänst under Active Directory-domänkonton eller grupphanterade tjänstkonton.

I programmanifestet definierar du de användarkonton som krävs för att köra tjänster eller säkra resurser i avsnittet Huvudkonton . Du kan också definiera och skapa användargrupper så att en eller flera användare kan hanteras tillsammans. Detta är användbart när det finns flera användare för olika startpunkter för tjänsten och de behöver gemensamma behörigheter som är tillgängliga på gruppnivå. Användarna refereras sedan till i en RunAs-princip, som tillämpas på en specifik tjänst eller alla tjänster i programmet.

Som standard tillämpas RunAs-principen på huvudstartpunkten. Du kan också tillämpa en RunAs-princip på startpunkten för installationen, om du behöver köra vissa högprivilegiska installationsåtgärder under ett systemkonto, eller både startpunkterna för huvud- och installationsprogrammet.

Anteckning

Om du tillämpar en RunAs-princip på en tjänst och tjänstmanifestet deklarerar slutpunktsresurser med HTTP-protokollet måste du ange en SecurityAccessPolicy. Mer information finns i Tilldela en säkerhetsåtkomstprincip för HTTP- och HTTPS-slutpunkter.

Köra en tjänst som en lokal användare

Du kan skapa en lokal användare som kan användas för att skydda en tjänst i programmet. När en LocalUser-kontotyp anges i avsnittet med huvudkonton i programmanifestet skapar Service Fabric lokala användarkonton på datorer där programmet distribueras. Som standard har dessa konton inte samma namn som de som anges i programmanifestet (till exempel Customer3 i följande exempel på programmanifest). I stället genereras de dynamiskt och har slumpmässiga lösenord.

I avsnittet RunAsPolicy för en ServiceManifestImport anger du användarkontot från avsnittet Huvudkonton för att köra tjänstkodpaketet. I följande exempel visas hur du skapar en lokal användare och tillämpar en RunAs-princip på huvudstartpunkten:

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

Skapa en lokal användargrupp

Du kan skapa användargrupper och lägga till en eller flera användare i gruppen. Detta är användbart om det finns flera användare för olika tjänstinmatningspunkter och de måste ha vissa gemensamma behörigheter som är tillgängliga på gruppnivå. I följande exempel på programmanifest visas en lokal grupp med namnet LocalAdminGroup som har administratörsbehörighet. Två användare, Customer1 och Customer2, är medlemmar i den här lokala gruppen. I avsnittet ServiceManifestImport används en RunAs-princip för att köra kodpaketet Stateful1Pkg som Customer2. En annan RunAs-princip tillämpas för att köra Web1Pkg-kodpaketet som 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>

Tillämpa en standardprincip på alla tjänstkodpaket

Du använder avsnittet DefaultRunAsPolicy för att ange ett standardanvändarkonto för alla kodpaket som inte har en specifik RunAsPolicy definierad. Om de flesta av de kodpaket som anges i tjänstmanifestet som används av ett program måste köras under samma användare, kan programmet bara definiera en standardprincip för RunAs med det användarkontot. I följande exempel anges att om ett kodpaket inte har en Angiven RunAsPolicy ska kodpaketet köras under den MyDefaultAccount-användare som anges i avsnittet huvudkonton. Kontotyper som stöds är LocalUser, NetworkService, LocalSystem och LocalService. Om du använder en lokal användare eller tjänst anger du även kontonamnet och lösenordet.

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

Felsöka ett kodpaket lokalt med hjälp av omdirigering av konsolen

Ibland är det användbart för felsökningsändamål att se konsolutdata från en tjänst som körs. Du kan ange en omdirigeringsprincip för konsolen på startpunkten i tjänstmanifestet, som skriver utdata till en fil. Filutdata skrivs till programmappen med namnet log on the cluster node where the application is deployed and run ( Logga in på klusternoden där programmet distribueras och körs).

Varning

Använd aldrig omdirigeringsprincipen för konsolen i ett program som distribueras i produktion eftersom detta kan påverka programmets redundans. Använd endast detta för lokal utveckling och felsökning.

Följande exempel på tjänstmanifest visar aktivering av konsolomdirigering med värdet FileRetentionCount:

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

Nästa steg