Eseguire un servizio come account utente locale o account di sistema localeRun a service as a local user account or local system account

Azure Service Fabric consente di proteggere le applicazioni in esecuzione nel cluster con account utente diversi.By using Azure Service Fabric, you can secure applications that are running in the cluster under different user accounts. Per impostazione predefinita, le applicazioni di Service Fabric vengono eseguite con lo stesso account con cui viene eseguito il processo Fabric.exe.By default, Service Fabric applications run under the account that the Fabric.exe process runs under. Service Fabric consente anche di eseguire le applicazioni in un account utente o di sistema locale.Service Fabric also provides the capability to run applications under a local user or system account. I tipi di account supportati dal sistema locale sono LocalUser, NetworkService, LocalService e LocalSystem.Supported local system account types are LocalUser, NetworkService, LocalService, and LocalSystem. Se si esegue Service Fabric su un cluster Windows autonomo, è possibile eseguire un servizio con account di dominio di Active Directory o account del servizio gestiti del gruppo.If you're running Service Fabric on a Windows standalone cluster, you can run a service under Active Directory domain accounts or group managed service accounts.

Nel manifesto dell'applicazione si definiscono gli account utente necessari per eseguire i servizi o proteggere le risorse nella sezione Principals.In the application manifest, you define the user accounts required to run services or secure resources in the Principals section. È anche possibile definire e creare gruppi di utenti per gestire uno o più utenti insieme.You can also define and create user groups so that one or more users can be managed together. Questo aspetto è utile quando sono presenti più utenti per punti di ingresso del servizio differenti che necessitano di privilegi comuni disponibili a livello di gruppo.This is useful when there are multiple users for different service entry points and they need common privileges that are available at the group level. Viene quindi fatto riferimento agli utenti in un criterio RunAs, che viene applicato a un servizio specifico o a tutti i servizi dell'applicazione.The users are then referenced in a RunAs policy, which is applied to a specific service or all the services in the application.

Per impostazione predefinita, il criterio RunAs viene applicato al punto di ingresso principale.By default, the RunAs policy is applied to the main entry point. È anche possibile applicare un criterio RunAs al punto di ingresso dell'installazione, se è necessario eseguire determinate operazioni di installazione con privilegi elevati in un account di sistema, oppure sia al punto di ingresso principale che a quello dell'installazione.You can also apply a RunAs policy to the setup entry point, if you need to run certain high-privilege setup operations under a system account, or both main and setup entry points.

Nota

Se si applica un criterio RunAs a un servizio e il manifesto del servizio dichiara le risorse dell'endpoint con il protocollo HTTP, è necessario specificare SecurityAccessPolicy.If you apply a RunAs policy to a service and the service manifest declares endpoint resources with the HTTP protocol, you must specify a SecurityAccessPolicy. Per altre informazioni, vedere Assegnare criteri di accesso di sicurezza per gli endpoint HTTP e HTTPS.For more information, see Assign a security access policy for HTTP and HTTPS endpoints.

Eseguire un servizio come utente localeRun a service as a local user

È possibile creare un utente locale che può essere usato per proteggere un servizio all'interno dell'applicazione.You can create a local user that can be used to help secure a service within the application. Quando viene specificato un tipo di account LocalUser nella sezione Principals del manifesto dell'applicazione, Service Fabric crea account utente locali nei computer in cui viene distribuita l'applicazione.When a LocalUser account type is specified in the principals section of the application manifest, Service Fabric creates local user accounts on machines where the application is deployed. Per impostazione predefinita, questi account non hanno gli stessi nomi di quelli specificati nel manifesto dell'applicazione (ad esempio Customer3 nel manifesto dell'applicazione seguente).By default, these accounts do not have the same names as those specified in the application manifest (for example, Customer3 in the following application manifest example). Vengono invece generati in modo dinamico e hanno password casuali.Instead, they are dynamically generated and have random passwords.

Nella sezione RunAsPolicy di un oggetto ServiceManifestImport specificare l'account utente della sezione Principals per eseguire il pacchetto di codice del servizio.In the RunAsPolicy section for a ServiceManifestImport, specify the user account from the Principals section to run the service code package. L'esempio seguente illustra come creare un utente locale e applicare un criterio RunAs al punto di ingresso principale:The following example shows how to create a local user and apply a RunAs policy to the main entry point:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://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>

Creare un gruppo di utenti localeCreate a local user group

È possibile creare gruppi di utenti e aggiungere uno o più utenti al gruppo.You can create user groups and add one or more users to the group. Questo aspetto è utile quando sono presenti più utenti per punti di ingresso del servizio differenti che devono avere determinati privilegi comuni disponibili a livello di gruppo.This is useful if there are multiple users for different service entry points and they need to have certain common privileges that are available at the group level. L'esempio di manifesto dell'applicazione seguente illustra un gruppo locale denominato LocalAdminGroup con privilegi di amministratore.The following application manifest example shows a local group named LocalAdminGroup that has administrator privileges. Due utenti, Customer1 e Customer2, diventano membri di questo gruppo locale.Two users, Customer1 and Customer2, are made members of this local group. Nella sezione ServiceManifestImport viene applicato un criterio RunAs per eseguire il pacchetto di codice Stateful1Pkg come Customer2.In the ServiceManifestImport section, a RunAs policy is applied to run the Stateful1Pkg code package as Customer2. Un altro criterio RunAs viene applicato per eseguire il pacchetto di codice Web1Pkg come Customer1.Another RunAs policy is applied to run the Web1Pkg code package as Customer1.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://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>

Applicare un criterio predefinito a tutti i pacchetti di codice del servizioApply a default policy to all service code packages

La sezione DefaultRunAsPolicy consente di specificare un account utente predefinito per tutti i pacchetti di codice per i quali non è definito un oggetto RunAsPolicy specifico.You use the DefaultRunAsPolicy section to specify a default user account for all code packages that don’t have a specific RunAsPolicy defined. Se la maggior parte dei pacchetti di codice specificati nel manifesto del servizio usato da un'applicazione deve essere eseguita con lo stesso utente, l'applicazione può definire solo criteri RunAs predefiniti con questo account utente.If most of the code packages that are specified in the service manifest used by an application need to run under the same user, the application can just define a default RunAs policy with that user account. L'esempio seguente mostra che, se l'oggetto RunAsPolicy non è specificato per un pacchetto di codice, questo deve essere eseguito con l'utente MyDefaultAccount specificato nella sezione Principals.The following example specifies that if a code package does not have a RunAsPolicy specified, the code package should run under the MyDefaultAccount user specified in the principals section. I tipi di account supportati sono LocalUser, NetworkService, LocalSystem e LocalService.Supported account types are LocalUser, NetworkService, LocalSystem, and LocalService. Se si usa un utente o un servizio locale, specificare anche il nome e la password dell'account.If using a local user or service, also specify the account name and password.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://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>

Eseguire il debug di un pacchetto di codice localmente usando il reindirizzamento della consoleDebug a code package locally using console redirection

A scopo di debug può talvolta essere utile visualizzare l'output generato nella console da un servizio in esecuzione.Occasionally, it's useful for debugging purposes to see the console output from a running service. È possibile impostare criteri di reindirizzamento della console per il punto di ingresso nel manifesto del servizio, che scrive l'output in un file.You can set a console redirection policy on the entry point in the service manifest, which writes the output to a file. L'output del file viene scritto nella cartella dell'applicazione denominata log nel nodo del cluster in cui l'applicazione viene distribuita ed eseguita.The file output is written to the application folder called log on the cluster node where the application is deployed and run.

Avviso

Non usare mai i criteri di reindirizzamento della console in un'applicazione distribuita nell'ambiente di produzione, perché ciò può incidere sul failover dell'applicazione.Never use the console redirection policy in an application that is deployed in production because this can affect the application failover. Usare questa opzione solo a scopo di sviluppo e debug locale.Only use this for local development and debugging purposes.

L'esempio di manifesto del servizio seguente illustra come abilitare il reindirizzamento della console con un valore FileRetentionCount:The following service manifest example shows enabling console redirection with a FileRetentionCount value:

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

Passaggi successiviNext steps