Compartilhar via


Identidades gerenciadas para o Azure Synapse Analytics

Este artigo ajuda você a entender a identidade gerenciada (antes conhecida como Identidade de Serviço Gerenciada/MSI) e como ela funciona no Azure Synapse.

Observação

Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.

Visão geral

As identidades gerenciadas eliminam a necessidade de gerenciar credenciais. As identidades gerenciadas fornecem uma identidade para a instância de serviço ao se conectar a recursos que dão suporte à autenticação do Microsoft Entra. Por exemplo, o serviço pode usar uma identidade gerenciada para acessar recursos como o Azure Key Vault, em que administradores de dados podem armazenar credenciais de maneira segura ou acessar contas de armazenamento. O serviço usa a identidade gerenciada para obter tokens do Microsoft Entra.

Há dois tipos de identidades gerenciadas com suporte.

  • Atribuído pelo sistema: você pode habilitar uma identidade gerenciada diretamente em uma instância de serviço. Quando você permite uma identidade gerenciada atribuída pelo sistema durante a criação do serviço, uma identidade é criada no Microsoft Entra associada ao ciclo de vida dessa instância de serviço. Por design, somente o recurso do Azure pode usar essa identidade para solicitar tokens do Microsoft Entra ID. Assim, quando o recurso é excluído, o Azure exclui automaticamente a identidade para você. O Azure Synapse Analytics exige que uma identidade gerenciada atribuída pelo sistema seja criada junto com o espaço de trabalho do Synapse.
  • Atribuídas pelo usuário: também é possível criar uma identidade gerenciada como um recurso independente do Azure. Você pode criar uma identidade gerenciada atribuída pelo usuário e atribuí-la a uma ou mais instâncias de um workspace do Synapse. Em identidades gerenciadas atribuídas pelo usuário, a identidade é gerenciada separadamente dos recursos que a usam.

A identidade gerenciada oferece os seguintes benefícios:

  • Armazenar credenciais no Azure Key Vault, no qual a identidade gerenciada por caso é usada para autenticação do Azure Key Vault.
  • Acessar armazenamentos de dados ou computações usando a autenticação de identidade gerenciada, incluindo o armazenamento de Blobs do Azure, Azure Data Explorer, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Banco de Dados SQL do Azure, Instância Gerenciada de SQL do Azure, Azure Synapse Analytics, REST, atividade do Databricks, atividade da Web e muito mais. Verifique os artigos do conector e da atividade para obter detalhes.
  • A identidade gerenciada também é usada para criptografar e descriptografar dados e metadados usando a chave gerenciada pelo cliente armazenada no Azure Key Vault, proporcionando a criptografia dupla.

Identidade gerenciada atribuída pelo sistema

Observação

A identidade gerenciada atribuída pelo sistema também é conhecida como 'identidade gerenciada' em outro lugar da documentação e na interface do usuário do Synapse Studio para fins de compatibilidade com versões anteriores. Mencionaremos explicitamente a 'identidade gerenciada atribuída pelo usuário' ao nos referirmos a ela.

Recuperar identidade gerenciada atribuída pelo sistema usando o portal do Azure

Você pode encontrar as informações de identidade gerenciada no portal do Azure –> seu workspace do Synapse –> Propriedades.

Captura de tela do portal do Azure com a ID do objeto de identidade gerenciada pelo sistema para um workspace do Synapse.

As informações da identidade gerenciada também aparecerão quando você criar um serviço vinculado, que dá suporte à autenticação de identidade gerenciada, como Blob do Azure, Azure Data Lake Storage, Azure Key Vault etc.

Para conceder permissões, siga estas etapas. Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.

  1. Selecione IAM (Controle de acesso) .

  2. Selecione Adicionar>Adicionar atribuição de função.

    Captura de tela que mostra a página Controle de Acesso (IAM) com o menu Adicionar atribuição de função aberto.

  3. Na guia Membros, selecione Identidade gerenciadae selecione Selecionar membros.

  4. Selecione sua assinatura do Azure.

  5. Em Identidade gerenciada atribuída pelo sistema, selecione o workspace do Synapse e selecione um workspace. Use também a ID do objeto ou o nome do workspace (como o nome da identidade gerenciada) para localizar essa identidade. Para obter a ID do aplicativo da identidade gerenciada, use o PowerShell.

  6. Na guia Examinar + atribuir, selecione Examinar + atribuir para atribuir a função.

Recuperar identidade gerenciada atribuída pelo sistema usando o PowerShell

A ID da entidade de segurança da identidade gerenciada e a ID de locatário serão retornadas ao obter uma instância de serviço específica conforme a seguir. Use o PrincipalId para conceder acesso:

PS C:\> (Get-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity

IdentityType   PrincipalId                          TenantId                            
------------   -----------                          --------                            
SystemAssigned aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb aaaabbbb-0000-cccc-1111-dddd2222eeee

Você pode obter a ID do aplicativo copiando a ID da entidade de segurança acima e, em seguida, executando abaixo do comando da ID do Microsoft Entra com a ID da entidade de segurança 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

Recuperar a identidade gerenciada usando a API REST

A ID da entidade de segurança da identidade gerenciada e a ID de locatário serão retornadas ao obter uma instância de serviço específica conforme a seguir.

Chame a API abaixo na solicitação:

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

Resposta: você receberá uma resposta como mostrado no exemplo abaixo. A seção "identity" é populada de acordo.

{
  "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": {}
}

Dica

Para recuperar a identidade gerenciada de um modelo do ARM, adicione uma seção de saídas no JSON do ARM:

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

Gerar identidade gerenciada atribuída pelo sistema

A identidade gerenciada atribuída pelo sistema é gerada da seguinte maneira:

  • Ao criar um workspace do Synapse por meio do portal do Azure ou do PowerShell, a identidade gerenciada sempre será criada automaticamente.
  • Ao criar um workspace por meio do SDK, a identidade gerenciada será criada somente se você especificar "Identity = new ManagedIdentity" no objeto do workspace do Synapse para a criação. Veja o exemplo em Guia de início rápido do .NET – Criar um data factory.
  • Ao criar o workspace do Synapse por meio da API REST, a identidade gerenciada será criada somente se você especificar a seção "identidade" no corpo da solicitação. Consulte o exemplo do início rápido do REST - criar data factory.

Se você achar que a instância de serviço não tem uma identidade gerenciada associada seguindo a instrução recuperar a identidade gerenciada, você pode gerar uma atualizando o iniciador de identidade de forma programática:

Observação

  • A identidade gerenciada não pode ser modificada. Atualizar uma instância de serviço que já tem uma identidade gerenciada não terá nenhum impacto, e a identidade gerenciada permanecerá inalterada.
  • Se você atualizar uma instância de serviço que já tem uma identidade gerenciada sem especificar o parâmetro "identity" nos objetos de fábrica ou de espaço de trabalho, ou sem especificar a seção "identity" no corpo da solicitação REST, você receberá um erro.
  • Quando você exclui uma instância de serviço, a identidade gerenciada associada será excluída junto.

Identidade gerenciada atribuída pelo sistema usando o PowerShell

Chame o comando New-AzSynapseWorkspace e você verá os campos "Identity" sendo recentemente gerados:

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

Gerar identidade gerenciada atribuída pelo sistema usando a API REST

Observação

Se você tentar atualizar uma instância de serviço que já tem uma identidade gerenciada sem especificar o parâmetro identity no objeto de espaço de trabalho, ou sem fornecer uma seção identity no corpo da solicitação REST, você receberá um erro.

Chame a API abaixo com a seção "identity" no corpo da solicitação:

PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01

Corpo da solicitação: adicionar "identity": {"type": "SystemAssigned"}.

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

Resposta: a identidade gerenciada é criada automaticamente e a seção "identity" é preenchida de acordo.

{
    "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>"
}

Gerar identidade gerenciada usando um modelo do Azure Resource Manager

Modelo: adicionar "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"
        }
    }]
}

Gerar identidade gerenciada atribuída pelo sistema usando ao 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);

Recuperar a identidade gerenciada atribuída pelo sistema

Você pode recuperar a identidade gerenciada no portal do Azure ou de forma programática. As seções a seguir mostram alguns exemplos.

Dica

Se você não vir a identidade gerenciada, gere a identidade gerenciada atualizando sua instância de serviço.

Executar os Notebooks do Spark do Azure Synapse com a identidade gerenciada atribuída pelo sistema

Você pode executar facilmente os Notebooks do Spark do Synapse com a identidade gerenciada atribuída pelo sistema (ou identidade gerenciada do workspace) habilitando Executar como identidade gerenciada no menu Configurar sessão. Para executar os Notebooks do Spark com a identidade gerenciada do workspace, os usuários precisam ter as seguintes funções RBAC:

  • Operador de Computação do Synapse no workspace do pool do Spark selecionado
  • Usuário da Credencial do Synapse na identidade gerenciada do workspace

synapse-run-as-msi-1

synapse-run-as-msi-2

synapse-run-as-msi-3

Observação

Os notebooks do Synapse e as definições de trabalho do Spark só dão suporte ao uso de identidade gerenciada atribuída pelo sistema por meio de serviços vinculados e as APIs mssparkutils. A MSAL e outras bibliotecas de autenticação não podem usar a identidade gerenciada atribuída pelo sistema. Em vez disso, você pode gerar uma entidade de serviço e armazenar as credenciais no Key Vault.

Identidade gerenciada atribuída pelo usuário

Você pode criar, excluir, gerenciar identidades gerenciadas atribuídas pelo usuário na ID do Microsoft Entra. Para saber mais, consulte Criar, listar, excluir ou atribuir uma função a uma identidade gerenciada atribuída pelo usuário usando o portal do Azure.

Para usar uma identidade gerenciada atribuída ao usuário, você deve primeiro criar credenciais em sua instância de serviço para a UAMI.

Observação

A Identidade Gerenciada atribuída pelo usuário não tem suporte atualmente nos notebooks do Synapse e nas definições de trabalho do Spark.

Próximas etapas

Confira os seguintes artigos que apresentam quando e como usar a identidade gerenciada:

Confira Visão geral de identidades gerenciadas para recursos do Azure para ver mais informações sobre identidades gerenciadas para recursos do Azure, na qual a identidade gerenciada no Azure Synapse se baseia.