Usar identidades gerenciadas do Azure no Catálogo do Unity para acessar o armazenamento

Este artigo descreve como usar identidades gerenciadas do Azure para se conectar a contêineres de armazenamento em nome de usuários do Catálogo do Unity.

O que são identidades gerenciadas do Azure?

O Catálogo do Unity pode ser configurado para usar uma identidade gerenciada do Azure para acessar contêineres de armazenamento em nome dos usuários do Catálogo do Unity. As identidades gerenciadas fornecem uma identidade para uso dos aplicativos ao se conectarem a recursos que dão suporte à autenticação do Microsoft Entra ID (antigo Azure Active Directory).

Você pode usar identidades gerenciadas no Catálogo do Unity para dar suporte a dois casos de uso primários:

  • Como uma identidade, para se conectar a contas de armazenamento raiz do metastore (onde as tabelas gerenciadas são armazenadas).
  • Como uma identidade, para se conectar a outras contas de armazenamento externas (para acesso baseado em arquivo ou para acessar conjuntos de dados existentes por meio de tabelas externas).

Configurar o Catálogo do Unity com uma identidade gerenciada proporciona os seguintes benefícios em relação à configuração do Catálogo do Unity com uma entidade de serviço:

Configurar uma identidade gerenciada para o Catálogo do Unity

Para configurar uma identidade gerenciada a ser usada com o Catálogo do Unity, primeiro crie um conector de acesso para o Azure Databricks no Azure. Por padrão, o conector de acesso será implantado com uma identidade gerenciada atribuída pelo sistema. Em vez disso, você pode optar por anexar uma identidade gerenciada atribuída pelo usuário. Em seguida, conceda à identidade gerenciada o acesso à sua conta do Azure Data Lake Storage Gen2 e use o conector de acesso ao criar uma credencial de armazenamento ou metastore do Catálogo do Unity.

Requisitos

O usuário ou a entidade de serviço do Azure que cria o conector de acesso precisa:

  • Ser um Colaborador ou Proprietário de um grupo de recursos do Azure.

O usuário ou entidade de serviço do Azure que concede a identidade gerenciada à conta de armazenamento precisa:

  • Ser um Proprietário ou um usuário com a função RBAC de Administrador de Acesso do Usuário do Azure na conta de armazenamento.

Etapa 1: Criar um conector de acesso para o Azure Databricks

O Conector de Acesso para o Azure Databricks é um recurso próprio do Azure que permite conectar uma identidade gerenciada a uma conta do Azure Databricks.

Cada conector de acesso do Azure Databricks pode conter uma identidade gerenciada atribuída pelo sistema ou uma identidade gerenciada atribuída pelo usuário. Se você quiser usar várias identidades gerenciadas, crie um conector de acesso separado para cada uma.

Usar uma identidade gerenciada atribuída pelo sistema

  1. Entre no Portal do Azure como Colaborador ou Proprietário de um grupo de recursos.

  2. Clique em + Criar ou Criar um recurso.

  3. Pesquise Conector de Acesso para Azure Databricks e selecione-o.

  4. Clique em Criar.

  5. Na guia Básico, aceite, selecione e insira valores para os seguintes campos:

    • Assinatura: esta é a assinatura do Azure na qual o conector de acesso será criado. O padrão é a assinatura do Azure que você está usando no momento. Ela pode ser qualquer assinatura no locatário.
    • Grupo de recursos: esse é o grupo de recursos do Azure no qual o conector de acesso será criado.
    • Nome: insira um nome que indica a finalidade do conector.
    • Região: essa deve ser a mesma região que a conta de armazenamento à qual você se conectará.
  6. Clique em Revisar + Criar.

  7. Quando você vir a mensagem Validação aprovada, clique em Criar.

    Quando a implantação é bem-sucedida, o conector de acesso é implantado com uma identidade gerenciada atribuída pelo sistema.

  8. Quando a implantação estiver concluída, selecione Ir para o recurso.

  9. Anote a ID do Recurso.

    A ID do recurso está no formato:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Usar uma identidade gerenciada atribuída pelo usuário

  1. Se ainda não tiver uma identidade gerenciada atribuída pelo usuário, crie uma nova e anote sua ID de recurso.

    Confira Gerenciar identidades gerenciadas atribuídas pelo usuário.

  2. Entre no Portal do Azure como Colaborador ou Proprietário de um grupo de recursos.

    O grupo de recursos deve estar na mesma região que a conta de armazenamento à qual você deseja se conectar.

  3. Pesquise Implantar um modelo personalizado e selecione-o.

  4. Selecione Criar seu próprio modelo e cole o seguinte modelo no editor:

    {
     "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
     "contentVersion": "1.0.0.0",
     "parameters": {
         "connectorName": {
             "defaultValue": "testConnector",
             "type": "String",
             "metadata": {
                 "description": "The name of the Azure Databricks Access Connector to create."
             }
         },
         "accessConnectorRegion": {
             "defaultValue": "[resourceGroup().location]",
             "type": "String",
             "metadata": {
                 "description": "Location for the access connector resource."
             }
         },
         "userAssignedManagedIdentiy": {
             "type": "String",
             "metadata": {
                 "description": "The resource Id of the user assigned managed identity."
             }
         }
     },
     "resources": [
         {
             "type": "Microsoft.Databricks/accessConnectors",
             "apiVersion": "2023-05-01",
             "name": "[parameters('connectorName')]",
             "location": "[parameters('accessConnectorRegion')]",
             "identity": {
                 "type": "UserAssigned",
                 "userAssignedIdentities": {
                     "[parameters('userAssignedManagedIdentiy')]": {}
                 }
              }
          }
       ]
    }
    
  5. Na guia Básico, aceite, selecione e insira valores para os seguintes campos:

    • Assinatura: a assinatura do Azure na qual o conector de acesso será criado. O padrão é a assinatura do Azure que você está usando no momento. Ela pode ser qualquer assinatura no locatário.
    • Grupo de recursos: um grupo de recursos na mesma região que a conta de armazenamento à qual você irá se conectar.
    • Nome: um nome que indica a finalidade do conector.
    • Região: essa deve ser a mesma região que a conta de armazenamento à qual você se conectará. Você pode escolher o valor pré-preenchido "[resourceGroup().location]" se o grupo de recursos tiver sido criado na mesma região que a conta de armazenamento à qual você irá se conectará.
    • Identidade Gerenciada Atribuída pelo Usuário: a ID de Recurso da identidade gerenciada atribuída pelo usuário que você quer usar.
  6. Clique em Revisar + Criar.

  7. Quando você vir a mensagem Validação aprovada, clique em Criar.

  8. Quando a implantação estiver concluída, selecione Ir para o recurso.

  9. Anote a ID do Recurso.

    A ID do recurso está no formato:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Etapa 2: Conceder o acesso da identidade gerenciada à conta de armazenamento

Para conceder as permissões nesta etapa, você deve ter a função RBAC do Proprietário ou Administrador de Acesso do Usuário em sua conta de armazenamento.

  1. Faça logon em sua conta do Azure Data Lake Storage Gen2.
  2. Acesse Controle de Acesso (IAM), clique em + Adicionar e selecione Adicionar atribuição de função.
  3. Selecione a função Colaborador de dados do blob de armazenamento e clique em Próximo.
  4. Para Atribuir acesso a, selecione Identidade Gerenciada.
  5. Clique em +Selecionar Membrose selecione o conector de acesso do Azure Databricks ou a identidade gerenciada atribuída pelo usuário.
  6. Pesquise o nome do seu conector ou a identidade atribuída pelo usuário, selecione-os e clique em Revisar e Atribuir.

Alternativamente, você pode limitar o acesso à conta de armazenamento concedendo à identidade gerenciada o acesso a um contêiner específico. Siga as mesmas etapas acima, mas conceda a função de Delegador de Blob de Armazenamento na conta de armazenamento e a função de Colaborador de Dados de Blob de Armazenamento no contêiner.

Etapa 3: Conceder acesso à identidade gerenciada a eventos de arquivo

A concessão de acesso de identidade gerenciada a eventos de arquivo permite que o Azure Databricks assine notificações de evento de arquivo emitidas por provedores de nuvem. Isso torna o processamento de arquivos mais eficiente. Para conceder as permissões nesta etapa, você deve ter a função RBAC do Proprietário ou Administrador de Acesso do Usuário em sua conta de armazenamento.

  1. Faça logon em sua conta do Azure Data Lake Storage Gen2.
  2. Acesse Controle de Acesso (IAM), clique em + Adicionar e selecione Adicionar atribuição de função.
  3. Selecione a função Colaborador de dados da fila de armazenamento e clique em Próximo.
  4. Para Atribuir acesso a, selecione Identidade Gerenciada.
  5. Clique em +Selecionar Membrose selecione o conector de acesso do Azure Databricks ou a identidade gerenciada atribuída pelo usuário.
  6. Pesquise o nome do seu conector ou a identidade atribuída pelo usuário, selecione-os e clique em Revisar e Atribuir.

Esta etapa permite que o Azure Databricks configure eventos de arquivo automaticamente. Se não conceder acesso ao Azure Databricks para configurar eventos de arquivo em seu nome, você deverá configurar eventos de arquivo manualmente para cada local. Para conceder as permissões nesta etapa, você deve ter as funções RBAC do Proprietário ou Administrador de Acesso do Usuário em sua identidade gerenciada e o grupo de recursos em que sua conta do Azure Data Lake Storage Gen2 está.

  1. Siga as etapas acima na Etapa 3: Conceder acesso de identidade gerenciada a eventos de arquivo e atribua o Colaborador da Conta de Armazenamento, juntamente com a função Colaborador de Dados da Fila de Armazenamento, à sua identidade gerenciada.
  2. Navegue até o grupo de recursos do Azure no qual sua conta do Azure Data Lake Storage Gen2 está.
  3. Acesse Controle de Acesso (IAM), clique em + Adicionar e selecione Adicionar atribuição de função.
  4. Selecione a função Colaborador de EventGrid EventSubscription e clique em Avançar.
  5. Para Atribuir acesso a, selecione Identidade Gerenciada.
  6. Clique em +Selecionar Membrose selecione o conector de acesso do Azure Databricks ou a identidade gerenciada atribuída pelo usuário.
  7. Pesquise o nome do seu conector ou a identidade atribuída pelo usuário, selecione-os e clique em Revisar e Atribuir.

Usar uma identidade gerenciada para acessar a conta de armazenamento raiz do Catálogo do Unity

Esta seção descreve como conceder à identidade gerenciada o acesso à conta de armazenamento raiz quando você cria um metastore do Catálogo do Unity.

Para saber como atualizar um metastore existente do Catálogo do Unity para usar uma identidade gerenciada, confira Atualizar seu metastore existente do Catálogo do Unity para usar uma identidade gerenciada para acessar seu armazenamento raiz.

  1. Como um administrador de conta do Azure Databricks, entre no Console da conta do Azure Databricks.
  2. Clique no Catalog iconCatálogo.
  3. Clique em Criar Metastore.
  4. Insira os valores dos campos a seguir:
    • Nome para o metastore.

    • Região em que o metastore será implantado.

      Para obter o melhor desempenho, coloque o conector de acesso, os workspaces, o metastore e o local de armazenamento em nuvem na mesma região de nuvem.

    • Caminho do ADLS Gen 2: insira o caminho para o contêiner de armazenamento que você usará como armazenamento raiz para o metastore.

      O prefixo abfss:// é adicionado automaticamente.

    • ID do Conector de Acesso: insira a ID de recurso do conector de acesso do Azure Databricks no formato:

      /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
      
    • ID da Identidade Gerenciada (Opcional): se você criou o conector de acesso usando uma identidade gerenciada atribuída pelo usuário, insira a ID do recurso da identidade gerenciada.

  5. Clique em Criar.
  6. Quando solicitado, selecione os workspaces a serem vinculados ao metastore.

Usar uma identidade gerenciada para acessar o armazenamento gerenciado externo no Catálogo do Unity

O Catálogo do Unity lhe oferece a capacidade de acessar dados existentes em contas de armazenamento usando credenciais de armazenamento e locais externos. As credenciais de armazenamento guardam a identidade gerenciada e os locais externos definem um caminho para o armazenamento, juntamente com uma referência à credencial de armazenamento. Você pode usar essa abordagem para conceder e controlar o acesso aos dados existentes no armazenamento em nuvem e registrar tabelas externas no Catálogo do Unity.

Uma credencial de armazenamento pode conter uma identidade gerenciada ou uma entidade de serviço. O uso de uma identidade gerenciada tem o benefício de permitir que o Catálogo do Unity acesse contas de armazenamento protegidas por regras de rede, o que não é possível usando entidades de serviço, bem como remove a necessidade de gerenciar e alternar segredos.

Para criar uma credencial de armazenamento usando uma identidade gerenciada e atribuir essa credencial de armazenamento a um local externo, siga as instruções em Conectar-se ao armazenamento de objetos de nuvem usando o Catálogo do Unity.

Se o workspace do Azure Databricks for implantado em sua própria rede virtual do Azure, também conhecida como "injeção de VNet", e você usar um firewall de armazenamento para proteger uma conta do Azure Data Lake Storage Gen2, você deverá:

  1. Habilitar o workspace do Azure Databricks para acessar o Armazenamento do Microsoft Azure.
  2. Habilite sua identidade gerenciada para acessar o Armazenamento do Microsoft Azure.

Etapa 1. Habilitar seu workspace do Azure Databricks para acessar o Armazenamento do Azure

Você deve definir as configurações de rede para permitir que seu workspace do Azure Databricks acesse o Azure Data Lake Storage Gen2. Você pode configurar pontos de extremidade privados ou o acesso a partir da sua rede virtual no Azure Data Lake Storage Gen2 para permitir conexões a partir de suas sub-redes à sua conta do Azure Data Lake Storage Gen2.

Para obter instruções, confira Conceder ao seu workspace do Azure Databricks acesso ao Azure Data Lake Storage Gen2.

Etapa 2: Habilitar sua identidade gerenciada para acessar o Armazenamento do Microsoft Azure

Essa etapa será necessária somente se "Permitir que os serviços do Azure na lista de serviços confiáveis acessem essa conta de armazenamento" estiver desabilitado para sua conta de Armazenamento do Azure. Se essa configuração estiver habilitada:

  • Qualquer conector de acesso do Azure Databricks no mesmo locatário que a conta de armazenamento pode acessar a conta de armazenamento.
  • Qualquer serviço confiável do Azure pode acessar a conta de armazenamento. Confira Permitir acesso a serviços confiáveis do Azure.

As instruções a seguir incluem uma etapa na qual você desabilita essa configuração. É possível usar o Portal do Azure ou a CLI do Azure.

Usar o Portal do Azure

  1. Faça logon no Portal do Azure, localize e selecione a conta de Armazenamento do Azure e acesse a guia Rede.

  2. Defina o Acesso à Rede Pública como Habilitado de redes virtuais selecionadas e endereços IP.

    Como opção, você pode definir o Acesso à Rede Pública para Desabilitado. A identidade gerenciada pode ser usada para ignorar a verificação no acesso à rede pública.

  3. Em Instâncias de recurso, selecione um Tipo de recurso do Microsoft.Databricks/accessConnectors e selecione o conector de acesso do Azure Databricks.

  4. Em Exceções, desmarque a caixa de seleção Permitir que os serviços do Azure na lista de serviços confiáveis acessem esta conta de armazenamento.

Usar a CLI do Azure

  1. Instale a CLI do Azure e entre.

    Para se conectar usando uma entidade de serviço do Microsoft Entra ID, confira Login da CLI do Azure com uma entidade de serviço do Microsoft Entra ID.

    Para se autenticar usando uma conta de usuário do Azure Databricks, consulte o Logon da CLI do Azure com uma conta de usuário do Azure Databricks.

  2. Adicione uma regra de rede à conta de armazenamento:

    az storage account network-rule add \
    -–subscription <subscription id of the resource group> \
    -–resource-id <resource Id of the access connector for Azure Databricks> \
    -–tenant-id <tenant Id> \
    -g <name of the Azure Storage resource group> \
    -–account-name <name of the Azure Storage resource> \
    

    Adicione a ID do recurso no formato:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    
  3. Depois de criar a regra de rede, acesse sua conta de Armazenamento do Azure no Portal do Azure e exiba a identidade gerenciada na guia Rede em Instâncias de recurso, tipo de recurso Microsoft.Databricks/accessConnectors.

  4. Em Exceções, desmarque a caixa de seleção Permitir que os serviços do Azure na lista de serviços confiáveis acessem esta conta de armazenamento.

  5. Opcionalmente, defina o Acesso à Rede Pública como Desabilitado. A identidade gerenciada pode ser usada para ignorar a verificação no acesso à rede pública.

    A abordagem padrão é manter esse valor definido como Habilitado de redes virtuais selecionadas e endereços IP.

Os SQL warehouses sem servidor são recursos de computação executados na assinatura do Azure para o Azure Databricks, não sua assinatura do Azure. Se você configurar um firewall no Azure Data Lake Storage Gen2 e planeja usar o SQL warehouses sem servidor, deverá configurar o firewall para permitir o acesso do SQL warehouses sem servidor.

Para obter instruções, confira Configurar um firewall para acesso à computação sem servidor.

Atualize seu metastore do Catálogo do Unity existente para usar uma identidade gerenciada ao acessar o respectivo armazenamento raiz

Se você tiver um metastore do Catálogo do Unity criado usando uma entidade de serviço e quiser atualizá-lo para usar uma identidade gerenciada, você poderá atualizá-lo usando uma chamada à API.

  1. Crie um conector de acesso do Azure Databricks e atribua a ele permissões ao contêiner de armazenamento que está sendo usado para o armazenamento raiz do metastore do Catálogo do Unity, usando as instruções em Configurar uma identidade gerenciada para o Catálogo do Unity.

    Você pode criar o conector de acesso com uma identidade gerenciada atribuída pelo sistema ou uma identidade gerenciada atribuída pelo usuário.

    Anote a ID de recurso do conector de acesso. Se usar uma identidade gerenciada atribuída pelo usuário, anote também a respectiva ID de recurso.

  2. Como administrador da conta, entre em um workspace do Azure Databricks atribuído ao metastore.

    Você não precisa ser um administrador do workspace.

    Anote a URL do workspace, que é a primeira parte da URL após https:// e que inclui azuredatabricks.net.

  3. Gerar um token de acesso pessoal.

  4. Adicione o token de acesso pessoal ao arquivo .netrc no diretório base. Isso aprimora a segurança impedindo que o token de acesso pessoal apareça no histórico de comandos do shell. Consulte a API de gerenciamento de token.

  5. Execute o comando do cURL a seguir para recriar a credencial de armazenamento.

    Substitua os valores de espaço reservado:

    • <databricks-instance>: a URL do workspace em que o token de acesso pessoal foi gerado.
    • <credential-name>: um nome para a credencial de armazenamento.
    • <access-connector-id>: ID do recurso para o conector de acesso do Azure Databricks no formato /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    • <managed-identity-id>: se você criou o conector de acesso usando uma identidade gerenciada atribuída pelo usuário, especifique a ID de recurso da identidade gerenciada.
    curl -n -X POST --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/storage-credentials --data "{
      \"name\": \"<credential-name>\",
      \"azure_managed_identity\": {
        \"access_connector_id\": \"<access-connector-id>\",
        \"managed_identity_id\": \"<managed-identity-id>\"
      }
    }"
    
  6. Anote a ID da credencial de armazenamento na resposta.

  7. Execute o comando cURL a seguir para recuperar o metastore_id, onde <databricks-instance> é a URL do workspace no qual o token de acesso pessoal foi gerado.

    curl -n GET--header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastore_summary
    
  8. Execute o comando do cURL a seguir para atualizar o metastore com a nova credencial de armazenamento raiz.

    Substitua os valores de espaço reservado:

    • <databricks-instance>: a URL do workspace em que o token de acesso pessoal foi gerado.
    • <metastore-id>: a ID do metastore que você recuperou na etapa anterior.
    • <storage-credential-id>: a ID da credencial de armazenamento.
    curl -n -X PATCH --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastores/<metastore-id> --data
    "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"