Condividi tramite


Distribuire un'applicazione con identità gestita in un cluster gestito di Service Fabric

Per distribuire un'applicazione di Service Fabric con identità gestita, l'applicazione deve essere distribuita tramite Azure Resource Manager, in genere con un modello di Azure Resource Manager. Per altre informazioni su come distribuire un'applicazione di Service Fabric tramite Azure Resource Manager, vedere Distribuire un'applicazione in un cluster gestito usando Azure Resource Manager.

Nota

Le applicazioni non distribuite come risorsa di Azure non possono avere identità gestite.

La distribuzione di applicazioni di Service Fabric con identità gestita è supportata con la versione "2021-05-01" dell'API nei cluster gestiti.

I modelli di cluster gestiti di esempio sono disponibili qui: Modelli di cluster gestiti di Service Fabric

Supporto delle identità gestite nel cluster gestito di Service Fabric

Quando un'applicazione di Service Fabric è configurata con identità gestite per le risorse di Azure e distribuita nel cluster, attiverà la configurazione automatica del servizio token di identità gestita nel cluster gestito di Service Fabric. Questo servizio è responsabile dell'autenticazione delle applicazioni di Service Fabric usando le identità gestite e di ottenere i token di accesso per loro conto. Dopo aver abilitato il servizio, è possibile visualizzarlo in Service Fabric Explorer nella sezione Sistema nel riquadro sinistro, in esecuzione sotto il nome fabric:/System/ManagedIdentityTokenService.

Nota

La prima volta che un'applicazione viene distribuita con identità gestite, si prevede di visualizzare una distribuzione una tantum più lunga a causa della modifica automatica della configurazione del cluster. L'operazione richiederà da 15 minuti per un cluster di zona a 45 minuti per un cluster con estensione della zona. Se sono presenti altre distribuzioni in anteprima, la configurazione dell'identità gestita dovrà attendere prima il completamento di tali distribuzioni.

La risorsa dell'applicazione supporta l'assegnazione di SystemAssigned o UserAssigned e l'assegnazione, come illustrato nel frammento di codice seguente.

{
  "type": "Microsoft.ServiceFabric/managedclusters/applications",
  "apiVersion": "2021-05-01",
  "identity": {
    "type": "SystemAssigned",
    "userAssignedIdentities": {}
  },
}

Informazioni di riferimento JSON complete

Identità assegnata dall'utente

Per abilitare l'applicazione con identità assegnata dall'utente, aggiungere prima la proprietà identity alla risorsa dell'applicazione con tipo userAssigned e le identità assegnate dall'utente a cui si fa riferimento. Aggiungere quindi una sezione managedIdentities all'interno della sezione properties per la risorsa dell'applicazione che contiene un elenco di nomi descrittivi al mapping principalId per ognuna delle identità assegnate dall'utente. Per altre informazioni sulle identità assegnate dall'utente, vedere Creare, elencare o eliminare un'identità gestita assegnata dall'utente.

Modello di applicazione

Per abilitare l'applicazione con identità assegnata dall'utente, aggiungere prima la proprietà identity alla risorsa dell'applicazione con tipo userAssigned e le identità assegnate dall'utente a cui si fa riferimento, quindi aggiungere un oggetto managedIdentities all'interno della sezione delle proprietà che contiene un elenco di nomi descrittivi al mapping principalId per ogni identità assegnata dall'utente.

{
  "apiVersion": "2021-05-01",
  "type": "Microsoft.ServiceFabric/managedclusters/applications",
  "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[parameters('applicationVersion')]",
    "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
  ],
  "identity": {
    "type" : "userAssigned",
    "userAssignedIdentities": {
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]": {}
    }
  },
  "properties": {
    "version": "[parameters('applicationVersion')]",
    "parameters": {
    },
    "managedIdentities": [
      {
        "name" : "[parameters('userAssignedIdentityName')]",
        "principalId" : "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName')), '2018-11-30').principalId]"
      }
    ]
  }
}

Nell'esempio precedente il nome della risorsa dell'identità assegnata dall'utente viene usato come nome descrittivo dell'identità gestita per l'applicazione. Gli esempi seguenti presuppongono che il nome descrittivo effettivo sia "AdminUser".

Pacchetto dell'applicazione

  1. Per ogni identità definita nella managedIdentities sezione del modello di Azure Resource Manager, aggiungere un <ManagedIdentity> tag nel manifesto dell'applicazione nella sezione Entità . L'attributo Name deve corrispondere alla name proprietà definita nella managedIdentities sezione .

    ApplicationManifest.xml

      <Principals>
        <ManagedIdentities>
          <ManagedIdentity Name="AdminUser" />
        </ManagedIdentities>
      </Principals>
    
  2. Nella sezione ServiceManifestImport aggiungere un identityBindingPolicy per il servizio che usa l'identità gestita. Questo criterio esegue il mapping dell'identità AdminUser a un nome di identità specifico del servizio che deve essere aggiunto nel manifesto del servizio in un secondo momento.

    ApplicationManifest.xml

      <ServiceManifestImport>
        <Policies>
          <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" />
        </Policies>
      </ServiceManifestImport>
    
  3. Aggiornare il manifesto del servizio per aggiungere managedIdentity all'interno della sezione Resources con il nome corrispondente ServiceIdentityRef a nel IdentityBindingPolicy del manifesto dell'applicazione:

    ServiceManifest.xml

      <Resources>
        ...
        <ManagedIdentities DefaultIdentity="WebAdmin">
          <ManagedIdentity Name="WebAdmin" />
        </ManagedIdentities>
      </Resources>
    

Identità gestita assegnata dal sistema

Modello di applicazione

Per abilitare l'applicazione con un'identità gestita assegnata dal sistema, aggiungere la proprietà identity alla risorsa dell'applicazione, con il tipo systemAssigned come illustrato nell'esempio seguente:

    {
      "apiVersion": "2021-05-01",
      "type": "Microsoft.ServiceFabric/managedclusters/applications",
      "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]"
      ],
      "identity": {
        "type" : "systemAssigned"
      },
      "properties": {
        "typeName": "[parameters('applicationTypeName')]",
        "typeVersion": "[parameters('applicationTypeVersion')]",
        "parameters": {
        }
      }
    }

Questa proprietà dichiara (rispettivamente a Azure Resource Manager e ai provider di risorse di Identità gestita e Service Fabric) che questa risorsa deve avere un'identità gestita implicita (system assigned).

Pacchetto dell'applicazione e del servizio

  1. Aggiornare il manifesto dell'applicazione per aggiungere un elemento ManagedIdentity nella sezione Principals contenente una singola voce, come illustrato di seguito:

    ApplicationManifest.xml

    <Principals>
      <ManagedIdentities>
        <ManagedIdentity Name="SystemAssigned" />
      </ManagedIdentities>
    </Principals>
    

    In questo modo l'identità assegnata all'applicazione viene mappata come risorsa a un nome descrittivo, per un'ulteriore assegnazione ai servizi che comprendono l'applicazione.

  2. Nella sezione ServiceManifestImport corrispondente al servizio a cui viene assegnata l'identità gestita aggiungere un elemento IdentityBindingPolicy, come indicato di seguito:

    ApplicationManifest.xml

      <ServiceManifestImport>
        <Policies>
          <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" />
        </Policies>
      </ServiceManifestImport>
    

    Questo elemento assegna l'identità dell'applicazione al servizio; senza questa assegnazione, il servizio non sarà in grado di accedere all'identità dell'applicazione. Nel frammento di codice precedente, l'identità SystemAssigned (che è una parola chiave riservata) viene mappata alla definizione del servizio sotto il nome WebAdmindescrittivo .

  3. Aggiornare il manifesto del servizio per aggiungere un elemento ManagedIdentity all'interno della sezione Resources con il nome corrispondente al valore dell'impostazione ServiceIdentityRef dalla IdentityBindingPolicy definizione nel manifesto dell'applicazione:

    ServiceManifest.xml

      <Resources>
        ...
        <ManagedIdentities DefaultIdentity="WebAdmin">
          <ManagedIdentity Name="WebAdmin" />
        </ManagedIdentities>
      </Resources>
    

    Si tratta del mapping equivalente di un'identità a un servizio come descritto in precedenza, ma dal punto di vista della definizione del servizio. L'identità viene a cui fa riferimento il nome descrittivo (WebAdmin), come dichiarato nel manifesto dell'applicazione.

Passaggi successivi