Configurare i criteri di sicurezza per l'applicazioneConfigure security policies for your application

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. Service Fabric permette anche di proteggere le risorse usate dalle applicazioni in fase di distribuzione con l'account utente, ad esempio file, directory e certificati.Service Fabric also helps secure the resources that are used by applications at the time of deployment under the user accounts--for example, files, directories, and certificates. In questo modo le applicazioni in esecuzione, anche in un ambiente ospitato condiviso, sono reciprocamente protette.This makes running applications, even in a shared hosted environment, more secure from one another.

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 con un account utente locale o un account di sistema locale, specificato nel manifesto dell'applicazione.Service Fabric also provides the capability to run applications under a local user account or local system account, which is specified within the application manifest. 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.

Quando si esegue Service Fabric in Windows Server nel data center usando il programma di installazione autonomo, è possibile usare gli account di dominio di Active Directory, inclusi gli account del servizio gestito del gruppo.When you're running Service Fabric on Windows Server in your datacenter by using the standalone installer, you can use Active Directory domain accounts, including group managed service accounts.

È possibile definire e creare gruppi di utenti per aggiungere uno o più utenti a ogni gruppo e gestirli insieme.You can define and create user groups so that one or more users can be added to each group to be managed together. 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 when there are multiple users for different service entry points and they need to have certain common privileges that are available at the group level.

Configurare i criteri per il punto di ingresso dell'installazione del servizioConfigure the policy for a service setup entry point

Come descritto nel modello applicativo, il punto di ingresso dell'installazione, SetupEntryPoint, è un punto di ingresso con privilegi che viene eseguito con le stesse credenziali di Service Fabric, in genere, l'account NetworkService, prima di qualsiasi altro punto di ingresso.As described in the application model, the setup entry point, SetupEntryPoint, is a privileged entry point that runs with the same credentials as Service Fabric (typically the NetworkService account) before any other entry point. L'eseguibile specificato da EntryPoint è in genere l'host del servizio a esecuzione prolungata.The executable that is specified by EntryPoint is typically the long-running service host. Un punto di ingresso dell'installazione separato consente di evitare di dover eseguire l'eseguibile dell'host del servizio con privilegi elevati per lunghi periodi di tempo.So having a separate setup entry point avoids having to run the service host executable with high privileges for extended periods of time. L'eseguibile specificato da EntryPoint viene eseguito dopo che SetupEntryPoint termina correttamente.The executable that EntryPoint specifies is run after SetupEntryPoint exits successfully. Il processo risultante viene monitorato e riavviato ed inizia di nuovo con SetupEntryPoint, se termina o si arresta in modo anomalo.The resulting process is monitored and restarted, and begins again with SetupEntryPoint if it ever terminates or crashes.

Il seguente è un semplice esempio di manifesto del servizio in cui sono presenti SetupEntryPoint e l'elemento EntryPoint principale per il servizio.The following is a simple service manifest example that shows the SetupEntryPoint and the main EntryPoint for the service.

<?xml version="1.0" encoding="utf-8" ?>
<ServiceManifest Name="MyServiceManifest" Version="SvcManifestVersion1" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Description>An example service manifest</Description>
  <ServiceTypes>
    <StatelessServiceType ServiceTypeName="MyServiceType" />
  </ServiceTypes>
  <CodePackage Name="Code" Version="1.0.0">
    <SetupEntryPoint>
      <ExeHost>
        <Program>MySetup.bat</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </SetupEntryPoint>
    <EntryPoint>
      <ExeHost>
        <Program>MyServiceHost.exe</Program>
      </ExeHost>
    </EntryPoint>
  </CodePackage>
  <ConfigPackage Name="Config" Version="1.0.0" />
</ServiceManifest>

Configurare i criteri usando un account localeConfigure the policy by using a local account

Dopo aver configurato un punto di ingresso di configurazione per il servizio, è possibile modificare le autorizzazioni di sicurezza in base alle quali viene eseguito nel manifesto dell'applicazione.After you configure the service to have a setup entry point, you can change the security permissions that it runs under in the application manifest. L'esempio seguente illustra come configurare il servizio in modo che venga eseguito con i privilegi dell'account amministratore utenti.The following example shows how to configure the service to run under user administrator account privileges.

<?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="MyApplicationType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="MyServiceTypePkg" ServiceManifestVersion="1.0.0" />
      <ConfigOverrides />
      <Policies>
         <RunAsPolicy CodePackageRef="Code" UserRef="SetupAdminUser" EntryPointType="Setup" />
      </Policies>
   </ServiceManifestImport>
   <Principals>
      <Users>
         <User Name="SetupAdminUser">
            <MemberOf>
               <SystemGroup Name="Administrators" />
            </MemberOf>
         </User>
      </Users>
   </Principals>
</ApplicationManifest>

Creare prima di tutto una sezione Principals con un nome utente, ad esempio SetupAdminUser.First, create a Principals section with a user name, such as SetupAdminUser. Ciò indica che l'utente è un membro del gruppo di sistema Administrators.This indicates that the user is a member of the Administrators system group.

Successivamente, configurare nella sezione ServiceManifestImport un criterio per applicare tale entità a SetupEntryPoint.Next, under the ServiceManifestImport section, configure a policy to apply this principal to SetupEntryPoint. Ciò indica a Service Fabric che quando viene eseguito il file mySetup.bat, deve essere un profilo RunAs con privilegi di amministratore.This tells Service Fabric that when the MySetup.bat file is run, it should be RunAs with administrator privileges. Dato che non sono stati applicati criteri al punto di ingresso principale, il codice in MyServiceHost.exe viene eseguito con l'account NetworkService di sistema,Given that you have not applied a policy to the main entry point, the code in MyServiceHost.exe runs under the system NetworkService account. ossia l'account predefinito con cui vengono eseguiti tutti i punti di ingresso del servizio.This is the default account that all service entry points are run as.

A questo punto, aggiungere il file MySetup.bat al progetto di Visual Studio per testare i privilegi di amministratore.Let's now add the file MySetup.bat to the Visual Studio project to test the administrator privileges. In Visual Studio fare clic con il pulsante destro del mouse sul progetto di servizio e aggiungere un nuovo file denominato MySetup.bat.In Visual Studio, right-click the service project and add a new file called MySetup.bat.

Verificare quindi che il file MySetup.bat sia incluso nel pacchetto del servizio.Next, ensure that the MySetup.bat file is included in the service package. Per impostazione predefinita, non è incluso.By default, it is not. Selezionare il file, fare clic con il pulsante destro del mouse per visualizzare il menu di scelta rapida e scegliere Proprietà.Select the file, right-click to get the context menu, and choose Properties. Nella finestra di dialogo delle proprietà verificare che Copia nella directory di output sia impostato su Copia se più recente.In the Properties dialog box, ensure that Copy to Output Directory is set to Copy if newer. Vedere lo screenshot seguente.See the following screenshot.

CopyToOutput di Visual Studio per il file batch SetupEntryPoint

Aprire il file MySetup.bat e aggiungere i comandi seguenti:Now open the MySetup.bat file and add the following commands:

REM Set a system environment variable. This requires administrator privilege
setx -m TestVariable "MyValue"
echo System TestVariable set to > out.txt
echo %TestVariable% >> out.txt

REM To delete this system variable us
REM REG delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v TestVariable /f

Successivamente, compilare e distribuire la soluzione a un cluster di sviluppo locale.Next, build and deploy the solution to a local development cluster. Dopo aver avviato il servizio, come mostrato in Service Fabric Explorer, sarà possibile verificare la corretta esecuzione del file MySetup.bat in due modi.After the service has started, as shown in Service Fabric Explorer, you can see that the MySetup.bat file was successful in a two ways. Avviare un prompt dei comandi di PowerShell e digitare:Open a PowerShell command prompt and type:

PS C:\ [Environment]::GetEnvironmentVariable("TestVariable","Machine")
MyValue

Annotare il nome del nodo in cui il servizio è stato distribuito e avviato in Service Fabric Explorer, ad esempio Node 2.Then, note the name of the node where the service was deployed and started in Service Fabric Explorer--for example, Node 2. Passare quindi alla cartella di lavoro dell'istanza dell'applicazione per trovare il file out.txt che mostra il valore di TestVariable.Next, navigate to the application instance work folder to find the out.txt file that shows the value of TestVariable. Se, ad esempio, il servizio è stato distribuito in Node 2, è possibile passare a questo percorso per MyApplicationType:For example, if this service was deployed to Node 2, then you can go to this path for the MyApplicationType:

C:\SfDevCluster\Data\_App\Node.2\MyApplicationType_App\work\out.txt

Configurare i criteri usando gli account di sistema localeConfigure the policy by using local system accounts

Spesso è preferibile eseguire lo script di avvio usando un account di sistema locale invece di un account amministratore.Often, it's preferable to run the startup script by using a local system account rather than an administrator account. L'esecuzione dei criteri RunAs come membro del gruppo Administrators in genere non ha esito positivo in quanto per i computer è abilitato il controllo di accesso dell'utente per impostazione predefinita.Running the RunAs policy as a member of the Administrators group typically doesn’t work well because machines have User Access Control (UAC) enabled by default. In questi casi, è consigliabile eseguire SetupEntryPoint come LocalSystem invece che come utente locale aggiunto al gruppo Administrators.In such cases, the recommendation is to run the SetupEntryPoint as LocalSystem, instead of as a local user added to Administrators group. L'esempio seguente illustra l'impostazione di SetupEntryPoint per l'esecuzione come LocalSystem:The following example shows setting the SetupEntryPoint to run as LocalSystem:

<?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="MyApplicationType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="MyServiceTypePkg" ServiceManifestVersion="1.0.0" />
      <ConfigOverrides />
      <Policies>
         <RunAsPolicy CodePackageRef="Code" UserRef="SetupLocalSystem" EntryPointType="Setup" />
      </Policies>
   </ServiceManifestImport>
   <Principals>
      <Users>
         <User Name="SetupLocalSystem" AccountType="LocalSystem" />
      </Users>
   </Principals>
</ApplicationManifest>

Per i cluster Linux, per eseguire un servizio o il punto di ingresso della configurazione come root, è possibile specificare AccountType come LocalSystem.For Linux clusters, to run a service or the setup entry point as root, you can specify the AccountType as LocalSystem.

Avviare i comandi PowerShell da un punto di ingresso dell'installazioneStart PowerShell commands from a setup entry point

Per eseguire PowerShell dal punto SetupEntryPoint, è possibile eseguire PowerShell.exe in un file batch che punta a un file di PowerShell.To run PowerShell from the SetupEntryPoint point, you can run PowerShell.exe in a batch file that points to a PowerShell file. Aggiungere prima di tutto un file PowerShell al progetto del servizio, ad esempio MySetup.ps1.First, add a PowerShell file to the service project--for example, MySetup.ps1. Ricordarsi di impostare la proprietà Copia se più recente in modo che il file venga incluso anche nel pacchetto servizio.Remember to set the Copy if newer property so that the file is also included in the service package. L'esempio seguente illustra un file batch di esempio per avviare un file PowerShell denominato MySetup.ps1, che imposta una variabile di ambiente di sistema denominata TestVariable.The following example shows a sample batch file that starts a PowerShell file called MySetup.ps1, which sets a system environment variable called TestVariable.

MySetup.bat per avviare il file PowerShell:MySetup.bat to start a PowerShell file:

powershell.exe -ExecutionPolicy Bypass -Command ".\MySetup.ps1"

Nel file di PowerShell aggiungere quanto segue per impostare una variabile di ambiente di sistema:In the PowerShell file, add the following to set a system environment variable:

[Environment]::SetEnvironmentVariable("TestVariable", "MyValue", "Machine")
[Environment]::GetEnvironmentVariable("TestVariable","Machine") > out.txt

Nota

Per impostazione predefinita, quando viene eseguito, il file batch cerca i file nella cartella dell'applicazione denominata work.By default, when the batch file runs, it looks at the application folder called work for files. In questo caso, quando MySetup.bat viene eseguito, il file MySetup.ps1 deve trovarsi nella stessa cartella, ovvero la cartella code package dell'applicazione.In this case, when MySetup.bat runs, we want this to find the MySetup.ps1 file in the same folder, which is the application code package folder. Per modificare questa cartella, impostare la cartella di lavoro:To change this folder, set the working folder:

<SetupEntryPoint>
    <ExeHost>
    <Program>MySetup.bat</Program>
    <WorkingFolder>CodePackage</WorkingFolder>
    </ExeHost>
</SetupEntryPoint>

Uso del reindirizzamento della console per il debug localeUse console redirection for local debugging

A volte può essere utile visualizzare l'output della console dall'esecuzione di uno script a scopo di debug.Occasionally, it's useful to see the console output from running a script for debugging purposes. A questo scopo, è possibile impostare criteri di reindirizzamento della console che scrivono l'output in un file.To do this, you can set a console redirection policy, which writes the output to a file. L'output del file viene scritto nella cartella dell'applicazione denominata log nel nodo in cui l'applicazione viene distribuita ed eseguita.The file output is written to the application folder called log on the node where the application is deployed and run. Vedere la posizione in cui si trova nell'esempio precedente.(See where to find this in the preceding example.)

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 seguente illustra come impostare il reindirizzamento della console con un valore FileRetentionCount:The following example shows setting the console redirection with a FileRetentionCount value:

<SetupEntryPoint>
    <ExeHost>
    <Program>MySetup.bat</Program>
    <WorkingFolder>CodePackage</WorkingFolder>
    <ConsoleRedirection FileRetentionCount="10"/>
    </ExeHost>
</SetupEntryPoint>

Se si modifica il file MySetup.ps1 per scrivere un comando Echo, questo verrà scritto nel file di output a scopo di debug:If you now change the MySetup.ps1 file to write an Echo command, this will write to the output file for debugging purposes:

Echo "Test console redirection which writes to the application log folder on the node that the application is deployed to"

Dopo avere eseguito il debug dello script, rimuovere immediatamente i criteri di reindirizzamento della console.After you debug your script, immediately remove this console redirection policy.

Configurare i criteri per i pacchetti di codice del servizioConfigure a policy for service code packages

Nei passaggi precedenti è stato illustrato come applicare i criteri RunAs a SetupEntryPoint.In the preceding steps, you saw how to apply a RunAs policy to SetupEntryPoint. A questo punto è possibile vedere come creare entità diverse che possono essere applicate come criteri del servizio.Let's look a little deeper into how to create different principals that can be applied as service policies.

Creare gruppi di utenti localiCreate local user groups

È possibile definire e creare gruppi di utenti che permettono di aggiungere uno o più utenti a un gruppo.You can define and create user groups that allow one or more users to be added to a 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 seguente illustra un gruppo locale denominato LocalAdminGroup con privilegi di amministratore.The following example shows a local group called 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.

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

Creare utenti localiCreate local users

È 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 (Customer3 nell'esempio seguente).By default, these accounts do not have the same names as those specified in the application manifest (for example, Customer3 in the following sample). Vengono invece generati in modo dinamico e hanno password casuali.Instead, they are dynamically generated and have random passwords.

<Principals>
  <Users>
     <User Name="Customer3" AccountType="LocalUser" />
  </Users>
</Principals>

Se un'applicazione richiede che l'account utente e la password siano uguali in tutti i computer, ad esempio per abilitare l'autenticazione NTLM, il manifesto del cluster deve impostare NTLMAuthenticationEnabled su true.If an application requires that the user account and password be same on all machines (for example, to enable NTLM authentication), the cluster manifest must set NTLMAuthenticationEnabled to true. Il manifesto del cluster deve anche specificare un elemento NTLMAuthenticationPasswordSecret che verrà usato per generare la stessa password in tutti i computer.The cluster manifest must also specify an NTLMAuthenticationPasswordSecret that is used to generate the same password across all machines.

<Section Name="Hosting">
      <Parameter Name="EndpointProviderEnabled" Value="true"/>
      <Parameter Name="NTLMAuthenticationEnabled" Value="true"/>
      <Parameter Name="NTLMAuthenticationPassworkSecret" Value="******" IsEncrypted="true"/>
 </Section>

Assegnare criteri ai pacchetti di codice del servizioAssign policies to the service code packages

La sezione RunAsPolicy di un oggetto ServiceManifestImport specifica l'account nella sezione Principals che deve essere usato per eseguire un pacchetto di codice.The RunAsPolicy section for a ServiceManifestImport specifies the account from the principals section that should be used to run a code package. Associa anche i pacchetti di codice nel manifesto del servizio agli account utente nella sezione Principals.It also associates code packages from the service manifest with user accounts in the principals section. È possibile specificare questa opzione per i punti di ingresso principale o di configurazione oppure specificare All per applicarla a entrambi.You can specify this for the setup or main entry points, or you can specify All to apply it to both. L'esempio seguente illustra l'applicazione di diversi criteri:The following example shows different policies being applied:

<Policies>
<RunAsPolicy CodePackageRef="Code" UserRef="LocalAdmin" EntryPointType="Setup"/>
<RunAsPolicy CodePackageRef="Code" UserRef="Customer3" EntryPointType="Main"/>
</Policies>

Se EntryPointType non è specificato, il valore predefinito è impostato su EntryPointType="Main".If EntryPointType is not specified, the default is set to EntryPointType=”Main”. Specificare l'oggetto SetupEntryPoint risulta particolarmente utile per eseguire determinate operazioni di configurazione con privilegi elevati con un account di sistema,Specifying SetupEntryPoint is especially useful when you want to run certain high-privilege setup operations under a system account. mentre il codice del servizio effettivo può essere eseguito con un account con privilegi inferiori.The actual service code can run under a lower-privilege account.

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'account 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 specified in the principals section.

<Policies>
  <DefaultRunAsPolicy UserRef="MyDefaultAccount"/>
</Policies>

Uso di un utente o un gruppo di dominio di Active DirectoryUse an Active Directory domain group or user

Per un'istanza di Service Fabric installata in Windows Server con il programma di installazione autonomo, è possibile eseguire il servizio con le credenziali per un account utente o di gruppo di Active Directory.For an instance of Service Fabric that was installed on Windows Server by using the standalone installer, you can run the service under the credentials for an Active Directory user or group account. Si tratta di Active Directory locale nel dominio e non di Azure Active Directory (Azure AD).This is Active Directory on-premises within your domain and is not with Azure Active Directory (Azure AD). Usando un utente o un gruppo del dominio, sarà quindi possibile accedere ad altre risorse del dominio (ad esempio, condivisioni file) a cui sono state concesse le autorizzazioni.By using a domain user or group, you can then access other resources in the domain (for example, file shares) that have been granted permissions.

L'esempio seguente illustra un utente di Active Directory denominato TestUser con la password del dominio crittografata con un certificato denominato MyCert.The following example shows an Active Directory user called TestUser with their domain password encrypted by using a certificate called MyCert. È possibile usare il comando Invoke-ServiceFabricEncryptText PowerShell per creare il testo crittografato segreto.You can use the Invoke-ServiceFabricEncryptText PowerShell command to create the secret cipher text. Vedere Gestione dei segreti nelle applicazioni di Service Fabric.See Managing secrets in Service Fabric applications for details.

È necessario distribuire la chiave privata del certificato per decrittografare la password nel computer locale con un metodo fuori banda; in Azure questa operazione viene eseguita usando Azure Resource Manager.You must deploy the private key of the certificate to decrypt the password to the local machine by using an out-of-band method (in Azure, this is via Azure Resource Manager). Quando distribuisce il pacchetto servizio nel computer, Service Fabric può quindi decrittografare il segreto e, con il nome utente, eseguire l'autenticazione ad Active Directory per l'esecuzione con queste credenziali.Then, when Service Fabric deploys the service package to the machine, it is able to decrypt the secret and (along with the user name) authenticate with Active Directory to run under those credentials.

<Principals>
  <Users>
    <User Name="TestUser" AccountType="DomainUser" AccountName="Domain\User" Password="[Put encrypted password here using MyCert certificate]" PasswordEncrypted="true" />
  </Users>
</Principals>
<Policies>
  <DefaultRunAsPolicy UserRef="TestUser" />
  <SecurityAccessPolicies>
    <SecurityAccessPolicy ResourceRef="MyCert" PrincipalRef="TestUser" GrantRights="Full" ResourceType="Certificate" />
  </SecurityAccessPolicies>
</Policies>
<Certificates>

Usare un account del servizio gestito del gruppo.Use a Group Managed Service Account.

Per un'istanza di Service Fabric installata in Windows Server con il programma di installazione autonomo, è possibile eseguire il servizio come account del servizio gestito del gruppo (gMSA).For an instance of Service Fabric that was installed on Windows Server by using the standalone installer, you can run the service as a group Managed Service Account (gMSA). Si noti che si tratta di Active Directory locale nel dominio e non di Azure Active Directory (Azure AD).Note that this is Active Directory on-premises within your domain and is not with Azure Active Directory (Azure AD). Usando un account gMSA, nel Application Manifest non viene archiviata alcuna password o password crittografata.By using a gMSA there is no password or encrypted password stored in the Application Manifest.

L'esempio seguente mostra come creare un account gMSA denominato svc-Test$, come distribuire tale account del servizio gestito ai nodi del cluster e come configurare l'entità utente.The following example shows how to create a gMSA account called svc-Test$; how to deploy that managed service account to the cluster nodes; and how to configure the user principal.

Prerequisiti.Prerequisites.
  • Il dominio richiede una chiave radice del Servizio distribuzione chiavi.The domain needs a KDS root key.
  • Il dominio deve essere a livello funzionale di Windows Server 2012 o versione successiva.The domain needs to be at a Windows Server 2012 or later functional level.
EsempioExample
  1. Chiedere a un amministratore di dominio di Active Directory di creare un account del servizio gestito del gruppo usando il cmdlet New-ADServiceAccount e assicurarsi che PrincipalsAllowedToRetrieveManagedPassword includa tutti i nodi del cluster di Service Fabric.Have an active directory domain administrator create a group managed service account using the New-ADServiceAccount commandlet and ensure that the PrincipalsAllowedToRetrieveManagedPassword includes all of the service fabric cluster nodes. Si noti che AccountName, DnsHostName e ServicePrincipalName devono essere univoci.Note that AccountName, DnsHostName, and ServicePrincipalName must be unique. New-ADServiceAccount -name svc-Test$ -DnsHostName svc-test.contoso.com -ServicePrincipalNames http/svc-test.contoso.com -PrincipalsAllowedToRetrieveManagedPassword SfNode0$,SfNode1$,SfNode2$,SfNode3$,SfNode4$
  2. In ognuno dei nodi del cluster di Service Fabric, ad esempio SfNode0$,SfNode1$,SfNode2$,SfNode3$,SfNode4$, installare e testare l'account del servizio gestito del gruppo.On each of the service fabric cluster nodes (for example, SfNode0$,SfNode1$,SfNode2$,SfNode3$,SfNode4$), install and test the gMSA. Add-WindowsFeature RSAT-AD-PowerShell Install-AdServiceAccount svc-Test$ Test-AdServiceAccount svc-Test$
  3. Configurare l'entità utente e RunAsPolicy per fare riferimento all'utente.Configure the User principal, and configure the RunAsPolicy to reference the user. xml <?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="MyApplicationType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric"> <ServiceManifestImport> <ServiceManifestRef ServiceManifestName="MyServiceTypePkg" ServiceManifestVersion="1.0.0" /> <ConfigOverrides /> <Policies> <RunAsPolicy CodePackageRef="Code" UserRef="DomaingMSA"/> </Policies> </ServiceManifestImport> <Principals> <Users> <User Name="DomaingMSA" AccountType="ManagedServiceAccount" AccountName="domain\svc-Test$"/> </Users> </Principals> </ApplicationManifest>

Assegnare un criterio di accesso di sicurezza per gli endpoint HTTP e HTTPSAssign a security access policy for HTTP and HTTPS endpoints

Se si applicano criteri RunAs a un servizio e il manifesto del servizio dichiara le risorse dell'endpoint con il protocollo HTTP, è necessario specificare SecurityAccessPolicy per garantire che le porte allocate a questi endpoint siano correttamente inserite nell'elenco di controllo di accesso per l'account utente RunAs con cui viene eseguito il servizio.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 to ensure that ports allocated to these endpoints are correctly access-control listed for the RunAs user account that the service runs under. In caso contrario, http.sys non ha accesso al servizio e le chiamate del client hanno esito negativo.Otherwise, http.sys does not have access to the service, and you get failures with calls from the client. L'esempio seguente applica l'account Customer1 a un endpoint denominato EndpointName, a cui assegna diritti di accesso completi.The following example applies the Customer1 account to an endpoint called EndpointName, which gives it full access rights.

<Policies>
   <RunAsPolicy CodePackageRef="Code" UserRef="Customer1" />
   <!--SecurityAccessPolicy is needed if RunAsPolicy is defined and the Endpoint is http -->
   <SecurityAccessPolicy ResourceRef="EndpointName" PrincipalRef="Customer1" />
</Policies>

Per l'endpoint HTTPS, è necessario indicare anche il nome del certificato da restituire al client.For the HTTPS endpoint, you also have to indicate the name of the certificate to return to the client. A tale scopo, è possibile usare EndpointBindingPolicycon il certificato definito nella sezione Certificates del manifesto dell'applicazione.You can do this by using EndpointBindingPolicy, with the certificate defined in a certificates section in the application manifest.

<Policies>
   <RunAsPolicy CodePackageRef="Code" UserRef="Customer1" />
  <!--SecurityAccessPolicy is needed if RunAsPolicy is defined and the Endpoint is http -->
   <SecurityAccessPolicy ResourceRef="EndpointName" PrincipalRef="Customer1" />
  <!--EndpointBindingPolicy is needed if the EndpointName is secured with https -->
  <EndpointBindingPolicy EndpointRef="EndpointName" CertificateRef="Cert1" />
</Policies

Aggiornamento di più applicazioni con endpoint httpsUpgrading multiple applications with https endpoints

È necessario prestare attenzione a non utilizzare la stessa porta per istanze diverse della stessa applicazione quando si usa https.You need to be careful not to use the same port for different instances of the same application when using https. Ciò è dovuto al fatto che Service Fabric non sarà in grado di aggiornare il certificato per una delle istanze dell'applicazione.The reason is that Service Fabric won't be able to upgrade the cert for one of the application instances. Ad esempio, se sia l'applicazione 1 che l'applicazione 2 desiderano eseguire l'aggiornamento del certificato 1 al certificato 2.For example, if application 1 or application 2 both want to upgrade their cert 1 to cert 2. Al momento dell'aggiornamento, Service Fabric potrebbe avere eliminato la registrazione del certificato 1 con http.sys anche se è ancora utilizzato dall'altra applicazione.When the upgrade happens, Service Fabric might have cleaned up the cert 1 registration with http.sys even though the other application is still using it. Per evitare questo problema, Service Fabric rileva che è già presente un'altra istanza dell'applicazione registrata sulla porta con il certificato (a causa di http.sys) e l'operazione ha esito negativo.To prevent this, Service Fabric detects that there is already another application instance registered on the port with the certificate (due to http.sys) and fails the operation.

Pertanto Service Fabric non supporta l'aggiornamento di due servizi diversi mediante la stessa porta in istanze dell'applicazione diverse.Hence Service Fabric does not support upgrading two different services using the same port in different application instances. In altre parole, non è possibile utilizzare lo stesso certificato in servizi diversi sulla stessa porta.In other words, you cannot use the same certificate on different services on the same port. Se è necessario avere un certificato condiviso sulla stessa porta, occorre verificare che i servizi si trovino su computer diversi con vincoli di posizionamento.If you need to have a shared certificate on the same port, you need to ensure that the services are placed on different machines with placement constraints. In alternativa, utilizzare le porte dinamiche di Service Fabric se possibile per ogni servizio in ogni istanza dell'applicazione.Or consider using Service Fabric dynamic ports if possible for each service in each application instance.

Se si verifica un errore di aggiornamento con https, viene visualizzato un avviso indicante che l'API del server Windows HTTP non supporta più certificati per le applicazioni che condividono una porta.If you see an upgrade fail with https, an error warning saying "The Windows HTTP Server API does not support multiple certificates for applications that share a port.”

Esempio completo del manifesto dell'applicazioneA complete application manifest example

Il manifesto dell'applicazione seguente illustra molte delle impostazioni:The following application manifest shows many of the different settings:

<?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="Application3Type" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <Parameters>
      <Parameter Name="Stateless1_InstanceCount" DefaultValue="-1" />
   </Parameters>
   <ServiceManifestImport>
      <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
      <ConfigOverrides />
      <Policies>
         <RunAsPolicy CodePackageRef="Code" UserRef="Customer1" />
         <RunAsPolicy CodePackageRef="Code" UserRef="LocalAdmin" EntryPointType="Setup" />
        <!--SecurityAccessPolicy is needed if RunAsPolicy is defined and the Endpoint is http -->
         <SecurityAccessPolicy ResourceRef="EndpointName" PrincipalRef="Customer1" />
        <!--EndpointBindingPolicy is needed the EndpointName is secured with https -->
        <EndpointBindingPolicy EndpointRef="EndpointName" CertificateRef="Cert1" />
     </Policies>
   </ServiceManifestImport>
   <DefaultServices>
      <Service Name="Stateless1">
         <StatelessService ServiceTypeName="Stateless1Type" InstanceCount="[Stateless1_InstanceCount]">
            <SingletonPartition />
         </StatelessService>
      </Service>
   </DefaultServices>
   <Principals>
      <Groups>
         <Group Name="LocalAdminGroup">
            <Membership>
               <SystemGroup Name="Administrators" />
            </Membership>
         </Group>
      </Groups>
      <Users>
         <User Name="LocalAdmin">
            <MemberOf>
               <Group NameRef="LocalAdminGroup" />
            </MemberOf>
         </User>
         <!--Customer1 below create a local account that this service runs under -->
         <User Name="Customer1" />
         <User Name="MyDefaultAccount" AccountType="NetworkService" />
      </Users>
   </Principals>
   <Policies>
      <DefaultRunAsPolicy UserRef="LocalAdmin" />
   </Policies>
   <Certificates>
     <EndpointCertificate Name="Cert1" X509FindValue="FF EE E0 TT JJ DD JJ EE EE XX 23 4T 66 "/>
  </Certificates>
</ApplicationManifest>

Passaggi successiviNext steps