Pular para o conteúdo principal

execução de consultas federadas no Snowflake (Okta)

Esta página descreve como configurar o Lakehouse Federation para executar consultas federadas em dados Snowflake que não são gerenciados pelo Databricks. Para saber mais sobre a Lakehouse Federation, consulte O que é a Lakehouse Federation?

Para conectar-se ao seu banco de dados Snowflake usando o Lakehouse Federation, você deve criar o seguinte no seu metastore Unity Catalog Databricks :

  • Uma conexão com seu banco de dados Snowflake.
  • Um catálogo externo que espelha seu banco de dados Snowflake no Unity Catalog, permitindo que você use a sintaxe de consulta e as ferramentas de governança de dados do Unity Catalog para gerenciar o acesso dos usuários do Databricks ao banco de dados.

Aprenda como executar consultas federadas no Snowflake usando dados Okta como provedor OAuth externo. Esta página aborda os fluxos de usuário para máquina (U2M) e de máquina para máquina (M2M).

Para outros métodos de autenticação, consulte as páginas seguintes:

Você pode executar consultas federadas no Snowflake usando federação de consultas ou federação de catálogos.

Na federação de consultas, JDBC envia a consulta Unity Catalog para o banco de dados externo. Isso é ideal para relatórios sob demanda ou para testes de conceito em seu pipeline ETL .

Na federação de catálogos, a execução da consulta Unity Catalog ocorre diretamente no armazenamento de arquivos. Essa abordagem é útil para migração incremental sem adaptação de código ou como um modelo híbrido de longo prazo para organizações que precisam manter alguns dados no Snowflake juntamente com os dados registrados no Unity Catalog. Consulte Ativar federação de catálogos do Snowflake.

Antes de começar

Requisitos do workspace:

  • Espaço de trabalho preparado para o Catálogo do Unity.

Requisitos de computação:

  • Conectividade de rede entre seu recurso compute e os sistemas de banco de dados de destino. Consulte as recomendações de rede para a Federação Lakehouse.
  • Databricks compute requer Databricks Runtime 13.3 LTS ou superior e o modo de acesso Standard ou Dedicado .
  • Os SQL warehouse devem ser Pro ou Serverless e devem utilizar a versão 2023.40 ou superior.

Permissões necessárias:

  • Para criar uma conexão, é preciso ser administrador de metastore ou usuário com o privilégio CREATE CONNECTION no metastore do Unity Catalog anexado ao espaço de trabalho.
  • Para criar um catálogo externo é preciso ter a permissão CREATE CATALOG no metastore e ser proprietário da conexão ou ter o privilégio CREATE FOREIGN CATALOG na conexão.

Outros requisitos de permissão são definidos em cada seção baseada em tarefa a seguir.

O que é OAuth externo no Snowflake?

O OAuth externo é um método de autenticação que permite usar servidores externos que utilizam OAuth 2.0 para acessar o Snowflake. Em vez de um usuário ou aplicativo fazer login diretamente no Snowflake, eles se autenticam com o provedor OAuth (por exemplo, Okta, Microsoft Entra ID ou PingFederate).

Em seguida, o provedor OAuth emite um access token, que Databricks apresenta ao Snowflake. Em seguida, Snowflake verifica a assinatura e as declarações dos tokens com a integração de segurança configurada, concedendo acesso.

Determine um fluxo OAuth

Para escolher o fluxo OAuth correto para o seu conector Snowflake, você precisa entender os dois tipos principais: U2M (User-to-Machine) e M2M (Machine-to-Machine).

U2M é um fluxo de autorização no qual o aplicativo (Databricks) recebe permissão para agir em nome do usuário. Esse fluxo é interativo, o que significa que o usuário é solicitado a fazer login ao criar uma conexão externa, e o aplicativo recebe um access token com escopo definido de acordo com as permissões do usuário .

M2M é um fluxo não interativo usado quando um aplicativo precisa acessar um recurso diretamente, sem a intervenção do usuário. Nesse fluxo, o aplicativo deve ser registrado no provedor OAuth com um conjunto de permissões, independentemente de qualquer usuário específico.

Em um workspace Databricks , OAuth se refere à autenticação U2M e OAuth Machine to Machine se refere à autenticação M2M.

Configurar Okta

A configuração exata do Okta depende das necessidades e políticas da sua empresa. Os passos descritos nesta e nas seções seguintes servem como um guia para ajudá-lo a configurar OAuth de forma funcional e representam um exemplo simples e prático, não um recurso exaustivo do Okta. Consulte a documentação da Okta para obter uma cobertura detalhada da plataforma e dos recursos.

Criar um cliente OAuth

O cliente compatível com OAuth no Okta representa um aplicativo que precisa interagir com o servidor de autorização do Okta para obter tokens. No nosso caso, o cliente representa a Databricks.

  1. No console de administração do Okta, navegue até Aplicativos e clique em Criar integração de aplicativo .

  2. Escolha o método de login OIDC (OpenID Connect) .

  3. Selecione o tipo de aplicação:

    • (Apenas para U2M) Selecione Aplicativo Nativo .
    • (Apenas M2M) Selecione Aplicativo Web .
  4. Clique em Avançar .

  5. Insira um nome para o aplicativo.

  6. Selecione o tipo de concessão:

    • (Apenas para U2M) Selecione o código de autorização e os tokens de atualização .
    • (Apenas M2M) Selecione as credenciais do cliente .
  7. (Apenas U2M) Adicione https://<WORKSPACE>/login/oauth/snowflake.html como o URI de redirecionamento de login .

  8. Escolha o valor desejado para o acesso controlado. Para fins de teste, permitir o acesso a todos na sua organização é suficiente.

  9. Mantenha o acesso imediato com Modede Corretor de Federação ativado.

  10. Clique em Salvar .

    Você será redirecionado para a página do aplicativo recém-criado.

  11. Na seção Credenciais do Cliente , anote o valor do ID do Cliente .

  12. Clique em Editar e selecione Segredo do cliente e, em seguida, clique em Salvar .

  13. Copie o segredo e guarde esse valor para uso posterior.

Se optar por desativar o acesso imediato com Mode de Broker de Federação, você deve atribuir um usuário na tab de atribuição. Para mais informações, consulte a documentação do Okta.

Crie um servidor de autorização.

  1. No console de administração do Okta, expanda a seção Segurança e clique em API .

  2. Clique em Adicionar Servidor de Autorização .

  3. Digite um nome.

  4. Para o público, use seu URL JDBC do Snowflake e host, mantendo o esquema de URL (o prefixo https ).

  5. Clique em Salvar . Você será redirecionado para o servidor de autorização recém-criado.

  6. Na tab Escopos , clique em Adicionar Escopo . Defina o nome para o escopo Snowflake desejado (por exemplo, session:role:PUBLIC). Clique em Criar .

  7. Clique em Políticas de Acesso e, em seguida, clique em Adicionar Nova Política de Acesso .

  8. Insira um nome e uma descrição para a política.

  9. Atribua a política ao cliente que você criou e clique em Criar .

  10. Na política de acesso, clique em Adicionar regra .

  11. Insira o nome da regra.

  12. Selecione os tipos de concessão autorizados:

    • (Apenas para U2M) Selecione o código de autorização .
    • (Apenas M2M) Selecione as credenciais do cliente .
  13. Para escopos, você pode selecionar "Qualquer escopo" ou escolher o escopo desejado criado anteriormente.

  14. (Apenas U2M) Se você quiser receber tokens refresh , inclua offline_access na lista de escopos.

  15. Configure quaisquer definições adicionais conforme necessário.

  16. Por fim, clique em Criar regra .

Recuperar informações da Okta

Anote as seguintes informações:

  • ID do cliente e segredo do cliente: Recupere-os do aplicativo cliente que você criou.

  • Metadados OIDC (OpenID Connect):

    1. Na página do servidor de autorização, clique no link URI de metadados na tab Configurações .
    2. (Apenas para U2M) Copie o valor de authorization_endpoint no seguinte formato: https://<OKTA_ENV_ID>.okta.com/oauth2/<AUTH_SERVER_ID>/v1/authorize
    3. (Apenas M2M) Copie o link URI dos metadados . As conexões M2M Snowflake no Databricks leem esses metadados diretamente e recuperam automaticamente todas as informações necessárias.
    4. Copie o valor do emissor - isso será necessário durante a configuração do Snowflake.

Criar uma integração de segurança

Este passo configura uma integração de segurança no Snowflake para que Snowflake possa se comunicar de forma segura com o Okta, validar tokens e fornecer o acesso aos dados apropriado com base na função associada ao access token OAuth .

  1. Conecte-se à sua account Snowflake como um usuário com a função ACCOUNTADMIN .

  2. execução do comando CREATE SECURITY INTEGRATION . Por exemplo:

    SQL
    CREATE SECURITY INTEGRATION <OKTA_U2M_SECURITY_INTEGRATION_NAME>
    TYPE = EXTERNAL_OAUTH
    ENABLED = TRUE
    EXTERNAL_OAUTH_TYPE = OKTA
    EXTERNAL_OAUTH_ISSUER = '<OKTA_OAUTH_ISSUER_URL>'
    EXTERNAL_OAUTH_JWS_KEYS_URL = '<OKTA_OAUTH_ISSUER_URL>/v1/keys'
    EXTERNAL_OAUTH_AUDIENCE_LIST = ('<SNOWFLAKE_APPLICATION_ID_URI>')
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'EMAIL_ADDRESS';

    O exemplo utiliza a declaração e o atributo de mapeamento email . Isso exige que o seu email de usuário Snowflake corresponda ao endereço de email do usuário do Okta.

    SQL
    ALTER USER <SNOWFLAKE_USER> SET EMAIL = '<YOUR_EMAIL>';

    Você pode usar diferentes tipos de reivindicações, dependendo das suas necessidades.

Criar uma conexão

A conexão especifica um caminho e as credenciais para acessar um sistema de banco de dados externo. Para criar uma conexão, você pode usar o Catalog Explorer ou o comando CREATE CONNECTION do SQL em um Notebook do Databricks ou no editor de consultas SQL do Databricks.

nota

Você também pode usar a API REST do Databricks ou a CLI do Databricks para criar uma conexão. Consulte POST /api/2.1/unity-catalog/connections e comandoUnity Catalog.

Permissões necessárias: Administrador do Metastore ou usuário com o privilégio CREATE CONNECTION.

  1. No seu workspace Databricks , clique em Ícone de dados. Catálogo .

  2. Na parte superior do painel Catálogo , clique no ícone Ícone de adicionar ou ícone de mais Adicionar e selecione Adicionar uma conexão no menu.

    Como alternativa, na página de acesso rápido , clique no botão Dados externos >, acesse a tab Conexões e clique em Criar conexão .

  3. Na página "Informações básicas de conexão" do assistente de configuração de conexão , insira um nome de conexão amigável.

  4. Selecione um tipo de conexão Snowflake .

  5. Para Tipo de autenticação , selecione OAuth no menu suspenso.

  6. (Opcional) Adicione um comentário.

  7. Clique em Avançar .

  8. Insira os seguintes detalhes de autenticação e conexão para o seu data warehouse Snowflake:

    • Anfitrião : Por exemplo, snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Porta : Por exemplo, 443
    • Usuário : Por exemplo, snowflake-user
    • endpointde autorização : https://<OKTA_ENV_ID>.okta.com/oauth2/<AUTH_SERVER_ID>/v1/authorize
    • Segredo do cliente : O segredo do cliente que você salvou ao criar a integração de segurança.
    • ID do cliente : O ID do cliente que você salvou ao criar a integração de segurança.
    • Escopo OAuth : session:role:PUBLIC offline_access
    • Provedor OAuth : Okta
    • Faça login com o Okta : Clique e faça login no Snowflake usando suas credenciais do Okta.
  9. Clique em Avançar .

  10. Insira os seguintes detalhes de conexão para sua conexão:

    • Armazém Snowflake : O nome do armazém que você deseja usar.
    • (Opcional) Usar proxy : Indica se a conexão com o Snowflake deve ser feita usando um servidor proxy.
    • (Opcional) Host do proxy : Host do proxy usado para conectar ao Snowflake. Você também deve selecionar "Usar proxy" e especificar a porta do proxy .
    • (Opcional) Porta do proxy : Porta do proxy usada para conectar ao Snowflake. Você também deve selecionar "Usar proxy" e especificar o host do proxy .
    • (Opcional) FunçãoSnowflake : A função de segurança default a ser usada para a sessão após a conexão.
  11. Clique em Criar conexão .

  12. Na página " Informações básicas do catálogo" , insira um nome para o catálogo estrangeiro.

  13. (Opcional) Clique em Testar conexão para confirmar se está funcionando.

  14. Clique em Criar catálogo .

  15. Na página Acesso , selecione o espaço de trabalho no qual os usuários podem acessar o catálogo que você criou. Você pode selecionar "Todos os espaços de trabalho têm acesso " ou clicar em "Atribuir ao espaço de trabalho" , selecionar o espaço de trabalho e clicar em "Atribuir" .

  16. Alterar o proprietário que pode gerenciar o acesso a todos os objetos do catálogo. Comece digitando o nome da instituição na caixa de texto e, em seguida, clique na instituição nos resultados exibidos.

  17. Conceder privilégios no catálogo. Clique em Conceder :

    1. Especifique as entidades que podem acessar os objetos no catálogo. Comece digitando o nome da instituição na caixa de texto e, em seguida, clique na instituição nos resultados exibidos.

    2. Selecione as predefinições de privilégios a serem concedidas a cada entidade principal. Todos os usuários account recebem BROWSE por default.

      • Selecione Leitor de Dados no menu suspenso para conceder privilégios read em objetos no catálogo.
      • Selecione Editor de Dados no menu suspenso para conceder privilégios read e modify em objetos no catálogo.
      • Selecione manualmente os privilégios a serem concedidos.
    3. Clique em Conceder .

  18. Clique em Avançar .

  19. Na página de Metadados , especifique tags no formato key-valor. Para obter mais informações, consulte Aplicar tags a objetos protegíveis Unity Catalog.

  20. (Opcional) Adicione um comentário.

  21. Clique em Salvar .

Identificadores de banco de dados que diferenciam maiúsculas de minúsculas

O campo database do catálogo estrangeiro corresponde a um identificador de banco de dados Snowflake. Se o identificador do banco de dados Snowflake não for sensível a maiúsculas e minúsculas, a capitalização que você usa no catálogo estrangeiro <database-name> será preservada. No entanto, se o identificador do banco de dados Snowflake diferencia maiúsculas de minúsculas, você deve envolver o catálogo estrangeiro <database-name> em aspas duplas para preservar a capitalização.

Por exemplo:

  • database é convertido em DATABASE

  • "database" é convertido em database

  • "database""" é convertido em database"

    Para escapar de aspas duplas, use outras aspas duplas.

  • "database"" resulta em um erro porque as aspas duplas não foram escapadas corretamente.

Para obter mais informações, consulte os requisitos de identificador na documentação Snowflake .

Empilhamento com suporte

Os seguintes comandos pushdown são suportados:

  • Filtros
  • Projeções
  • Limite
  • juntar
  • Agregados (Média, Corr, CovPopulação, CovAmostra, Contagem, Máx, Mín, DesvPadPopulação, DesvPadAmostra, Soma, VariânciaPopulação, VariânciaAmostra)
  • Funções (funções de string, funções matemáticas, funções de dados, de tempo e de carimbo de data/hora e outras funções diversas, como Alias, Cast, SortOrder)
  • Funções do Windows (DenseRank, Rank, RowNumber)
  • Classificação

Mapeamentos de tipos de dados

Ao ler dados do Snowflake para o Spark, os tipos de dados são mapeados da seguinte forma:

Tipo Snowflake

Tipo Spark

decimal, número, numérico

Tipo decimal

bigint, byteint, int, inteiro, smallint, tinyint

Tipo inteiro

flutuar, flutuar4, flutuar8

Tipo de ponto flutuante

dupla, dupla precisão, real

Tipo Duplo

char, caractere, strings, texto, tempo, varchar

Tipo de string

binário

Tipo binário

boolean

Tipo Booleano

Data

Tipo de data

data e hora, carimbo de data/hora, carimbo de data/hora_LTZ, carimbo de data/hora_NTZ, carimbo de data/hora_TZ

timestampType

Limitações

  • O endpoint OAuth do Snowflake deve ser acessível a partir dos IPs do plano de controle do Databricks. Consulte a seção "IPs de saída do plano de controle do Databricks". O Snowflake permite configurar políticas de rede no nível de integração de segurança, o que possibilita uma política de rede separada que permite a conectividade direta do plano de controle do Databricks ao endpoint OAuth para autorização.