Partilhar via


Criar um local externo para conectar o armazenamento em nuvem ao Azure Databricks

Este artigo descreve como configurar um objeto de local externo no Unity Catalog para controlar o acesso ao armazenamento em nuvem a partir do Azure Databricks.

Visão geral de locais externos

Locais externos associam credenciais de armazenamento a contêineres de armazenamento de objetos na nuvem. Os locais externos são usados para definir:

Locais externos podem fazer referência ao armazenamento em um contêiner de armazenamento do Azure Data Lake, bucket do AWS S3 ou bucket do Cloudflare R2.

O diagrama abaixo mostra como locais externos fazem referência a credenciais de armazenamento e locais de armazenamento em nuvem.

Relação entre credenciais de armazenamento, locais externos e armazenamento em nuvem

Neste diagrama:

  • Cada local externo faz referência a uma credencial de armazenamento e um local de armazenamento em nuvem.
  • Uma credencial de armazenamento pode ser referenciada por vários locais externos. A credencial de armazenamento 1 concede acesso a tudo o que está sob o caminho bucket/tables/*, portanto, tanto o local externo A quanto o local externo B fazem referência a ele.

Visão geral da criação de locais externos

Você pode usar qualquer uma das seguintes interfaces para criar um local externo:

  1. Explorador de Catálogos

    Esta opção fornece uma interface gráfica do usuário. Você pode usar o Catalog Explorer para criar locais externos que fazem referência a: recipientes de armazenamento do Azure Data Lake, buckets do S3 (somente leitura), buckets do Cloudflare R2 e raiz do DBFS (legado).

  2. Comandos SQL em um bloco de anotações ou consulta SQL Databricks

  3. A CLI do Databricks

  4. Terraform

Este artigo abrange as opções 1 e 2.

Note

O armazenamento de dados no local de armazenamento raiz do DBFS é uma prática herdada e o Databricks recomenda não fazê-lo. No entanto, se seu espaço de trabalho armazenar dados na raiz DBFS, você poderá criar um local externo para controlar o acesso a esses dados usando o Unity Catalog. Para obter detalhes, consulte Conectar-se a um local externo raiz do DBFS (legado).

Para obter mais informações sobre os usos de locais externos e a relação entre credenciais de armazenamento e locais externos, consulte Conectar-se ao armazenamento de objetos na nuvem usando o Unity Catalog.

Antes de começar

Prerequisites:

  • Você deve criar o contêiner de armazenamento do Azure Data Lake Storage, o bucket do AWS S3 ou o bucket do Cloudflare R2 que deseja usar como um local externo antes de criar o objeto de local externo no Azure Databricks.

    • As contas de armazenamento do Armazenamento Azure Data Lake que você usa como locais externos devem ter um namespace hierárquico.

    • Não é possível usar contêineres de armazenamento do Azure com políticas de imutabilidade (WORM - Write Once, Read Many) habilitadas como locais externos. O Unity Catalog requer permissões DELETE em contêineres de armazenamento, o que as políticas de imutabilidade impedem. Para obter mais informações sobre políticas de imutabilidade, consulte Configurar políticas de imutabilidade para contêineres.

    • Se o acesso à rede pública estiver desabilitado na conta de armazenamento, você deverá habilitar a opção Permitir serviços confiáveis do Azure para permitir que o Azure Databricks se conecte à conta de armazenamento. Você pode definir essa configuração usando a CLI do Azure:

      # Check current network rule set
      az storage account show --name <storage_account_name> --resource-group <resource_group_name> --query "networkRuleSet"
      
      # Set bypass for Azure Services
      az storage account update \
        --name <storage_account_name> \
        --resource-group <resource_group_name> \
        --bypass AzureServices
      
  • Não use notação de ponto (por exemplo, incorrect.bucket.name.notation) em nomes de bucket do S3. Embora a AWS permita pontos em nomes de buckets, o Databricks não oferece suporte a buckets do S3 com notação de pontos. Buckets contendo pontos podem causar problemas de compatibilidade com funcionalidades, como Delta Sharing, devido a falhas na validação do certificado SSL. Para obter mais informações, consulte as práticas recomendadas de nomenclatura de bucket da AWS.

  • Os caminhos de localização externa devem conter apenas caracteres ASCII padrão (letrasA–Za–z, 0–9, dígitos e símbolos comuns como /, _, -).

Requisitos de permissões:

  • Você deve ter o privilégio CREATE EXTERNAL LOCATION tanto no metastore quanto na credencial de armazenamento referenciada no local externo. Os administradores do Metastore têm CREATE EXTERNAL LOCATION no metastore por padrão.
  • Se você estiver criando um local externo para o local de armazenamento raiz do DBFS, o sistema poderá criar a credencial de armazenamento para você, mas você deverá ser um administrador do espaço de trabalho. Para obter detalhes, consulte Conectar-se a um local externo raiz do DBFS (legado)

Opção 1: Criar um local externo usando o Catalog Explorer

Você pode criar um local externo manualmente usando o Catalog Explorer.

Permissões e pré-requisitos: consulte Antes de começar.

Para criar o local externo:

  1. Faça login em um espaço de trabalho anexado ao metastore.

  2. Na barra lateral, clique no ícone Dados.Catálogo.

  3. Clique no botão Dados >Externos, vá ao separador Localizações Externas e clique em Criar localização.

  4. Insira um nome de local externo.

  5. Selecione o tipo de armazenamento: Armazenamento do Azure Data Lake, S3 (somente leitura),R2 ou Raiz DBFS.

    O armazenamento de dados na raiz DBFS é uma prática herdada não recomendada. Para obter detalhes, consulte Conectar-se a um local externo raiz do DBFS (legado).

  6. Em URL, insira ou selecione o caminho para o local externo.

    Para o Armazenamento Azure Data Lake, S3 e R2, você tem as seguintes opções:

    • Para copiar o caminho do contentor de um ponto de montagem DBFS existente , selecione Copiar do DBFS.

    • Se você não estiver copiando de um ponto de montagem existente, use o campo URL para inserir o caminho do contêiner ou bucket que deseja usar como o local externo.

      Por exemplo, abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path> ou r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>.

    Para DBFS root:

    • O sistema preenche o subcaminho para o local de armazenamento raiz do DBFS. Se você for um administrador de espaço de trabalho, o sistema também criará a credencial de armazenamento para você.

    Consulte Conectar-se a um local externo raiz do DBFS (legado).

  7. Selecione a credencial de armazenamento que concede acesso ao local externo.

    Note

    Se o seu local externo for para a raiz DBFS e você for um administrador de espaço de trabalho, o sistema criará a credencial de armazenamento para você e você não precisará selecionar uma.

    Se você não tiver uma credencial de armazenamento, poderá criar uma:

    1. Na lista suspensa de credenciais de armazenamento , selecione + Criar nova credencial de armazenamento.

    2. As informações de credencial inseridas dependem do tipo de armazenamento:

      Para o Armazenamento do Azure Data Lake, insira a ID do conector de acesso e (opcionalmente) a identidade gerenciada atribuída pelo usuário que dá acesso ao local de armazenamento. Consulte Criar uma credencial de armazenamento que acessa o Armazenamento do Azure Data Lake

      Para tokens de API da Cloudflare, insira a conta da Cloudflare, o ID da chave de acesso e a chave de acesso secreta. Consulte Criar uma credencial de armazenamento para se conectar ao Cloudflare R2.

      Para o AWS S3, insira o ARN da função do IAM que dá acesso ao local de armazenamento. Consulte Criar uma credencial de armazenamento para se conectar ao AWS S3 (somente leitura).

  8. (Opcional) Se desejar que os usuários tenham acesso somente leitura ao local externo, clique em Opções Avançadas e selecione Somente leitura. Para obter mais informações, consulte Marcar um local externo como leitura somente.

    Os locais externos que fazem referência aos caminhos do AWS S3 são, por natureza, de leitura apenas.

  9. (Opcional) Se o local externo for destinado a um catálogo federado de metastore do Hive, clique em Opções avançadas e habilite modo de fallback.

    Consulte Ativar o modo de fallback em locais externos.

  10. (Opcional, apenas para locais do AWS S3) Se o bucket do S3 exigir criptografia SSE, você poderá configurar um algoritmo de criptografia para permitir que tabelas e volumes externos no Unity Catalog acessem dados no bucket do S3.

    Para obter instruções, consulte Configurar um algoritmo de criptografia em um local externo (somente AWS S3).

  11. (Opcional) Para habilitar a capacidade de se inscrever para alterar notificações no local externo, clique em Opções Avançadas e selecione Habilitar eventos de arquivo.

    Para obter detalhes, consulte (Recomendado) Habilitar eventos de arquivo para um local externo.

  12. Clique em Criar.

  13. (Opcional) Vincule o local externo a espaços de trabalho específicos.

    Por padrão, qualquer usuário privilegiado pode usar o local externo em qualquer espaço de trabalho anexado ao metastore. Se você quiser permitir o acesso apenas de espaços de trabalho específicos, vá para a guia Espaços de trabalho e atribua espaços de trabalho. Consulte (Opcional) Atribuir um local externo a espaços de trabalho específicos.

  14. Vá para o separador Permissões para dar acesso ao uso da localização externa.

    Para que qualquer pessoa possa usar o local externo, você deve conceder permissões:

    • Para usar o local externo para adicionar um local de armazenamento gerenciado ao metastore, catálogo ou esquema, conceda o CREATE MANAGED LOCATION privilégio.
    • Para criar tabelas ou volumes externos, conceda CREATE EXTERNAL TABLE ou CREATE EXTERNAL VOLUME.
    1. Clique em Conceder.
    2. No diálogo Conceder em <external location>, selecione utilizadores, grupos ou entidades de serviço no campo Entidades e selecione o privilégio que deseja conceder.
    3. Clique em Conceder.

Opção 2: Criar um local externo usando SQL

Para criar um local externo usando SQL, execute o seguinte comando em um bloco de anotações ou no editor de consultas SQL. Substitua os valores dos espaços reservados. Para obter as permissões e pré-requisitos necessários, consulte Antes de começar.

  • <location-name>: Uma designação para o local externo. Caso location_name inclua caracteres especiais, como hífenes (-), estes devem ser envoltos por backticks (` `). Consulte Nomes.
  • <bucket-path>: O caminho em seu locatário de nuvem ao qual esse local externo concede acesso. Por exemplo, abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path> ou r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>.
  • <storage-credential-name>: O nome da credencial de armazenamento que autoriza a leitura e a gravação no contêiner de armazenamento ou no caminho do bucket. Se o nome da credencial de armazenamento incluir caracteres especiais, como hífenes (-), deverá ser delimitado por backticks (` `).
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

Se você quiser limitar o acesso de local externo a espaços de trabalho específicos em sua conta, também conhecidos como vinculação de espaço de trabalho ou isolamento de local externo, consulte (Opcional) Atribuir um local externo a espaços de trabalho específicos.

(Opcional) Atribuir um local externo a espaços de trabalho específicos

Por padrão, um local externo é acessível a partir de todos os espaços de trabalho no metastore. Isso significa que, se um usuário tiver recebido um privilégio (como READ FILES) nesse local externo, ele poderá exercer esse privilégio a partir de qualquer espaço de trabalho anexado ao metastore. Se você usar espaços de trabalho para isolar o acesso aos dados do usuário, convém permitir o acesso a um local externo somente de espaços de trabalho específicos. Esse recurso é conhecido como vinculação de espaço de trabalho ou isolamento de local externo.

Os casos de uso típicos para vincular um local externo a espaços de trabalho específicos incluem:

  • Garantir que os engenheiros de dados que têm o CREATE EXTERNAL TABLE privilégio num local externo que contém dados de produção possam criar tabelas externas nesse local somente num espaço de trabalho de produção.
  • Garantir que os engenheiros de dados que têm o READ FILES privilégio em um local externo que contém dados confidenciais só possam usar espaços de trabalho específicos para acessar esses dados.

Para obter mais informações sobre como restringir outros tipos de acesso a dados por espaço de trabalho, consulte Limitar o acesso ao catálogo a espaços de trabalho específicos.

Important

As vinculações de espaço de trabalho são mencionadas no momento em que os privilégios em relação ao local externo são exercidos. Por exemplo, se um usuário criar uma tabela externa emitindo a instrução CREATE TABLE myCat.mySch.myTable LOCATION 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' do espaço de trabalho, as seguintes verificações de vinculação do espaço de trabalho serão executadas além das verificações regulares de privilégios do myWorkspace usuário:

  • A localização externa 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' está coberta por myWorkspace?
  • O catálogo myCat está vinculado a myWorkspace com o nível de acesso Read & Write?

Se o local externo for subsequentemente desvinculado do myWorkspace, a tabela externa continuará a funcionar.

Esse recurso também permite preencher um catálogo de um espaço de trabalho central e disponibilizá-lo para outros espaços de trabalho usando associações de catálogo, sem também precisar disponibilizar o local externo nesses outros espaços de trabalho.

Quando o controle de saída sem servidor não está configurado, as associações de local externo são verificadas somente quando o local externo é referenciado diretamente, por exemplo, numa CREATE TABLE ou CREATE EXTERNAL TABLE declaração.

Quando o controle de saída sem servidor é configurado, as ligações também são verificadas indiretamente, por exemplo, quando os usuários acessam dados em um catálogo ou tabela externa que depende desse local externo. Nesse caso, as associações de local externo devem corresponder às associações de catálogo ou ser desabilitadas selecionando Todos os espaços de trabalho têm acesso no local externo ou alterando o isolation-mode para OPEN.

Vincular um local externo a um ou mais espaços de trabalho

Para atribuir um local externo a espaços de trabalho específicos, você pode usar o Gerenciador de Catálogos ou a CLI do Databricks.

Permissões necessárias: Administrador da metastore, proprietário do local externo ou MANAGE no local externo.

Note

Os administradores de metastore podem ver todos os locais externos em um metastore usando o Catalog Explorer, e os proprietários de locais externos podem ver todos os locais externos que possuem em um metastore, independentemente de o local externo estar atribuído ao espaço de trabalho atual. Os locais externos que não estão atribuídos ao espaço de trabalho aparecem em cinzento.

Explorador de Catálogos

  1. Faça login em um espaço de trabalho vinculado ao metastore.

  2. Na barra lateral, clique no ícone Dados.Catálogo.

  3. Clique no botão Dados >Externos para ir ao separador Localizações Externas.

  4. Selecione o local externo e vá para o separador Workspaces.

  5. Na guia Espaços de trabalho, desmarque a caixa de seleção Todos os espaços de trabalho têm acesso.

    Se a sua localização externa já estiver associada a uma ou mais áreas de trabalho, esta caixa de verificação já está desmarcada.

  6. Clique em Atribuir a espaços de trabalho e insira ou localize os espaços de trabalho que quer atribuir.

Para revogar o acesso, vá para a guia Espaços de trabalho, selecione o espaço de trabalho e clique em Revogar. Para permitir o acesso de todos os espaços de trabalho, marque a caixa de seleção Todos os espaços de trabalho têm acesso .

CLI

Há dois grupos de comandos da CLI do Databricks e duas etapas necessárias para atribuir um local externo a um espaço de trabalho.

Nos exemplos a seguir, substitua <profile-name> pelo nome do seu perfil de configuração de autenticação do Azure Databricks. Ele deve incluir o valor de um token de acesso pessoal, além do nome da instância do espaço de trabalho e do ID do espaço de trabalho onde você gerou o token de acesso pessoal. Consulte Autenticação de token de acesso pessoal (preterida).

  1. Use o comando do grupo de external-locationsupdate para definir isolation mode do local externo para ISOLATED.

    databricks external-locations update <my-location> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    O padrão isolation-mode é OPEN para todos os espaços de trabalho associados ao metastore.

  2. Use o comando workspace-bindings do grupo update-bindings para atribuir os espaços de trabalho ao local externo.

    databricks workspace-bindings update-bindings external-location <my-location> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    Utilize as propriedades "add" e "remove" para adicionar ou remover associações de espaço de trabalho.

    Note

    A ligação só de leitura (BINDING_TYPE_READ_ONLY) não está disponível para locais externos. Portanto, não há razão para definir binding_type para a vinculação de locais externos.

Para listar todas as atribuições de espaço de trabalho para um local externo, use o comando do grupo de comandos workspace-bindingsget-bindings:

databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>

Consulte também Vinculações de Espaço de Trabalho na referência da API REST.

Desvincular um local externo de um espaço de trabalho

As instruções para revogar o acesso do espaço de trabalho a um local externo usando o Catalog Explorer ou o grupo de comandos da workspace-bindings CLI estão incluídas em Vincular um local externo a um ou mais espaços de trabalho.

Próximos passos