Uruchamianie usługi jako konta użytkownika lokalnego lub lokalnego konta systemowego

Za pomocą usługi Azure Service Fabric można zabezpieczyć aplikacje uruchomione w klastrze na różnych kontach użytkowników. Domyślnie aplikacje usługi Service Fabric są uruchamiane na koncie, w ramach którego działa proces Fabric.exe. Usługa Service Fabric udostępnia również możliwość uruchamiania aplikacji w ramach konta użytkownika lokalnego lub konta systemowego. Obsługiwane typy kont systemu lokalnego to LocalUser, NetworkService, LocalService i LocalSystem. Jeśli korzystasz z usługi Service Fabric w autonomicznym klastrze systemu Windows, możesz uruchomić usługę w ramach kont domeny usługi Active Directory lub kont usług zarządzanych przez grupę.

W manifeście aplikacji należy zdefiniować konta użytkowników wymagane do uruchamiania usług lub zabezpieczania zasobów w sekcji Podmioty zabezpieczeń . Można również zdefiniować i utworzyć grupy użytkowników, aby można było zarządzać jednym lub więcej użytkowników razem. Jest to przydatne, gdy istnieje wielu użytkowników dla różnych punktów wejścia usługi i potrzebują wspólnych uprawnień, które są dostępne na poziomie grupy. Następnie użytkownicy są przywołyni w zasadach Uruchom jako, które są stosowane do określonej usługi lub wszystkich usług w aplikacji.

Domyślnie zasady Uruchom jako są stosowane do głównego punktu wejścia. Można również zastosować zasady Uruchom jako do punktu wejścia konfiguracji, jeśli trzeba uruchomić pewne operacje konfiguracji o wysokim poziomie uprawnień w ramach konta systemowego lub zarówno główne, jak i skonfigurowane punkty wejścia.

Uwaga

Jeśli zasady Uruchom jako są stosowane do usługi, a manifest usługi deklaruje zasoby punktu końcowego przy użyciu protokołu HTTP, należy określić zasadę SecurityAccessPolicy. Aby uzyskać więcej informacji, zobacz Przypisywanie zasad dostępu zabezpieczeń dla punktów końcowych HTTP i HTTPS.

Uruchamianie usługi jako użytkownik lokalny

Możesz utworzyć użytkownika lokalnego, który może służyć do zabezpieczania usługi w aplikacji. Gdy typ konta LocalUser jest określony w sekcji principals manifestu aplikacji, usługa Service Fabric tworzy konta użytkowników lokalnych na komputerach, na których aplikacja jest wdrażana. Domyślnie te konta nie mają takich samych nazw jak te określone w manifeście aplikacji (na przykład Customer3 w poniższym przykładzie manifestu aplikacji). Zamiast tego są one generowane dynamicznie i mają losowe hasła.

W sekcji RunAsPolicy dla elementu ServiceManifestImport określ konto użytkownika z sekcji Principals (Jednostki), aby uruchomić pakiet kodu usługi. W poniższym przykładzie pokazano, jak utworzyć użytkownika lokalnego i zastosować zasady Uruchom jako do głównego punktu wejścia:

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

Tworzenie lokalnej grupy użytkowników

Możesz tworzyć grupy użytkowników i dodawać do grupy co najmniej jednego użytkownika. Jest to przydatne, jeśli istnieje wielu użytkowników dla różnych punktów wejścia usługi i muszą mieć pewne wspólne uprawnienia, które są dostępne na poziomie grupy. Poniższy przykład manifestu aplikacji przedstawia grupę lokalną o nazwie LocalAdminGroup , która ma uprawnienia administratora. Dwóch użytkowników, Customer1 i Customer2, jest członkami tej grupy lokalnej. W sekcji ServiceManifestImport zasady Uruchom jako Klient2 są stosowane do uruchamiania pakietu kodu Stateful1Pkg. Do uruchamiania pakietu kodu Web1Pkg jako Customer1 są stosowane inne zasady Uruchom jako Klient1.

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

Stosowanie domyślnych zasad do wszystkich pakietów kodu usługi

Sekcja DefaultRunAsPolicy służy do określania domyślnego konta użytkownika dla wszystkich pakietów kodu, które nie mają zdefiniowanego określonego elementu RunAsPolicy . Jeśli większość pakietów kodu określonych w manifeście usługi używanym przez aplikację musi działać w ramach tego samego użytkownika, aplikacja może po prostu zdefiniować domyślne zasady Uruchom jako dla tego konta użytkownika. Poniższy przykład określa, że jeśli pakiet kodu nie ma określonego elementu RunAsPolicy , pakiet kodu powinien zostać uruchomiony w ramach użytkownika MyDefaultAccount określonego w sekcji principals. Obsługiwane typy kont to LocalUser, NetworkService, LocalSystem i LocalService. W przypadku korzystania z użytkownika lokalnego lub usługi określ również nazwę konta i hasło.

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

Lokalne debugowanie pakietu kodu przy użyciu przekierowania konsoli

Czasami przydatne jest debugowanie danych wyjściowych konsoli z uruchomionej usługi. Zasady przekierowania konsoli można ustawić w punkcie wejścia w manifeście usługi, który zapisuje dane wyjściowe w pliku. Dane wyjściowe pliku są zapisywane w folderze aplikacji o nazwie log w węźle klastra, w którym aplikacja jest wdrażana i uruchamiana.

Ostrzeżenie

Nigdy nie używaj zasad przekierowania konsoli w aplikacji wdrożonej w środowisku produkcyjnym, ponieważ może to mieć wpływ na tryb failover aplikacji. Tej opcji należy używać tylko do celów programowania lokalnego i debugowania.

Poniższy przykład manifestu usługi pokazuje włączanie przekierowania konsoli z wartością FileRetentionCount:

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

Następne kroki