Criar armazenamento gerenciado do Unity Catalog usando uma entidade de serviço (herdada)

Importante

Esta documentação foi desativada e pode não estar atualizada. Não há mais suporte para os produtos, serviços ou tecnologias mencionados neste conteúdo. Para exibir a documentação do administrador atual, confira Gerenciar a conta do Azure Databricks.

Este artigo descreve um método herdado de criação de locais externos e armazenamento gerenciado usando uma entidade de serviço. Em vez de entidades de serviço, o Databricks recomenda fortemente que você use uma identidade gerenciada do Azure como a identidade que fornece acesso ao contêiner de armazenamento. Confira Usar identidades gerenciadas do Azure no Catálogo do Unity para acessar o armazenamento.

No entanto, se você ainda quiser usar uma entidade de serviço ou se tiver armazenamento gerenciado do Unity Catalog existente ou locais externos que usam uma entidade de serviço e quiser entender o processo, as instruções serão fornecidas neste artigo da camada de arquivos.

Criar um metastore acessado usando uma entidade de serviço (herdada)

Para criar um metastore do Catálogo do Unity acessado por uma entidade de serviço:

  1. Crie uma conta de armazenamento do Azure Data Lake Storage Gen2.

    Um contêiner de armazenamento nessa conta armazenará todas as tabelas gerenciadas do metastore, exceto aquelas que estão em um catálogo ou esquema com seu próprio local de armazenamento gerenciado.

    Confira Criar uma conta de armazenamento para usar com o Azure Data Lake Storage Gen2. Deve ser uma conta de Azure Data Lake Storage Gen2 de desempenho Premium na mesma região que seus workspaces do Azure Databricks.

  2. Criar um contêiner na nova conta de armazenamento.

    Anote o URI do ADLSv2 do contêiner, que está no seguinte formato:

    abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<metastore-name>
    

    Nas etapas a seguir, substitua <storage-container> por esse URI.

  3. No Microsoft Entra ID, crie uma entidade de serviço e atribua permissões à conta de armazenamento, usando as instruções em Acessar o armazenamento usando um princípio de serviço e o Microsoft Entra ID (Azure Active Directory).

    O Catálogo de Unity usará essa entidade de serviço para acessar contêineres na conta de armazenamento em nome dos usuários do Unity Catalog. Gere um segredo do cliente para a entidade de serviço. Confira Autenticação da entidades de serviço do Microsoft Entra ID. Anote o segredo do cliente da entidade de serviço, a ID do aplicativo cliente e a ID do diretório em que você criou essa entidade de serviço. Nas etapas a seguir, substitua <client-secret>, <client-application-id> e <directory-id> por esses valores.

  4. Anote essas propriedades, que você usará ao criar um metastore:

    • <aad-application-id>
    • A região da conta de armazenamento
    • <storage-container>
    • O <client-secret>, <client-application-id> e <directory-id> da entidade de serviço
  5. Não é possível criar um metastore acessado usando uma entidade de serviço na interface do usuário do console da conta. Em vez disso, use a API de Metastores de conta. Por exemplo:

    curl -n -X POST --header 'Content-Type: application/json' https://<account-domain>/api/2.0/accounts/<account-id>/metastores
    --data '{
       "metastore_info": {
          "name": "<metastore-name>",
          "storage_root": "<storage-container>",
          "region": "<region>"
          "storage_root_credential_id"
       }
    }'
    

    Para saber como autenticar em APIs de nível de conta, confira Autenticação de entidade de serviço do Microsoft Entra ID.

    O usuário que cria um metastore é proprietário dele. O Databricks recomenda que você reatribua a propriedade do metastore para um grupo. Confira Atribuir um administrador de metastore.

  6. Anote a ID do metastore. Ao exibir as propriedades do metastore, a ID do metastore é a parte da URL após /data e antes de /configuration.

  7. O metastore foi criado, mas o Catálogo do Unity ainda não pode gravar dados nele. Para concluir a configuração do metastore:

    1. Em um navegador separado, faça logon em um workspace atribuído ao metastore como administrador do workspace.

    2. 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. Consulte a API de gerenciamento de token.

    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 criar a credencial de armazenamento raiz para o metastore. Substitua os valores de espaço reservado:

      • <workspace-url>: a URL do workspace em que o token de acesso pessoal foi gerado.
      • <credential-name>: um nome para a credencial de armazenamento.
      • <directory-id>: a ID do diretório para a entidade de serviço que você criou.
      • <application-id>: a ID do aplicativo para a entidade de serviço que você criou.
      • <client-secret>: o valor do segredo do cliente gerado para a entidade de serviço (não a ID do segredo do cliente).
      curl -n -X POST --header 'Content-Type: application/json' https://<workspace-url>/api/2.0/unity-catalog/storage-credentials --data "{
         \"name\": \"<credential-name>\",
         \"azure_service_principal\": {
         \"directory_id\": \"<directory-id>\",
         \"application_id\": \"<application-id>\",
         \"client_secret\": \"<client-secret>\"
         }
      }"
      

      Anote a ID da credencial de armazenamento, que é o valor de id da resposta do comando do cURL.

  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:

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

Agora você pode adicionar workspaces ao metastore.

Criar uma credencial de armazenamento que usa uma entidade de serviço (herdada)

Para criar uma credencial de armazenamento usando uma entidade de serviço, você precisa ser um administrador de conta do Azure Databricks. O administrador da conta que cria a credencial de armazenamento da entidade de serviço pode delegar sua propriedade a um outro usuário ou grupo para gerenciarem as permissões incluídas.

Primeiro, crie uma entidade de serviço e conceda-lhe acesso à sua conta de armazenamento da seguinte forma Acessar o armazenamento usando um princípio de serviço e o Microsoft Entra ID (Azure Active Directory).

Não é possível adicionar uma credencial de armazenamento de entidade de serviço usando o Explorador do Catálogo. Em vez disso, use a API de Credenciais de Armazenamento. Por exemplo:

curl -X POST -n \
https://<databricks-instance>/api/2.1/unity-catalog/storage-credentials \
-d '{
   "name": "<storage-credential-name>",
   "read_only": true,
   "azure_service_principal": {
      "directory_id": "<directory-id>",
      "application_id": "<application-id>",
      "client_secret": "<client-secret>"
   },
   "skip_validation": "false"
   }'

Você também pode criar uma credencial de armazenamento usando o provedor Terraform do Databricks e databricks_storage_credential.