Udostępnij za pośrednictwem


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

Za pomocą usługi Azure Service Fabric można zabezpieczyć aplikacje działające 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 zapewnia 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 używasz usługi Service Fabric w autonomicznym klastrze systemu Windows, możesz uruchomić usługę na kontach domeny usługi Active Directory lub kontach usług zarządzanych przez grupę.

W manifeście aplikacji zdefiniujesz konta użytkowników wymagane do uruchamiania usług lub zabezpieczania zasobów w sekcji Podmioty zabezpieczeń . Można również definiować i tworzyć grupy użytkowników, aby można było zarządzać nimi 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. Zasady Uruchom jako można również zastosować do punktu wejścia konfiguracji, jeśli musisz uruchomić pewne operacje konfiguracji o wysokim poziomie uprawnień w ramach konta systemowego lub zarówno główne, jak i punkty wejścia konfiguracji.

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 lokalne konta użytkowników na maszynach, na których jest wdrażana aplikacja. 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 (Podmioty zabezpieczeń), 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 utworzyć grupy użytkowników i dodać 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, są członkami tej grupy lokalnej. W sekcji ServiceManifestImport zasady Uruchom jako Klient2 są stosowane w celu uruchomienia pakietu kodu Stateful1Pkg. Inne zasady Uruchom jako Klient1 są stosowane do uruchamiania pakietu kodu Web1Pkg.

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

Użyjesz sekcji DefaultRunAsPolicy, aby określić domyślne konto 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 przy użyciu tego konta użytkownika. Poniższy przykład określa, że jeśli pakiet kodu nie ma określonego elementu RunAsPolicy , pakiet kodu powinien być uruchamiany 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