Identité managée pour Azure Synapse

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

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez 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 Microsoft Entra. 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 Microsoft Entra.

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 Microsoft Entra, et 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 à Microsoft Entra ID. 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’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 Synapse Studio pour assurer la 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’un espace de travail Synapse via le portail Azure ou PowerShell, l’identité managée est toujours créée automatiquement.
  • Lors de la création d’un espace de travail Synapse avec le kit de développement logiciel (SDK), l’identité managée n’est créée que si vous spécifiez « Identity = new ManagedIdentity » au moment de la création de l’espace de travail. Consultez l’exemple disponible dans Démarre rapide de .NET - Créer une fabrique de données.
  • Lors de la création d’un espace de travail Synapse à l’aide de l’API REST, l’identité managée n’est créée que si vous 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 New-AzSynapseWorkspace, puis affichez les champs « Identity » qui viennent d’être générés :

PS C:\> $creds = New-Object System.Management.Automation.PSCredential ("ContosoUser", $password)
PS C:\> New-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName> -Location <region> -DefaultDataLakeStorageAccountName <storageAccountName> -DefaultDataLakeStorageFileSystem <fileSystemName> -SqlAdministratorLoginCredential $creds

DefaultDataLakeStorage           : Microsoft.Azure.Commands.Synapse.Models.PSDataLakeStorageAccountDetails
ProvisioningState                : Succeeded
SqlAdministratorLogin            : ContosoUser
VirtualNetworkProfile            :
Identity                         : Microsoft.Azure.Commands.Synapse.Models.PSManagedIdentity
ManagedVirtualNetwork            :
PrivateEndpointConnections       : {}
WorkspaceUID                     : <workspaceUid>
ExtraProperties                  : {[WorkspaceType, Normal], [IsScopeEnabled, False]}
ManagedVirtualNetworkSettings    :
Encryption                       : Microsoft.Azure.Commands.Synapse.Models.PSEncryptionDetails
WorkspaceRepositoryConfiguration :
Tags                             :
TagsTable                        :
Location                         : <region>
Id                               : /subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/
                                   Microsoft.Synapse/workspaces/<workspaceName>
Name                             : <workspaceName>
Type                             : Microsoft.Synapse/workspaces

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 d’espace de travail 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/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01

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

{
    "name": "<workspaceName>",
    "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": "<workspaceName>",
    "tags": {},
    "properties": {
        "provisioningState": "Succeeded",
        "loggingStorageAccountKey": "**********",
        "createTime": "2021-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.Synapse/workspaces/<workspaceName>",
    "type": "Microsoft.Synapse/workspaces",
    "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": "<workspaceName>",
        "apiVersion": "2018-06-01",
        "type": "Microsoft.Synapse/workspaces",
        "location": "<region>",
        "identity": {
            "type": "SystemAssigned"
        }
    }]
}

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

Workspace workspace = new Workspace
{
    Identity = new ManagedIdentity
    {
        Type = ResourceIdentityType.SystemAssigned
    },
    DefaultDataLakeStorage = new DataLakeStorageAccountDetails
    {
        AccountUrl = <defaultDataLakeStorageAccountUrl>,
        Filesystem = <DefaultDataLakeStorageFilesystem>
    },
    SqlAdministratorLogin = <SqlAdministratorLoginCredentialUserName>
    SqlAdministratorLoginPassword = <SqlAdministratorLoginCredentialPassword>,
    Location = <region>
};
client.Workspaces.CreateOrUpdate(resourceGroupName, workspaceName, workspace);

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 sur l’identité managée se trouvent sur le portail Azure -> votre espace de travail Synapse -> Propriétés.

Shows the Azure portal with the system-managed identity object ID for a Synapse workspace.

  • ID d’objet de l’identité managée

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 Espace de travail Synapse, puis sélectionnez un espace de travail. Vous pouvez aussi utiliser l’ID d’objet ou le nom de l’espace de travail (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-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity

IdentityType   PrincipalId                          TenantId                            
------------   -----------                          --------                            
SystemAssigned cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47

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

PS C:\> Get-AzADServicePrincipal -ObjectId cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05

ServicePrincipalNames : {76f668b3-XXXX-XXXX-XXXX-1b3348c75e02, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId         : 76f668b3-XXXX-XXXX-XXXX-1b3348c75e02
DisplayName           : <workspaceName>
Id                    : cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05
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.Synapse/workspaces/{workspaceName}?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.

{
  "properties": {
    "defaultDataLakeStorage": {
      "accountUrl": "https://exampledatalakeaccount.dfs.core.windows.net",
      "filesystem": "examplefilesystem"
    },
    "encryption": {
      "doubleEncryptionEnabled": false
    },
    "provisioningState": "Succeeded",
    "connectivityEndpoints": {
      "web": "https://web.azuresynapse.net?workspace=%2fsubscriptions%2{subscriptionId}%2fresourceGroups%2f{resourceGroupName}%2fproviders%2fMicrosoft.Synapse%2fworkspaces%2f{workspaceName}",
      "dev": "https://{workspaceName}.dev.azuresynapse.net",
      "sqlOnDemand": "{workspaceName}-ondemand.sql.azuresynapse.net",
      "sql": "{workspaceName}.sql.azuresynapse.net"
    },
    "managedResourceGroupName": "synapseworkspace-managedrg-f77f7cf2-XXXX-XXXX-XXXX-c4cb7ac3cf4f",
    "sqlAdministratorLogin": "sqladminuser",
    "privateEndpointConnections": [],
    "workspaceUID": "e56f5773-XXXX-XXXX-XXXX-a0dc107af9ea",
    "extraProperties": {
      "WorkspaceType": "Normal",
      "IsScopeEnabled": false
    },
    "publicNetworkAccess": "Enabled",
    "cspWorkspaceAdminProperties": {
      "initialWorkspaceAdminObjectId": "3746a407-XXXX-XXXX-XXXX-842b6cf1fbcc"
    },
    "trustedServiceBypassEnabled": false
  },
  "type": "Microsoft.Synapse/workspaces",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}",
  "location": "eastus",
  "name": "{workspaceName}",
  "identity": {
    "type": "SystemAssigned",
    "tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47",
    "principalId": "cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05"
  },
  "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.Synapse/workspaces', parameters('<workspaceName>')), '2018-06-01', 'Full').identity.principalId]"
        }
    }
}

Exécuter Azure Synapse Spark Notebooks avec l’identité managée affectée par le système

Vous pouvez facilement exécuter Synapse Spark Notebooks avec l’identité managée affectée par le système (ou l’identité managée de l’espace de travail) en activant Exécuter en tant qu’identité managée à partir du menu Configurer la session. Pour exécuter Spark Notebooks avec une identité managée de l’espace de travail, les utilisateurs doivent avoir les rôles RBAC suivants :

  • Opérateur de capacité de calcul Synapse sur l’espace de travail ou sur le pool Spark sélectionné
  • Utilisateur d’informations d’identification Synapse sur l’identité managée de l’espace de travail

synapse-run-as-msi-1

synapse-run-as-msi-2

synapse-run-as-msi-3

Remarque

Les notebooks Synapse et les définitions de tâche Spark prennent uniquement en charge l’utilisation d’une identité managée affectée par le système via des services liés et les API mssparkutils. MSAL et d’autres bibliothèques d’authentification ne peuvent pas utiliser l’identité managée affectée par le système. Vous pouvez à la place générer un principal de service et stocker les informations d’identification dans Key Vault.

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 Microsoft Entra ID. 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.

Notes

L’identité managée affectée par l’utilisateur n’est actuellement pas prise en charge dans les notebooks Synapse et les définitions de travail Spark.

Étapes suivantes

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

Consultez Présentation des identités managées pour les ressources Azure pour plus d’informations sur les identités managées pour les ressources Azure, sur lesquelles est basée l’identité managée dans Azure Synapse.