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