Como o Databricks impõe o isolamento do usuário?

Esta página explica como o Azure Databricks usa o Lakeguard para impor o isolamento do usuário em ambientes de computação compartilhados e o controle de acesso refinado na computação dedicada.

O que é Lakeguard?

O Lakeguard é um conjunto de tecnologias em Databricks que impõem isolamento de código e filtragem de dados para que vários usuários possam compartilhar o mesmo recurso de computação de forma segura e econômica, e acessar dados com controles de acesso refinados em vigor na computação oferecendo acesso privilegiado à máquina.

Como funciona o Lakeguard?

Em ambientes de computação compartilhados, como computação clássica padrão, computação sem servidor e armazéns SQL, o Lakeguard isola o código do usuário do mecanismo Spark e de outros usuários. Esse design permite que muitos usuários compartilhem os mesmos recursos de computação, mantendo limites rígidos entre usuários, o driver Spark e os executores. Como este isolamento está em vigor, a computação padrão pode impor nativamente controlos de acesso finos, como filtros de linha e máscaras de coluna.

A computação dedicada utiliza a arquitetura clássica do Spark, em que o código do utilizador não está isolado do motor, o que significa que não consegue aplicar os controlos de acesso granulares implementados sem correr o risco de obter mais dados do que o necessário. Em vez disso, a capacidade de computação dedicada delega a filtragem de dados à capacidade de computação sem servidor do seu espaço de trabalho, que é isolada pelo Lakeguard e efetua essa filtragem em seu nome. É por isso que o controlo de acesso detalhado em computação dedicada exige que o seu espaço de trabalho esteja ativado para computação serverless. Consulte Controle de acesso refinado em computação dedicada.

Arquitetura clássica Spark

A imagem a seguir mostra como, na arquitetura tradicional do Spark, os aplicativos do usuário compartilham uma JVM com acesso privilegiado à máquina subjacente.

Arquitetura tradicional Spark

Arquitetura Lakeguard

O Lakeguard isola todo o código do usuário usando contêineres seguros. Isso permite que várias cargas de trabalho sejam executadas no mesmo recurso de computação, mantendo um isolamento estrito entre os usuários.

Arquitetura Lakeguard

Isolamento do cliente Spark

O Lakeguard isola os aplicativos cliente do driver Spark e uns dos outros usando dois componentes principais:

  • Spark Connect: O Lakeguard usa o Spark Connect (introduzido com o Apache Spark 3.4) para separar aplicativos cliente do driver. Os aplicativos cliente e os drivers não compartilham mais a mesma JVM ou classpath. Esta separação impede o acesso não autorizado aos dados. Esse design também impede que os usuários acessem dados resultantes de superbusca quando as consultas incluem filtros no nível de linha ou coluna.

    Observação

    O Spark Connect adia a análise e a resolução de nomes para o tempo de execução, o que pode alterar o comportamento do seu código. Consulte Comparar o Spark Connect com o Spark Classic.

  • Área restrita de contêiner: cada aplicativo cliente é executado em seu próprio ambiente de contêiner isolado. Isso impede que o código do usuário acesse os dados de outros usuários ou a máquina subjacente. O sandboxing usa técnicas de isolamento baseadas em contêiner para criar limites seguros entre os usuários.

Isolamento UDF

Por padrão, os executores do Spark não isolam UDFs. Essa falta de isolamento pode permitir que UDFs gravem arquivos ou acessem a máquina subjacente.

O Lakeguard isola o código definido pelo usuário, incluindo UDFs, nos executores do Spark por:

  • Isolamento do ambiente de execução nos executores do Spark.
  • Isolar o tráfego de saída da rede proveniente de UDFs para prevenir o acesso externo não autorizado.
  • Replicar o ambiente do cliente na área restrita UDF para que os usuários possam acessar as bibliotecas necessárias.

Esse isolamento se aplica a UDFs em computação padrão e a UDFs Python em computação sem servidor e armazéns SQL.