Delen via


Een service uitvoeren als een lokaal gebruikersaccount of lokaal systeemaccount

Met behulp van Azure Service Fabric kunt u toepassingen beveiligen die worden uitgevoerd in het cluster onder verschillende gebruikersaccounts. Service Fabric-toepassingen worden standaard uitgevoerd onder het account waarvoor 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 wanneer er meerdere gebruikers zijn voor verschillende serviceinvoerpunten en ze algemene bevoegdheden nodig hebben die beschikbaar zijn op groepsniveau. De gebruikers worden vervolgens verwezen in een RunAs-beleid, dat wordt toegepast op een specifieke service of alle services in de toepassing.

Standaard wordt het RunAs-beleid toegepast op het hoofdinvoerpunt. U kunt ook een RunAs-beleid toepassen op het beginpunt van de installatie, als u bepaalde installatiebewerkingen met hoge bevoegdheden wilt uitvoeren onder een systeemaccount, of zowel hoofd- als installatieinvoerpunten.

Notitie

Als u een RunAs-beleid toepast op een service en het servicemanifest eindpuntbronnen 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 is opgegeven in de principals-sectie van het toepassingsmanifest, maakt Service Fabric lokale gebruikersaccounts op computers waarop de toepassing wordt geïmplementeerd. Deze accounts hebben standaard niet dezelfde namen als die zijn opgegeven in het toepassingsmanifest (bijvoorbeeld Customer3 in het volgende voorbeeld van het toepassingsmanifest). In plaats daarvan worden ze dynamisch gegenereerd en hebben 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 serviceinvoerpunten 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 met beheerdersbevoegdheden. Twee gebruikers, Customer1 en Customer2, worden lid van deze lokale groep. In de sectie ServiceManifestImport wordt een RunAs-beleid toegepast om het Stateful1Pkg-codepakket uit te voeren als Customer2. Een ander RunAs-beleid wordt toegepast om het Web1Pkg-codepakket uit te voeren als 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>

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 alleen een standaard RunAs-beleid met dat gebruikersaccount definiëren. In het volgende voorbeeld wordt aangegeven dat als een codepakket geen RunAsPolicy heeft 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>

Fouten in een codepakket lokaal opsporen met behulp van consoleomleiding

Af en toe is het handig voor foutopsporingsdoeleinden om de console-uitvoer van een actieve service te zien. 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 log 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 failover van de toepassing. 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