Identité managée pour Azure Data Factory et Azure Synapse

S’APPLIQUE À : Azure Data Factory Azure Synapse Analytics

Cet article vous aide à comprendre l’identité managée (anciennement Managed Service Identity/MSI) et son fonctionnement dans Azure Data Factory et Azure Synapse.

Notes

Cet article utilise le module Azure Az PowerShell, qui est le module PowerShell recommandé pour interagir avec Azure. Pour démarrer avec le module Az PowerShell, consulter Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Vue d’ensemble

Les identités managées éliminent la nécessité de gérer les informations d’identification. Les identités managées fournissent une identité pour l’instance de service lors de la connexion à des ressources qui prennent en charge l’authentification Azure Active Directory (Azure AD). Par exemple, le service peut utiliser une identité managée pour accéder à des ressources comme Azure Key Vault, où les administrateurs de données peuvent stocker des informations d’identification ou accéder à des comptes de stockage de manière sécurisée. Le service utilise l’identité managée pour obtenir des jetons Azure AD.

Il existe deux types d’identités managées prises en charge :

  • Affecté par le système : vous pouvez activer une identité managée directement sur une instance de service. Quand vous autorisez une identité managée affectée par le système durant la création du service, une identité est créée dans Azure AD ; cette identité est liée au cycle de vie de l’instance de service. Par défaut, seule cette ressource Azure peut utiliser cette identité pour demander des jetons à Azure AD. Ainsi, quand la ressource est supprimée, Azure supprime automatiquement l’identité. Azure Synapse Analytics exige qu’une identité managée affectée par le système soit créée avec l’espace de travail Synapse.
  • Affectées par l’utilisateur : vous pouvez également créer une identité managée en tant que ressource Azure autonome. Vous pouvez créer une identité managée affectée par l’utilisateur et l’attribuer à une ou plusieurs instances d’une fabrique de données ou d’un espace de travail Synapse. Une identité managée affectée par l’utilisateur est gérée séparément des ressources qui l’utilisent.

L’identité managée offre les avantages suivants :

  • Stocker des informations d’identification dans Azure Key Vault, auquel cas l’identité managée est utilisée pour l’authentification auprès d’Azure Key Vault.
  • Accédez aux magasins de données ou aux calculs à l’aide de l’authentification d’identité managée, y compris le stockage Blob Azure, Azure Data Explorer, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, REST, une activité Databricks, une activité web, etc. Pour plus d’informations, consultez les articles relatifs au connecteur et à l’activité.
  • L’identité managée est également utilisée pour chiffrer/déchiffrer les données et les métadonnées au moyen de la clé gérée par le client qui est stockée dans Azure Key Vault, offrant ainsi un chiffrement double.

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

Notes

L’identité managée affectée par le système est également appelée « identité managée » ailleurs dans la documentation et dans l’interface utilisateur de Data Factory Studio et de Synapse Studio à des fins de compatibilité descendante. Nous indiquerons explicitement « identité managée affectée par l’utilisateur » lorsque nous ferons référence à cette notion.

Générer l'identité managée affectée par le système

L’identité managée affectée par le système est générée comme suit :

  • Lors de la création d’une fabrique de données ou d’un espace de travail Synapse via le portail Azure ou PowerShell, l’identité managée est toujours créée automatiquement.
  • Quand vous créez une fabrique de données ou un espace de travail via le SDK, l’identité managée est créée seulement si vous spécifiez « Identity = new FactoryIdentity() » dans l’objet de fabrique ou « Identity = new ManagedIdentity» dans l’objet d’espace de travail Synapse pour la création. Consultez les exemples dans Démarrage rapide .NET - Créer une fabrique de données.
  • Lors de la création d’une fabrique de données ou d’un espace de travail Synapse grâce à l’API REST, l’identité managée n’est créée que si vous le spécifiez la section « identity » dans le corps de la requête. Consultez l’exemple dans Démarrage rapide REST - Créer une fabrique de données.

Si vous constatez que votre instance de service n’est pas associée à une identité managée après l’instruction retrieve managed identity, vous pouvez en générer une explicitement par programmation, en la mettant à jour avec l’initiateur d’identité :

Notes

  • L’identité managée ne peut pas être modifiée. La mise à jour d’une instance de service qui possède déjà une identité managée n’aura aucun effet et l’identité managée restera inchangée.
  • Si vous mettez à jour une instance de service qui dispose déjà d’une identité managée, sans spécifier le paramètre « identity » dans l’objet fabrique ou espace de travail, ou sans spécifier la section « identity » dans le corps de la requête REST, vous recevez un message d’erreur.
  • Lorsque vous supprimez une instance de service, l’identité managée associée est également supprimée.

Générer l’identité managée affectée par le système en utilisant PowerShell

Appelez la commande Set-AzDataFactoryV2, vous verrez alors les champs « identity » qui viennent d’être générés :

PS C:\> Set-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName> -Location <region>

DataFactoryName   : ADFV2DemoFactory
DataFactoryId     : /subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/ADFV2DemoFactory
ResourceGroupName : <resourceGroupName>
Location          : East US
Tags              : {}
Identity          : Microsoft.Azure.Management.DataFactory.Models.FactoryIdentity
ProvisioningState : Succeeded

Générer l’identité managée affectée par le système en utilisant l’API REST

Notes

Si vous tentez de mettre à jour une instance de service qui possède déjà une identité managée sans spécifier le paramètre Identity dans l’objet de fabrique ou fournir de section Identity dans le corps de la requête REST, vous obtiendrez une erreur.

Appelez l’API ci-dessous avec la section « identity » dans le corps de la demande :

PATCH https://management.azure.com/subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<data factory name>?api-version=2018-06-01

Corps de la requête : add "identity": { "type": "SystemAssigned" }.

{
    "name": "<dataFactoryName>",
    "location": "<region>",
    "properties": {},
    "identity": {
        "type": "SystemAssigned"
    }
}

Réponse : l’identité managée est créée automatiquement, et la section « identity » est remplie en conséquence.

{
    "name": "<dataFactoryName>",
    "tags": {},
    "properties": {
        "provisioningState": "Succeeded",
        "loggingStorageAccountKey": "**********",
        "createTime": "2017-09-26T04:10:01.1135678Z",
        "version": "2018-06-01"
    },
    "identity": {
        "type": "SystemAssigned",
        "principalId": "765ad4ab-XXXX-XXXX-XXXX-51ed985819dc",
        "tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>",
    "type": "Microsoft.DataFactory/factories",
    "location": "<region>"
}

Générer l’identité managée affectée par le système en utilisant un modèle Azure Resource Manager

Modèle : add "identity": { "type": "SystemAssigned" }.

{
    "contentVersion": "1.0.0.0",
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "resources": [{
        "name": "<dataFactoryName>",
        "apiVersion": "2018-06-01",
        "type": "Microsoft.DataFactory/factories",
        "location": "<region>",
        "identity": {
            "type": "SystemAssigned"
        }
    }]
}

Générer l’identité managée affectée par le système en utilisant le SDK

Appelez la fonction create_or_update avec Identity=new FactoryIdentity(). Exemple de code utilisant NET :

Factory dataFactory = new Factory
{
    Location = <region>,
    Identity = new FactoryIdentity()
};
client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);

Récupérer l’identité managée affectée par le système

Vous pouvez récupérer l’identité managée à partir du portail Azure ou par programmation. Les sections suivantes vous montrent quelques exemples.

Conseil

Si vous ne voyez pas l’identité managée, générez l’identité managée en mettant à jour votre instance de service.

Récupérer l’identité managée affectée par le système en utilisant le portail Azure

Les informations relatives à l’identité managée sont disponibles sur le portail Azure -> votre fabrique de données ou votre espace de travail Synapse -> Propriétés.

Shows the Azure portal with the system-managed identity object ID and Identity Tenant for an Azure Data Factory.

  • ID d’objet de l’identité managée
  • Locataire de l’identité managée (applicable uniquement à Azure Data Factory)

Les informations relatives à l'identité managée apparaissent également lorsque vous créez un service lié qui prend en charge l'authentification de l'identité managée, comme Azure Blob, Azure Data Lake Storage, Azure Key Vault, etc.

Pour accorder des autorisations, suivez ces étapes. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.

  1. Sélectionnez Contrôle d’accès (IAM) .

  2. Sélectionnez Ajouter>Ajouter une attribution de rôle.

    Screenshot that shows Access control (IAM) page with Add role assignment menu open.

  3. Sous l’onglet Membres, sélectionnez Identité managée, puis Sélectionner des membres.

  4. Sélectionnez votre abonnement Azure.

  5. Sous Identité managée affectée par le système, sélectionnez Fabrique de données, puis sélectionnez une fabrique de données. Vous pouvez aussi utiliser l’ID d’objet ou le nom de la fabrique de données (comme nom d’identité managée) pour trouver cette identité. Pour récupérer l’ID d’application de l’identité managée, utilisez PowerShell.

  6. Dans l’onglet Passer en revue + affecter, sélectionnez Passer en revue + affecter pour affecter le rôle.

Récupérer l’identité managée affectée par le système en utilisant PowerShell

L’ID de principal et l’ID de locataire de l’identité managée seront renvoyés lorsque vous aurez obtenu une instance de service spécifique, comme illustré ci-dessous. Utilisez le paramètre PrincipalId pour octroyer l'accès :

PS C:\> (Get-AzDataFactoryV2 -ResourceGroupName <resourceGroupName> -Name <dataFactoryName>).Identity

PrincipalId                          TenantId
-----------                          --------
765ad4ab-XXXX-XXXX-XXXX-51ed985819dc 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47

Pour obtenir l'ID de l'application, copiez l'ID du principal, puis exécutez la commande Azure Active Directory ci-dessous avec l'ID du principal comme paramètre.

PS C:\> Get-AzADServicePrincipal -ObjectId 765ad4ab-XXXX-XXXX-XXXX-51ed985819dc

ServicePrincipalNames : {76f668b3-XXXX-XXXX-XXXX-1b3348c75e02, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId         : 76f668b3-XXXX-XXXX-XXXX-1b3348c75e02
DisplayName           : ADFV2DemoFactory
Id                    : 765ad4ab-XXXX-XXXX-XXXX-51ed985819dc
Type                  : ServicePrincipal

Récupérer l’identité managée à l’aide d’API REST

L’ID de principal et l’ID de locataire de l’identité managée seront renvoyés lorsque vous aurez obtenu une instance de service spécifique, comme illustré ci-dessous.

Appeler l’API ci-dessous dans la requête :

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataFactory/factories/{factoryName}?api-version=2018-06-01

Réponse : Vous obtiendrez une réponse comme indiqué dans l’exemple ci-dessous. La section « identité » est remplie en conséquence.

{
    "name":"<dataFactoryName>",
    "identity":{
        "type":"SystemAssigned",
        "principalId":"554cff9e-XXXX-XXXX-XXXX-90c7d9ff2ead",
        "tenantId":"72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id":"/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>",
    "type":"Microsoft.DataFactory/factories",
    "properties":{
        "provisioningState":"Succeeded",
        "createTime":"2020-02-12T02:22:50.2384387Z",
        "version":"2018-06-01",
        "factoryStatistics":{
            "totalResourceCount":0,
            "maxAllowedResourceCount":0,
            "factorySizeInGbUnits":0,
            "maxAllowedFactorySizeInGbUnits":0
        }
    },
    "eTag":"\"03006b40-XXXX-XXXX-XXXX-5e43617a0000\"",
    "location":"<region>",
    "tags":{

    }
}

Conseil

Pour récupérer l’identité managée à partir d’un modèle ARM, ajoutez une section sorties dans le JSON ARM :

{
    "outputs":{
        "managedIdentityObjectId":{
            "type":"string",
            "value":"[reference(resourceId('Microsoft.DataFactory/factories', parameters('<dataFactoryName>')), '2018-06-01', 'Full').identity.principalId]"
        }
    }
}

Identité managée affectée par l’utilisateur

Vous pouvez créer, supprimer et gérer les identités managées affectées par l’utilisateur dans Azure Active Directory. Pour plus d’informations, consultez Créer, lister, supprimer et attribuer un rôle à une identité managée affectée par l’utilisateur à l’aide du portail Azure.

Pour pouvoir utiliser une identité managée affectée par l’utilisateur, vous devez d’abord créer des informations d’identification dans votre instance de service pour l’identité managée affectée par l’utilisateur.

Étapes suivantes

Consultez les rubriques suivantes, qui expliquent quand et comment utiliser l’identité managée :

Pour plus d’informations sur les identités managées pour les ressources Azure, sur lesquelles l’identité managée dans Azure Data Factory et Azure Synapse est basée, consultez Que sont les identités managées pour les ressources Azure ?.