web-dev-qa-db-fra.com

Référencement d'une identité de service géré dans un déploiement de modèle ARM

Lors du déploiement d'une ressource Microsoft.Web avec la nouvelle fonctionnalité MSI, le principId GUID pour l'utilisateur créé est visible après le déploiement. La capture d'écran ci-dessous montre la structure du modèle ARM.

enter image description here

Quelle serait la meilleure façon de récupérer ce GUID plus tard dans le pipeline pour pouvoir attribuer des droits d'accès dans (par exemple) Data Lake Store?

Est-il possible d'utiliser l'une des fonctions de modèle ARM existantes pour le faire?

26
soderstromOlov

J'ai juste lutté avec ça moi-même. La solution qui a fonctionné pour moi a été trouvée profondément dans les commentaires ici .

Essentiellement, vous créez une variable ciblant la ressource que vous créez avec le support MSI. Vous pouvez ensuite utiliser la variable pour extraire les valeurs spécifiques tenantId et principalId. Pas idéal, mais ça marche. Dans mes exemples, je configure les autorisations Key Vault pour une application de fonction.

Pour créer la variable, utilisez la syntaxe ci-dessous.

"variables": {
    "identity_resource_id": "[concat(resourceId('Microsoft.Web/sites', variables('appName')), '/providers/Microsoft.ManagedIdentity/Identities/default')]"
}

Pour obtenir les valeurs réelles de tenantId et principalId, référencez-les avec la syntaxe suivante:

{
    "tenantId": "[reference(variables('identity_resource_id'), '2015-08-31-PREVIEW').tenantId]",
    "objectId": "[reference(variables('identity_resource_id'), '2015-08-31-PREVIEW').principalId]"
}

J'espère que cela aide toute personne qui rencontre le même problème!

53
Sonoilmedico

Voici quelques exemples de modèles: https://github.com/rashidqureshi/MSI-Samples qui montrent a) comment accorder l'accès RBAC à ARM ressources b) comment créer une stratégie d'accès pour keyvault en utilisant le OID du MSI

1
rashid