Identidades administradas para Azure Synapse Analytics
Este artículo ayuda a entender qué es la identidad administrada (anteriormente conocida como Managed Service Identity o MSI) y cómo funciona en Azure Synapse.
Nota
Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.
Información general
Las identidades administradas eliminan la necesidad de administrar las credenciales. Proporcionan una identidad que usa la instancia del servicio al conectarse a recursos que admiten la autenticación de Microsoft Entra. Por ejemplo, el servicio puede usar una identidad administrada para acceder a recursos como Azure Key Vault, donde los administradores de datos pueden almacenar credenciales o acceder a cuentas de almacenamiento de manera segura. El servicio usa la identidad administrada para obtener tokens de Microsoft Entra.
Hay dos tipos de identidades administradas compatibles:
- Asignadas por el sistema: puede habilitar una identidad administrada directamente en una instancia de servicio. Cuando se permite una identidad administrada asignada por el sistema durante la creación del servicio, se crea una identidad en Microsoft Entra asociada al ciclo de vida de esa instancia de servicio. Por diseño, solo ese recurso de Azure puede usar esta identidad para solicitar tokens de Microsoft Entra ID. Por tanto, cuando se elimina el recurso, Azure elimina automáticamente la identidad. Azure Synapse Analytics requiere que se cree una identidad administrada asignada por el sistema junto con el área de trabajo de Synapse.
- Asignado por el usuario: también puede crear una identidad administrada como un recurso de Azure independiente. Puede crear una identidad administrada asignada por el usuario y asignarla a una o varias instancias de un área de trabajo de Synapse. En las identidades administradas asignadas por el usuario, la identidad se administra independientemente de los recursos que la utilicen.
La identidad administrada proporciona las siguientes ventajas:
- Almacenamiento de credenciales en Azure Key Vault, en cuyo caso la identidad administrada se usa para la autenticación de Azure Key Vault.
- Obtenga acceso a almacenes de datos o procesos mediante la autenticación de identidad administrada, como Azure Blob Storage, Azure Data Explorer, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, REST, actividad de Databricks, actividad web y mucho más. Consulte los artículos sobre el conector y las actividades para obtener más información.
- La identidad administrada también se usa para cifrar o descifrar los datos y los metadatos mediante la clave administrada por el cliente almacenada en Azure Key Vault, lo que brinda cifrado doble.
Identidad administrada asignada por el sistema
Nota
La identidad administrada asignada por el sistema también se conoce como "identidad administrada" en otra parte de la documentación y en la interfaz de usuario de Synapse Studio por motivos de compatibilidad con versiones anteriores. Al hacer referencia a una "identidad administrada asignada por el usuario", lo mencionaremos de manera explícita.
Recuperación de una identidad administrada asignada por el sistema mediante Azure Portal
Puede encontrar la información de la identidad administrada en Azure Portal ->Su área de trabajo de Synapse -> Propiedades.
La información de identidad administrada también se mostrará cuando se crea un servicio vinculado que admita la autenticación de identidad administrada, como Azure Blob, Azure Data Lake Storage, Azure Key Vault, etc.
Para conceder permisos, siga estos pasos. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.
Seleccione Access Control (IAM) .
Seleccione Agregar>Agregar asignación de roles.
En la pestaña Miembros, seleccione Identidad administrada y, a continuación, seleccione Seleccionar miembros.
Seleccione su suscripción a Azure.
En Identidad administrada asignada por el sistema, seleccione Área de trabajo de Synapse y, después, seleccione un área de trabajo. También puede usar el identificador de objeto o el nombre del área de trabajo (como nombre de identidad administrada) para encontrar esta identidad. Para obtener el identificador de aplicación de la identidad administrada, use PowerShell.
En la pestaña Revisión y asignación, seleccione Revisión y asignación para asignar el rol.
Recuperación de una identidad administrada asignada por el sistema mediante PowerShell
Al obtener una instancia de servicio específica, se devuelven el identificador de identidad de seguridad y el de inquilino de la identidad administrada del modo siguiente. Use el valor de PrincipalId para conceder acceso:
PS C:\> (Get-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity
IdentityType PrincipalId TenantId
------------ ----------- --------
SystemAssigned aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb aaaabbbb-0000-cccc-1111-dddd2222eeee
Puede obtener el identificador de la aplicación copiando el identificador de la entidad de seguridad anterior y ejecutando a continuación el comando Microsoft Entra ID con el identificador de la entidad de seguridad como parámetro.
PS C:\> Get-AzADServicePrincipal -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ServicePrincipalNames : {00001111-aaaa-2222-bbbb-3333cccc4444, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId : 00001111-aaaa-2222-bbbb-3333cccc4444
DisplayName : <workspaceName>
Id : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
Type : ServicePrincipal
Recuperación de identidad administrada mediante la API de REST
Al obtener una instancia de servicio específica, se devuelven el identificador de identidad de seguridad y el de inquilino de la identidad administrada del modo siguiente.
Llame a la siguiente API en la solicitud:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01
Respuesta: obtendrá una respuesta como la que se muestra en el siguiente ejemplo. La sección "identity" se rellena en consecuencia.
{
"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": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
},
"tags": {}
}
Sugerencia
Para recuperar la identidad administrada de una plantilla de ARM, agregue una sección de salidas en el código JSON de ARM:
{
"outputs":{
"managedIdentityObjectId":{
"type":"string",
"value":"[reference(resourceId('Microsoft.Synapse/workspaces', parameters('<workspaceName>')), '2018-06-01', 'Full').identity.principalId]"
}
}
}
Generación de una identidad administrada asignada por el sistema
La identidad administrada por el sistema se genera de la manera siguiente:
- Cuando se crea un área de trabajo de Synapse mediante Azure Portal o PowerShell, la identidad administrada siempre se crea automáticamente.
- Cuando se crea un área de trabajo mediante SDK, la identidad administrada se crea solo si se especifica "Identity = new ManagedIdentity" en el objeto del área de trabajo de Synapse. Consulte el ejemplo en Inicio rápido de .NET: creación de una factoría de datos.
- Cuando se crea un área de trabajo de Synapse mediante la API de REST, la identidad administrada solo se crea si se especifica la sección "identity" en el cuerpo de la solicitud. Vea el ejemplo que aparece en el Inicio rápido de REST: Crear una factoría de datos.
Si observa que la instancia de servicio no tiene una identidad administrada asociada tras la instrucción Recuperar identidad administrada, puede generar una de forma explícita si la actualiza con el iniciador de identidades mediante programación:
- Generar identidad administrada con PowerShell
- Generar identidad administrada con API de REST
- Generar identidad administrada con una plantilla de Azure Resource Manager
- Generar identidad administrada con SDK
Nota
- La identidad administrada no se puede modificar. La actualización de una instancia de servicio que ya tiene una identidad administrada no tiene ningún impacto, y la identidad administrada se mantiene sin cambios.
- Si actualiza una instancia de servicio que ya tiene una identidad administrada sin especificar el parámetro "identity" en el objeto de factoría o área de trabajo o sin especificar la sección "identity" en el cuerpo de la solicitud de REST, se obtiene un error.
- Cuando se elimina una instancia de servicio, se elimina también la identidad administrada asociada.
Generación de una identidad administrada asignada por el sistema mediante PowerShell
Llame al comando New-AzSynapseWorkspace y verá cómo los campos "Identity" se van generando:
PS C:\> $password = ConvertTo-SecureString -String "****" -AsPlainText -Force
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
Generación de una identidad administrada asignada por el sistema mediante la API REST
Nota
Si intenta actualizar una instancia de servicio que ya tiene una identidad administrada sin especificar el parámetro identity en el objeto de área de trabajo o sin proporcionar una sección identity en el cuerpo de la solicitud de REST, se obtiene un error.
Llame a la API siguiente con la sección "identity" en el cuerpo de la solicitud:
PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01
Cuerpo de la solicitud: agregue "identity": { "type": "SystemAssigned" }.
{
"name": "<workspaceName>",
"location": "<region>",
"properties": {},
"identity": {
"type": "SystemAssigned"
}
}
Respuesta: la identidad administrada se crea automáticamente y la sección "identity" se rellena en consecuencia.
{
"name": "<workspaceName>",
"tags": {},
"properties": {
"provisioningState": "Succeeded",
"loggingStorageAccountKey": "**********",
"createTime": "2021-09-26T04:10:01.1135678Z",
"version": "2018-06-01"
},
"identity": {
"type": "SystemAssigned",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
},
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Synapse/workspaces/<workspaceName>",
"type": "Microsoft.Synapse/workspaces",
"location": "<region>"
}
Generación de una identidad administrada asignada por el sistema mediante una plantilla de Azure Resource Manager
Plantilla: agregue "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"
}
}]
}
Generación de una identidad administrada asignada por el sistema mediante el 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);
Recuperación de una identidad administrada asignada por el sistema
Puede recuperar la identidad administrada desde Azure Portal o mediante programación. Las secciones siguientes le muestran algunos ejemplos.
Sugerencia
Si no ve la identidad administrada, genérela mediante la actualización de la instancia de servicio.
Ejecución de cuadernos de Spark de Azure Synapse con identidad administrada asignada por el sistema
Puede ejecutar fácilmente cuadernos de Spark de Synapse con la identidad administrada asignada por el sistema (o identidad administrada del área de trabajo) si se habilita Ejecutar como identidad administrada en el menú Configurar sesión . Para ejecutar los cuadernos de Spark con identidad administrada del área de trabajo, los usuarios deben tener los siguientes roles de RBAC:
- Operador de proceso de Synapse en el área de trabajo o grupo de Spark seleccionado
- Usuario de credenciales de Synapse en la identidad administrada del área de trabajo
Nota:
Los cuadernos de Synapse y las definiciones de trabajo de Spark solo admiten el uso de la identidad administrada asignada por el sistema a través de servicios vinculados y las API mssparkutils. MSAL y otras bibliotecas de autenticación no pueden usar la identidad administrada asignada por el sistema. En su lugar, puede generar una entidad de servicio y almacenar las credenciales en Key Vault.
Identidad administrada asignada por el usuario
Puede crear, eliminar y administrar identidades administradas asignadas por el usuario en Microsoft Entra ID. Para obtener más información, consulte Creación, enumeración, eliminación o asignación de un rol a una identidad administrada asignada por el usuario mediante Azure Portal.
Para usar una identidad administrada asignada por el usuario, primero debe crear credenciales en la instancia de servicio para UAMI.
Nota:
La identidad administrada asignada por el usuario no se admite actualmente en cuadernos de Synapse ni en definiciones de trabajos de Spark.
Pasos siguientes
Consulte los artículos siguientes que presentan cuándo y cómo usar la identidad administrada:
- Almacenamiento de credenciales en Azure Key Vault.
- Copia de datos con Azure Data Lake Storage Gen1 como origen o destino mediante Azure Data Factory
Vea ¿Qué son las identidades administradas de recursos de Azure? para obtener más información sobre las identidades administradas para recursos de Azure, en las que se basa la identidad administrada de Azure Synapse.