Déployer une application Azure Service Fabric avec une identité managée attribuée par le système

Notes

L’activation de l’identité pour une application existante qui a été initialement déployée à l’aide d’applets de commande Azure n’est pas prise en charge.

Pour accéder à la fonctionnalité d’identité managée pour les applications Azure Service Fabric, vous devez d’abord activer le service de jeton d’identité managée sur le cluster. Ce service est responsable de l’authentification des applications Service Fabric à l’aide de leurs identités managées et de l’obtention de jetons d’accès en leur nom. Une fois le service activé, vous pouvez le voir dans Service Fabric Explorer sous la section Système dans le volet gauche, exécuté sous le nom fabric:/System/ManagedIdentityTokenService à côté d’autre services système.

Notes

Le déploiement d’applications Service Fabric avec des identités managées est pris en charge à partir de la version d’API "2019-06-01-preview". Vous pouvez également utiliser la même version d’API pour le type d’application, la version de type d’application et les ressources de service. La version minimale du runtime Service Fabric pris en charge est 6.5 CU2. De plus, l’environnement de build/package doit aussi disposer du Kit de développement logiciel (SDK) .NET Service Fabric (CU2 ou version ultérieure)

Identité managée affectée par le système

Modèle d’application

Pour activer l’application avec une identité managée attribuée par le système, ajoutez la propriété identity à la ressource d’application, avec le type systemAssigned comme indiqué dans l’exemple ci-dessous :

    {
      "apiVersion": "2019-06-01-preview",
      "type": "Microsoft.ServiceFabric/clusters/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": {
        }
      }
    }

Cette propriété déclare, pour Azure Resource Manager, et l’identité managée et les fournisseurs de ressources Service Fabric, respectivement, que cette ressource doit avoir une identité managée (system assigned) implicite.

Package d’application et de service

  1. Mettez à jour le manifeste de l’application pour ajouter un élément ManagedIdentity dans la section Principaux, contenant une seule entrée comme indiqué ci-dessous :

    ApplicationManifest.xml

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

    Cela mappe l’identité assignée à l’application en tant que ressource avec un nom convivial, pour une attribution ultérieure aux services qui composent l’application.

  2. Dans la section ServiceManifestImport correspondant au service auquel est affectée l’identité managée, ajoutez un élément IdentityBindingPolicy, comme indiqué ci-dessous :

    ApplicationManifest.xml

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

    Cet élément assigne l’identité de l’application au service; sans cette attribution, le service ne sera pas en mesure d’accéder à l’identité de l’application. Dans l’extrait de code ci-dessus, l’identité SystemAssigned (qui est un mot clé réservé) est mappée à la définition du service sous le nom convivial WebAdmin.

  3. Mettez à jour le manifeste de service pour ajouter un élément ManagedIdentity à l’intérieur de la section Ressources avec le nom correspondant à la valeur du paramètre ServiceIdentityRef de la définition IdentityBindingPolicy dans le manifeste de l’application :

    ServiceManifest.xml

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

    Il s’agit du mappage équivalent d’une identité à un service, comme décrit ci-dessus, mais du point de vue de la définition de service. L’identité est référencée ici par son nom convivial (WebAdmin), comme déclaré dans le manifeste de l’application.

Étapes suivantes