Compartilhar via


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

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

Visão geral de locais externos

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

Locais externos podem referenciar o armazenamento em um contêiner de armazenamento do Azure Data Lake Storage, bucket AWS S3 ou bucket Cloudflare R2.

O diagrama abaixo representa a hierarquia do sistema de arquivos de um único bucket ou contêiner de armazenamento em nuvem, com quatro locais externos que compartilham uma credencial de armazenamento.

Locais externos

Visão geral da criação de local externo

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

  1. Explorador de Catálogos

    Essa opção fornece uma interface do usuário gráfica. Você pode usar o Explorador de Catálogo para criar locais externos que fazem referência a: contêineres do Azure Data Lake Storage, buckets S3 (somente leitura), buckets do Cloudflare R2 e raiz do DBFS (herdado)

  2. Comandos SQL em um notebook ou uma consulta SQL do Databricks

  3. A CLI do Databricks

  4. Terraform

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

Observação

Armazenar dados no local de armazenamento raiz do DBFS é uma prática legada, e o Databricks recomenda contra isso. No entanto, se seu espaço de trabalho armazenar dados na raiz do DBFS, você poderá criar um local externo para controlar o acesso a esses dados usando o Unity Catalog. Para obter detalhes, consulte Criar um local externo para dados na raiz do DBFS (herdado).

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 de nuvem usando o Catálogo do Unity.

Antes de começar

Pré-requisitos:

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

    • As contas de armazenamento do Azure Data Lake Storage que você usa como locais externos devem ter um namespace hierárquico.
    • Não use notação de ponto (por exemplo, incorrect.bucket.name.notation) em nomes de bucket S3. Embora a AWS permita pontos em nomes de bucket, o Databricks não dá suporte a buckets S3 com notação de ponto. Buckets que contêm pontos podem causar problemas de compatibilidade com recursos como o Compartilhamento Delta devido a falhas de validação de certificado SSL. Para obter mais informações, consulte as práticas recomendadas de nomenclatura do bucket do AWS.

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

    • O bucket não pode ter uma lista de controle de acesso do S3 anexada a ele.

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. Por padrão, os administradores do metastore têm CREATE EXTERNAL LOCATION no metastore.
  • 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ê deve ser um administrador do workspace. Para obter detalhes, consulte Criar um local externo para dados na raiz do DBFS (herdado)

Opção 1: criar um local externo usando o Gerenciador de Catálogos

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

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

Para criar a localização externa:

  1. Faça logon em um espaço de trabalho que esteja anexado ao metastore.

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

  3. Na página Acesso rápido, clique no botão Dados externos>, acesse a guia Locais Externos e clique em Criar local.

  4. Digite um Nome de localização externa.

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

    Armazenar dados na raiz do DBFS é uma prática legada e não recomendada. Para obter detalhes, consulte Criar um local externo para dados na raiz do DBFS (herdado).

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

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

    • Para copiar o caminho do contêiner de um ponto de montagem DBFS existente, clique em Copiar do DBFS.

    • Se você não estiver copiando de um ponto de montagem existente, use o campo URL para inserir o contêiner ou o caminho do 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 a raiz DBFS:

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

    Consulte Criar um local externo para dados na raiz do DBFS (herdado).

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

    Observação

    Se o local externo for para a raiz DBFS e você for um administrador do 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 credencialde armazenamento.

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

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

      Para tokens de API do Cloudflare, insira a conta do Cloudflare, a 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 concede acesso ao local de armazenamento. Consulte Criar uma credencial de armazenamento para se conectar ao AWS S3 (somente leitura).

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

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

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

    Consulte Habilitar modo de fallback em locais externos.

  10. (Opcional, somente para locais do AWS S3) Se o bucket S3 exigir criptografia SSE, você poderá configurar um algoritmo de criptografia para permitir que tabelas e volumes externos no Catálogo do Unity acessem dados em seu bucket 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 assinar notificações de alteração 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) Associar o local externo a espaços de trabalho específicos.

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

  14. Vá para a guia Permissões para conceder permissão para usar o local externo.

    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 privilégio CREATE MANAGED LOCATION.

    • Para criar tabelas ou volumes externos, conceda CREATE EXTERNAL TABLE ou CREATE EXTERNAL VOLUME.

    1. Clique em Conceder.
    2. Na caixa de diálogo Conceder em <external location>, selecione usuários, grupos ou entidades de serviço no campo Entidade de segurança e selecione o privilégio que deseja conceder.
    3. Clique em Conceder.

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

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

  • <location-name>: um nome para o local externo. Se location_name incluir caracteres especiais, como hifens (-), ele deverá ser colocado entre crases (` `). Consulte Nomes.
  • <bucket-path>: o caminho no 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 incluir caracteres especiais, como hifens (-), ele deverá ser colocado entre crases (` `).
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

Se quiser limitar o acesso de locais externos a espaços de trabalho específicos em sua conta, também conhecido como associaçã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 em qualquer espaço de trabalho anexado ao metastore. Se você usa espaços de trabalho para isolar o acesso aos dados do usuário, talvez queira permitir o acesso a um local externo somente a partir de espaços de trabalho específicos. Esse recurso é conhecido como associação de espaço de trabalho ou isolamento de local externo.

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

  • Garantir que os engenheiros de dados que têm o privilégio CREATE EXTERNAL TABLE em um local externo que contém dados de produção possam criar tabelas externas nesse local somente em um espaço de trabalho de produção.
  • Garantir que os engenheiros de dados que têm o privilégio READ FILES em um local externo que contém dados confidenciais possam usar apenas 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 acesso do catálogo a espaços de trabalho específicos.

Importante

As associações de workspace são referenciadas no momento em que são exercidos os privilégios em relação ao local externo. 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 workspace myWorkspace, as seguintes verificações de associação de espaço de trabalho serão executadas, além das verificações regulares de privilégio do usuário:

  • O local externo está cobrindo o 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' associado ao myWorkspace?
  • O catálogo myCat está associado a myWorkspace com nível de acesso Read & Write?

Se o local externo for posteriormente desassociado de myWorkspace, a tabela externa continuará funcionando.

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

Associação de um local externo a um ou mais espaços de trabalho

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

Permissões necessárias: administrador do Metastore, proprietário do local externo ou MANAGE no local externo.

Observação

Os administradores do metastore podem ver todos os locais externos em um metastore usando o Gerenciador de Catálogos, 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 acinzentados.

Explorador do Catálogo

  1. Faça logon em um workspace vinculado ao metastore.

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

  3. Na página Acesso rápido, clique no botão Dados externos > para ir para a guia Locais Externos.

  4. Selecione o local externo e vá para a guia Espaço de trabalho.

  5. Na guia Workspaces, desmarque a caixa de seleção Todos os workspaces têm acesso.

    Se o local externo já estiver associado a um ou mais espaços de trabalho, essa caixa de seleção já estará desmarcada.

  6. Clique em Atribuir a workspaces e insira ou localize os workspaces que quer atribuir.

Para revogar o acesso, vá para a guia Workspaces, selecione o workspace 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

Existem dois grupos de comandos da CLI do Databricks e duas etapas necessárias para atribuir um local externo a um workspace.

Nos exemplos a seguir, substitua <profile-name> pelo nome do seu perfil de configuração de autenticação do Azure Databricks. Isso deverá incluir o valor de um token de acesso pessoal, além do nome da instância do workspace e da ID do workspace em que você gerou o token de acesso pessoal. Confira Autenticação com tokens de acesso pessoal do Azure Databricks.

  1. Use o comando external-locations do grupo de comandos update para definir o local externo isolation mode como ISOLATED:

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

    O isolation-mode padrão é OPEN para todos os workspaces anexados ao metastore.

  2. Use o comando workspace-bindings do grupo de comandos 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>
    

    Use as propriedades "add" e "remove" para adicionar ou remover associações de workspace.

    Observação

    A associação somente leitura (BINDING_TYPE_READ_ONLY) não está disponível para locais externos. Portanto, não há motivo para definir binding_type para a associação de locais externos.

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

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

Veja também Associações de workspace na referência da API REST.

Desassociar um local externo de um espaço de trabalho

As instruções para revogar o acesso ao workspace para um local externo usando o Gerenciador de Catálogos ou o grupo de comandos da CLI workspace-bindings estão incluídas em Associar um local externo a um ou mais workspaces.

Próximas etapas