Pular para o conteúdo principal

Ler dados compartilhados usando federação Open ID Connect (OIDC) em um fluxo M2M

Esta página descreve como os destinatários de dados podem usar um cliente Python registrado em seu próprio provedor de identidade (IdP) para estabelecer acesso a compartilhamentos OpenSharing criados no Databricks.

Este fluxo de concessão de credenciais de cliente OAuth "machine-to-machine" (M2M) é geralmente usado em cenários em que um aplicativo, como um job noturno executando em uma máquina virtual, acessa dados autonomamente. Este fluxo de autenticação utiliza a federação do OIDC. O IdP do destinatário emite JSON Web Tokens (JWTs) que servem como tokens OAuth de curta duração, que a Databricks autentica. Este fluxo de autenticação Databricks-para-compartilhamento aberto é para destinatários que não têm acesso a um workspace do Databricks habilitado para Unity Catalog.

A federação OIDC aberta é uma alternativa ao uso de tokens de portador de longa duração emitidos pelo Databricks para conectar destinatários externos ao Databricks a provedores. No fluxo de concessão de credenciais de cliente OAuth, um aplicativo OAuth é registrado como uma entidade de serviço (SP) no IdP do destinatário. Nenhum segredo ou credencial de longa duração são compartilhados entre Databricks, o provedor e o destinatário. Para obter informações sobre o uso de tokens de acesso para gerenciar a autenticação para compartilhamentos, em vez disso, consulte Criar um objeto de destinatário para usuários que não são do Databricks usando tokens de acesso (Compartilhamento Databricks para Open).

Esta página destina-se aos destinatários. Para obter informações sobre como os provedores podem habilitar a federação OIDC para destinatários no Databricks, consulte Habilitar federação do Open ID Connect (OIDC) para destinatários do OpenSharing.

Para obter informações sobre o fluxo "user-to-machine" (U2M), consulte Ler dados compartilhados usando federação Open ID Connect (OIDC) em um fluxo U2M.

Registrar um aplicativo no seu IdP

Para que se possa usar a federação OIDC para conceder acesso de seu aplicativo cliente a compartilhamentos do OpenSharing, deve-se registrar um aplicativo OAuth em seu IdP. Esta seção descreve como registrar uma aplicação OAuth no Microsoft Entra ID. Para outros IdPs, consulte a documentação deles.

Registrar um aplicativo no Microsoft Entra ID

Estas instruções se destinam a orientações gerais e não há garantia de que sejam mantidas atualizadas. Para obter instruções detalhadas de registro de aplicativo, consulte este início rápido da Microsoft.

  1. Entre no centro de administração do Microsoft Entra como, no mínimo, um Desenvolvedor de Aplicativos.
  2. Acesse **Registros de aplicativo** e crie um novo registro sem um URL de redirecionamento.
  3. Vá para Certificados e Segredos > Criar um segredo para seu aplicativo.
  4. Copie o valor secreto e armazene-o com segurança.
  5. Na página **Registros de aplicativo > Visão geral** do aplicativo, copie o **ID do aplicativo (cliente)**.
  6. Modifique o aplicativo para ser um aplicativo V2 atualizando o manifesto:
    1. Na seção **Gerenciar** do aplicativo, selecione **Manifesto**.
    2. No editor, defina accessTokenAcceptedVersion como 2.
    3. Salvar as alterações.

Envie as informações necessárias para o provedor de dados do Databricks.

Caso seja um destinatário e utilize o Microsoft Entra ID, é possível obter os campos exigidos pelo provedor seguindo estas instruções. Sempre consulte a documentação do Microsoft Entra ID para obter as instruções mais atualizadas.

  • URL do Emissor : https://login.microsoftonline.com/{tenantId}/v2.0, substituindo {tenantId} pelo seu ID de tenant do Entra. Se você não souber seu ID de tenant, consulte a documentação do Microsoft Entra ID.

  • Declaração de Assunto : Refere-se ao campo na carga JWT que identifica a entidade que acessa os dados. O campo específico usado depende do seu Provedor de Identidade (IdP) e dos casos de uso. Por exemplo, para aplicações M2M no Microsoft Entra ID, a declaração de assunto é azp, que representa o ID de cliente da aplicação autorizada a usar o token. Para mais detalhes, consulte a referência de declarações de access token do Microsoft Entra ID

  • Assunto : Refere-se ao identificador exclusivo do aplicativo OAuth registrado no Provedor de Identidade (IdP) do destinatário.
    Por exemplo, no Microsoft Entra ID, este é o ID do Aplicativo (cliente) . Se não copiou o ID do cliente durante o registro, poderá recuperá-lo seguindo os passos específicos para seu IdP. Para o Microsoft Entra ID, siga estes passos:

    1. Navegue até Registros de aplicativo no centro de administração do Microsoft Entra.
    2. Selecione seu aplicativo OAuth registrado.
    3. Localize a ID do aplicativo (cliente) na página Visão geral.

    Para outros IdPs, consulte a documentação deles para obter o identificador equivalente.

  • Público-alvo : Para autenticação de máquina para Databricks, você geralmente usa o clientId do recurso, mas pode especificar qualquer outro identificador de recurso válido.

    Isso deveria ter sido copiado na etapa anterior. Caso contrário, navegue até o centro de administração do Microsoft Entra, procure por **Registros de aplicativos**, selecione seu aplicativo registrado e, em seguida, localize a **ID do aplicativo (cliente)** na página Visão geral. Também é possível usar uma ID de recurso diferente.

Compartilhe o emissor, a declaração de assunto, o assunto e o público com o provedor.

Configure seu aplicativo para usar o arquivo de perfil OAuth compartilhado pelo provedor Databricks

Para configurar o aplicativo para acessar compartilhamentos do OpenSharing do provedor:

  1. Acesse o URL do portal de perfil OIDC que o provedor Databricks compartilhou com você.

    Solicite a URL caso ainda não a tenha recebido.

  2. Na página do portal, selecione o bloco M2M e, em Para OAuth , clique em Baixar arquivo .

  3. Modifique o arquivo JSON oauth_config.share baixado para adicionar seus clientId, clientSecret e scope.

    Você deve ter copiado a ID do cliente e o segredo do cliente quando registrou seu aplicativo. Não é possível recuperar o segredo do cliente novamente. Para recuperar a ID do cliente, consulte as instruções na seção anterior.

    Se você optar por usar o {clientId} do aplicativo como público, o escopo deve ser {clientId}/.default. Por exemplo, se o público for 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6, o escopo deve ser 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6/.default.

    Perfil de exemplo:

    JSON
    {
    "shareCredentialsVersion": 2,
    "endpoint": "https://oregon.cloud.databricks.com/api/2.0/delta-sharing/metastores/11a11aaa-11aa-11a12-11aa-111a1aa11111/recipients/a11da11aa1-a1a1-11a1-a11a-1111a11111aa",
    "tokenEndpoint": "https://login.microsoftonline.com/a111a111-1111-1aaa-1aa1-1aa1111aa1/oauth2/v2.0/token",
    "type": "oauth_client_credentials",
    "clientId": "[REPLACE_WITH_YOUR_CLIENT_ID]",
    "clientSecret": "[REPLACE_WITH_YOUR_CLIENT_SECRET]",
    "scope": "[REPLACE_WITH_YOUR_SCOPE]"
    }
  4. Instale e configure o cliente OpenSharing Python OSS mais recente.

    É preciso ter a versão mais recente do cliente OSS Python do OpenSharing.

    Bash
    python3 -m venv .venv
    source .venv/bin/activate
    pip3 install "delta-sharing>=1.3.1"
  5. Salve o arquivo oauth_config.share atualizado.

  6. Teste a configuração:

    Crie um script de teste, test.py:

    Python
    import delta_sharing

    # Point to the profile file. It can be a file on the local file system or a file on a remote storage.

    profile_file = "oauth_config.share"

    # Create a SharingClient.
    client = delta_sharing.SharingClient(profile_file)
    #
    # List all shared tables.
    tables = client.list_all_tables()

    print(tables)

    # replace the following line with the coordinates of the shared table
    #table_url = profile_file + "#sample_share.sample_db.sample_table"

    # Fetch 10 rows from a table and convert it to a Pandas DataFrame.
    # This can be used to read sample data from a table that cannot fit in the memory.
    #df = delta_sharing.load_as_pandas(table_url, limit=10)

    #print(df)

    Execute o script:

    Python
    python3 test.py

    O script deve listar as tabelas compartilhadas.