Een service uitvoeren als een lokaal gebruikersaccount of lokaal systeemaccount

Met behulp van Azure Service Fabric kunt u toepassingen beveiligen die in het cluster worden uitgevoerd onder verschillende gebruikersaccounts. Service Fabric-toepassingen worden standaard uitgevoerd onder het account waaronder het Fabric.exe proces wordt uitgevoerd. Service Fabric biedt ook de mogelijkheid om toepassingen uit te voeren onder een lokaal gebruikers- of systeemaccount. Ondersteunde lokale systeemaccounttypen zijn LocalUser, NetworkService, LocalService en LocalSystem. Als u Service Fabric uitvoert op een zelfstandig Windows-cluster, kunt u een service uitvoeren onder Active Directory-domeinaccounts of door groepen beheerde serviceaccounts.

In het toepassingsmanifest definieert u de gebruikersaccounts die nodig zijn om services uit te voeren of resources te beveiligen in de sectie Principals. U kunt ook gebruikersgroepen definiëren en maken, zodat een of meer gebruikers samen kunnen worden beheerd. Dit is handig als er meerdere gebruikers zijn voor verschillende service-toegangspunten en ze gemeenschappelijke bevoegdheden nodig hebben die beschikbaar zijn op groepsniveau. Naar de gebruikers wordt vervolgens verwezen in een RunAs-beleid, dat wordt toegepast op een specifieke service of alle services in de toepassing.

Het RunAs-beleid wordt standaard toegepast op het hoofdinvoerpunt. U kunt ook een RunAs-beleid toepassen op het invoerpunt voor de installatie als u bepaalde installatiebewerkingen met hoge bevoegdheden moet uitvoeren onder een systeemaccount, of zowel hoofd- als installatie-invoerpunten.

Notitie

Als u een RunAs-beleid toepast op een service en het servicemanifest eindpuntresources declareert met het HTTP-protocol, moet u een SecurityAccessPolicy opgeven. Zie Een beveiligingstoegangsbeleid toewijzen voor HTTP- en HTTPS-eindpunten voor meer informatie.

Een service uitvoeren als een lokale gebruiker

U kunt een lokale gebruiker maken die kan worden gebruikt om een service in de toepassing te beveiligen. Wanneer een LocalUser-accounttype wordt opgegeven in de sectie principals van het toepassingsmanifest, maakt Service Fabric lokale gebruikersaccounts op computers waarop de toepassing wordt geïmplementeerd. Deze accounts hebben standaard niet dezelfde namen als de accounts die zijn opgegeven in het toepassingsmanifest (bijvoorbeeld Customer3 in het volgende voorbeeld van het toepassingsmanifest). In plaats daarvan worden ze dynamisch gegenereerd en hebben ze willekeurige wachtwoorden.

Geef in de sectie RunAsPolicy voor een ServiceManifestImport het gebruikersaccount op uit de sectie Principals om het servicecodepakket uit te voeren. In het volgende voorbeeld ziet u hoe u een lokale gebruiker maakt en een RunAs-beleid toepast op het hoofdinvoerpunt:

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

Een lokale gebruikersgroep maken

U kunt gebruikersgroepen maken en een of meer gebruikers toevoegen aan de groep. Dit is handig als er meerdere gebruikers zijn voor verschillende service-ingangspunten en ze bepaalde algemene bevoegdheden moeten hebben die beschikbaar zijn op groepsniveau. In het volgende voorbeeld van het toepassingsmanifest ziet u een lokale groep met de naam LocalAdminGroup die beheerdersbevoegdheden heeft. Twee gebruikers, Customer1 en Customer2, zijn lid van deze lokale groep. In de sectie ServiceManifestImport wordt een RunAs-beleid toegepast om het codepakket Stateful1Pkg uit te voeren als Customer2. Er wordt een ander RunAs-beleid toegepast om het Web1Pkg-codepakket uit te voeren als Klant1.

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

Een standaardbeleid toepassen op alle servicecodepakketten

U gebruikt de sectie DefaultRunAsPolicy om een standaardgebruikersaccount op te geven voor alle codepakketten waarvoor geen specifieke RunAsPolicy is gedefinieerd. Als de meeste codepakketten die zijn opgegeven in het servicemanifest dat door een toepassing wordt gebruikt, moeten worden uitgevoerd onder dezelfde gebruiker, kan de toepassing gewoon een standaard RunAs-beleid definiëren met dat gebruikersaccount. In het volgende voorbeeld wordt aangegeven dat als voor een codepakket geen RunAsPolicy is opgegeven, het codepakket moet worden uitgevoerd onder de myDefaultAccount-gebruiker die is opgegeven in de sectie principals. Ondersteunde accounttypen zijn LocalUser, NetworkService, LocalSystem en LocalService. Als u een lokale gebruiker of service gebruikt, geeft u ook de accountnaam en het wachtwoord op.

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

Lokaal fouten opsporen in een codepakket met behulp van console-omleiding

Soms is het handig voor foutopsporingsdoeleinden om de console-uitvoer van een actieve service te bekijken. U kunt een consoleomleidingsbeleid instellen op het toegangspunt in het servicemanifest, waarmee de uitvoer naar een bestand wordt geschreven. De bestandsuitvoer wordt geschreven naar de toepassingsmap met de naam logboek op het clusterknooppunt waar de toepassing wordt geïmplementeerd en uitgevoerd.

Waarschuwing

Gebruik nooit het consoleomleidingsbeleid in een toepassing die in productie is geïmplementeerd, omdat dit van invloed kan zijn op de toepassingsfailover. Gebruik dit alleen voor lokale ontwikkelings- en foutopsporingsdoeleinden.

In het volgende voorbeeld van het servicemanifest ziet u het inschakelen van consoleomleiding met een FileRetentionCount-waarde:

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

Volgende stappen