Autorizar o acesso da entidade de serviço ao Databricks com o OAuth
Esta página explica como autorizar o acesso ao recurso Databricks a partir de processos autônomos, como comandos CLI automatizados ou chamadas API REST feitas a partir de scripts ou aplicativos.
A Databricks usa o OAuth 2.0 como o protocolo preferencial para autorização e autenticação da entidade de serviço fora da interface do usuário. A autenticação unificada de clientes automatiza a geração de tokens e o refresh. Quando uma entidade de serviço se inscreve e recebe consentimento, o site OAuth emite tokens de acesso para o site CLI, SDK, ou outra ferramenta para usar em seu nome. Cada token de acesso é válido por uma hora, após o qual um novo token é solicitado automaticamente.
Nesta página, autorização se refere ao uso OAuth para conceder a uma entidade de serviço acesso ao recurso Databricks , enquanto autenticação se refere à validação de credenciais por meio de access tokens.
Para obter mais detalhes de alto nível, consulte Autorizar acesso ao recurso Databricks.
Formas de autorizar uma entidade de serviço
A Databricks oferece suporte a duas maneiras de autorizar uma entidade de serviço:
-
Automático (recomendado): Use a autenticação unificada com ferramentas e SDKs compatíveis, como o Databricks Terraform SDK. Essa abordagem lida automaticamente com a geração de tokens e com o site refresh e é ideal para automação ou outras cargas de trabalho não supervisionadas.
-
Manual: Gere um verificador de código e um desafio e, em seguida, troque-os por tokens OAuth. Use esse método se sua ferramenta ou API não for compatível com a autenticação unificada. Talvez o senhor precise criar seu próprio mecanismo de tokens refresh para seu aplicativo. Para obter detalhes, consulte Gerar manualmente OAuth M2M access tokens.
Pré-requisitos
Antes de configurar o OAuth, execute as seguintes etapas:
- Crie uma entidade de serviço Databricks. Consulte Adicionar entidade de serviço ao seu account.
- Acesse o site de configuração tab para a entidade de serviço e selecione os direitos que ela deve ter para este workspace.
- Acesse o site Permissions (Permissões ) tab e conceda acesso a todos os usuários, entidades de serviço e grupos do Databricks que o senhor deseja gerenciar e usar essa entidade de serviço. Veja Quem pode gerenciar e usar a entidade de serviço?
Etapa 1: Criar um segredo OAuth
Para autorizar o acesso ao seu recurso Databricks com OAuth, o senhor deve criar um segredo OAuth. O segredo é usado para gerar tokens de acesso OAuth para autenticação. Uma entidade de serviço pode ter até cinco segredos OAuth, e cada segredo pode ser válido por até dois anos.
Os administradores de contas e os administradores de workspaces podem criar um segredo do OAuth para uma entidade de serviço.
- Clique no seu nome de usuário na barra superior e selecione Configurações .
- Clique na guia Identidade e acesso .
- Ao lado de Entidades de serviço , clique em Gerenciar .
- Selecione a entidade de serviço.
- Clique na guia Segredos .
- Clique em Gerar segredo .
- Defina a vida útil do segredo em dias (máximo de 730 dias).
- Clique em Gerar .
- Copie o segredo e o ID do cliente exibidos e clique em Concluído . O segredo é mostrado apenas uma vez. O ID do cliente é o mesmo que o ID do aplicativo da entidade de serviço.
Os administradores de conta também podem criar um segredo OAuth no console account. Em User management (Gerenciamento de usuários ) tab, selecione a entidade de serviço e, em seguida, vá para Credentials (Credenciais) & secrets (Segredos ) tab.
Para permitir que a entidade de serviço use o armazenamento em cluster ou SQL, o senhor deve conceder à entidade de serviço acesso a eles. Consulte computar permissões ou gerenciar SQL warehouse a.
Etapa 2: Use a autorização OAuth
Para usar a autorização OAuth com a ferramenta de autenticação unificada, o senhor deve definir os seguintes campos associados variável de ambiente, .databrickscfg, Terraform ou Config:
- O Databricks host, especificado como
https://accounts.cloud.databricks.compara account operações ou o workspace URL de destino, por exemplo,https://dbc-a1b2345c-d6e7.cloud.databricks.compara workspace operações. - O ID da conta do Databricks, para operações da conta do Databricks.
- O ID do cliente da entidade de serviço.
- O segredo da entidade de serviço.
Para realizar a autenticação da OAuth entidade de serviço, integre o seguinte em seu código, com base na ferramenta participante ou SDK:
- Environment
- Profile
- CLI
- Connect
- VS Code
- Terraform
- Python
- Java
- Go
Para usar a variável de ambiente para um tipo específico de autenticação Databricks com uma ferramenta ou SDK, consulte Autorizar acesso ao recurso Databricks ou a documentação da ferramenta ou do SDK. Veja também variável de ambiente e campos para autenticação unificada e a prioridade do método de autenticação.
Para operações de nível account, defina as seguintes variáveis de ambiente:
DATABRICKS_HOST, defina para o valor da URL do console da sua conta Databricks,https://accounts.cloud.databricks.com.DATABRICKS_ACCOUNT_IDDATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRET
Para operações em nível workspace, defina as seguintes variáveis de ambiente:
DATABRICKS_HOST, definido como o valor do Databricks workspace URL, porhttps://dbc-a1b2345c-d6e7.cloud.databricks.comexemplo,.DATABRICKS_CLIENT_IDDATABRICKS_CLIENT_SECRET
Crie ou identifique um perfil de configuração do Databricks com os seguintes campos no seu arquivo .databrickscfg . Se você criar o perfil, substitua os espaços reservados pelos valores apropriados. Para usar o perfil com uma ferramenta ou SDK, consulte Autorizar acesso ao recurso Databricks ou a documentação da ferramenta ou do SDK. Veja também variável de ambiente e campos para autenticação unificada e a prioridade do método de autenticação.
accountPara operações .databrickscfg de nível, defina os seguintes valores em seu arquivo. Nesse caso, o URL do console Databricks account é https://accounts.cloud.databricks.com:
[<some-unique-configuration-profile-name>]
host = <account-console-url>
account_id = <account-id>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
workspacePara operações .databrickscfg de nível, defina os seguintes valores em seu arquivo. Nesse caso, o host é o Databricks workspace URL, por https://dbc-a1b2345c-d6e7.cloud.databricks.com exemplo,:
[<some-unique-configuration-profile-name>]
host = <workspace-url>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
Para a CLI do Databricks, faça um das coisas a seguir:
- Defina a variável de ambiente conforme especificado em Environment tab.
- Defina os valores em seu arquivo
.databrickscfgconforme especificado no Profile tab.
As variáveis de ambiente sempre têm precedência sobre os valores em seu arquivo .databrickscfg.
Consulte também a autenticação OAuth máquina a máquina (M2M).
A autenticação da entidade de serviço OAuth é compatível com as seguintes versões do Databricks Connect:
- Para o Python, Databricks Connect para Databricks Runtime 13.1 e superior.
- Para o Scala, Databricks Connect para Databricks Runtime 13.3 LTS e superior.
Para o Databricks Connect, é possível:
- Utilize um perfil de configuração: defina os valores de nível d workspaceno seu arquivo
.databrickscfgconforme descrito em Perfil tab. Defina também ocluster_idpara o URL da sua instância do workspace. - Utilize a variável de ambiente: defina os mesmos valores apresentados na página de configuração do ambiente ( tab). Defina também o
DATABRICKS_CLUSTER_IDpara o URL da sua instância do workspace.
Os valores em .databrickscfg têm precedência sobre a variável de ambiente.
Para inicializar Databricks Connect com essas configurações, consulte a configuração de computação para Databricks Connect.
Para a extensão de IDE do Databricks, faça o seguinte:
- Defina os valores em seu
.databrickscfgarquivo para Databricks workspace-level operações conforme especificado no Profile. tab - No painel Configuração da extensão do Databricks para IDE, clique em Configurar Databricks .
- Na paleta de comandos , em Databricks Host , digite o URLworkspace, por exemplo,
https://dbc-a1b2345c-d6e7.cloud.databricks.com, e pressioneEnter. - Na paleta de comandos , selecione o nome do perfil de destino na lista para o URL.
Para obter mais detalhes, consulte Configurar a autorização para a extensão de IDE do Databricks.
operações no nível da conta
Para autenticação default:
provider "databricks" {
alias = "accounts"
}
Para configuração direta:
provider "databricks" {
alias = "accounts"
host = <retrieve-account-console-url>
account_id = <retrieve-account-id>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de algum outro armazenamento de configuração, como o HashiCorp Vault. Consulte também Vault Provider. Nesse caso, o URL do console Databricks account é https://accounts.cloud.databricks.com.
operações no nível do espaço de trabalho
Para a configuração default:
provider "databricks" {
alias = "workspace"
}
Para configuração direta:
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de algum outro armazenamento de configuração, como o HashiCorp Vault. Consulte também Vault Provider. Nesse caso, o host é o Databricks workspace URL, por https://dbc-a1b2345c-d6e7.cloud.databricks.com exemplo,.
Para obter mais informações sobre autenticação com o provedor Databricks Terraform, consulte Autenticação.
operações no nível da conta
Para a configuração default:
from databricks.sdk import AccountClient
a = AccountClient()
# ...
Para configuração direta:
from databricks.sdk import AccountClient
a = AccountClient(
host = retrieve_account_console_url(),
account_id = retrieve_account_id(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
Substitua os espaços reservados de retrieve por sua própria implementação, para recuperar os valores do console ou de outro armazenamento de configuração, como o AWS Systems Manager Parameter Store. Nesse caso, o URL do console Databricks account é https://accounts.cloud.databricks.com.
operações no nível do espaço de trabalho
Para a configuração default:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
Para configuração direta:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host = retrieve_workspace_url(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de outro armazenamento de configuração, como o AWS Systems Manager Parameter Store. Nesse caso, o host é o Databricks workspace URL, por https://dbc-a1b2345c-d6e7.cloud.databricks.com exemplo,.
Para obter mais informações sobre a autenticação com as ferramentas Databricks e os SDKs que usam Python e implementam a autenticação unificada, consulte:
operações no nível da conta
Para a configuração default:
import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...
Para configuração direta:
import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
.setHost(retrieveAccountConsoleUrl())
.setAccountId(retrieveAccountId())
.setClientId(retrieveClientId())
.setClientSecret(retrieveClientSecret());
AccountClient a = new AccountClient(cfg);
// ...
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de outro armazenamento de configuração, como o AWS Systems Manager Parameter Store. Nesse caso, o URL do console Databricks account é https://accounts.cloud.databricks.com.
operações no nível do espaço de trabalho
Para a configuração default:
import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...
Para configuração direta:
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
.setHost(retrieveWorkspaceUrl())
.setClientId(retrieveClientId())
.setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de outro armazenamento de configuração, como o AWS Systems Manager Parameter Store. Nesse caso, o host é o Databricks workspace URL, por https://dbc-a1b2345c-d6e7.cloud.databricks.com exemplo,.
Para obter mais informações sobre a autenticação com as ferramentas Databricks e os SDKs que usam Java e implementam a autenticação unificada, consulte:
- Configure o cliente Databricks Connect para Scala (o cliente Databricks Connect para Scala usa o Databricks SDK para Java incluído para autenticação)
- Autentique o SDK do Databricks para Java com sua account ou workspace do Databricks
operações no nível da conta
configuração padrão:
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())
Para configuração direta:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
Host: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de outro armazenamento de configuração, como o AWS Systems Manager Parameter Store. Nesse caso, o URL do console Databricks account é https://accounts.cloud.databricks.com.
operações no nível do espaço de trabalho
Para a configuração default:
import "github.com/databricks/databricks-sdk-go"
// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())
Para configuração direta:
import "github.com/databricks/databricks-sdk-go"
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
Host: retrieveAccountConsoleUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Substitua os espaços reservados retrieve por sua própria implementação para recuperar os valores do console ou de outro armazenamento de configuração, como o AWS Systems Manager Parameter Store. Nesse caso, o host é o Databricks workspace URL, por https://dbc-a1b2345c-d6e7.cloud.databricks.com exemplo,.
Para obter mais informações sobre a autenticação com Databricks ferramentas e SDKs que usam Go e que implementam a autenticação unificada de clienteDatabricks, consulte Autenticar o Databricks SDK para Go com seu Databricks account ou workspace.
Gerar manualmente tokens de acesso OAuth M2M
Esta seção é para ferramentas ou serviços que não são compatíveis com a autenticação unificadaDatabricks. Se o senhor precisar gerar manualmente, refresh, ou usar Databricks OAuth tokens para autenticação M2M, siga estes passos.
Para gerar tokens de acesso OAuth M2M, use o ID do cliente da entidade de serviço e o segredo OAuth. Cada token de acesso é válido por uma hora. Após a expiração, solicite novos tokens. O senhor pode gerar tokens no nível account ou workspace:
- account level (nível da conta): Use para chamar tanto account-level quanto workspace-level REST APIs na conta e no espaço de trabalho que a entidade de serviço pode acessar. Consulte Gerar um account-level access tokens.
- nível de espaço de trabalho: Use para chamar REST APIs dentro de um único workspace. Consulte Gerar um workspace-level access tokens.
Gerar um account-level access tokens
Use um token de nível accountpara chamar REST APIs para o account e qualquer espaço de trabalho que a entidade de serviço possa acessar.
-
Construa o URL de tokens endpoint substituindo
<account-id>no URL a seguir pelo seu ID account.https://accounts.cloud.databricks.com/oidc/accounts/<my-account-id>/v1/token -
Use
curlpara solicitar tokens de acesso OAuth. Substitua:<token-endpoint-URL>com o URL acima.<client-id>com o ID do cliente da entidade de serviço (ID do aplicativo).<client-secret>com o segredo OAuth da entidade de serviço.
Bashexport CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis'Isso gera uma resposta semelhante a:
JSON{
"access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
"token_type": "Bearer",
"expires_in": 3600
}O escopo
all-apissolicita um token de acesso OAuth que permite que a entidade de serviço chame qualquer Databricks REST API que tenha permissão para acessar. -
Copie o valor
access_tokenda resposta.
Gerar um workspace-level access tokens
Use tokens de nível workspacesomente com REST APIs em que workspace.
-
Construa o endpoint URL dos tokens substituindo
<databricks-instance>pelo seu<databricks-instance>pelo Databricks workspace nome da instância, pordbc-a1b2345c-d6e7.cloud.databricks.comexemplo,:https://<databricks-instance>/oidc/v1/token -
Use
curlpara solicitar tokens de acesso OAuth. Substitua:<token-endpoint-URL>com o URL acima.<client-id>com o ID do cliente da entidade de serviço (ID do aplicativo).<client-secret>com o segredo OAuth da entidade de serviço.
Bashexport CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis'Isso gera uma resposta semelhante a:
JSON{
"access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
"token_type": "Bearer",
"expires_in": 3600
} -
Copie o valor
access_tokenda resposta.
Para gerar tokens para um serviço endpoint, inclua a ID endpoint e a ação em sua solicitação. Consulte Obter um OAuth tokens manualmente.
Assumir uma função
Visualização
Este recurso está em Pré-visualização Pública.
Um Service Principal pode assumir uma função quando solicita um access token em nível de Workspace. Quando um Service Principal assume uma função, as permissões da função substituem as do próprio Service Principal. No Databricks, uma função é implementada como um grupo, e o Service Principal deve ter permissão de Assumir nesse grupo. Para obter mais informações, consulte role-based access control (RBAC).
Para assumir uma função, adicione o parâmetro assume_group à solicitação de token:
export CLIENT_ID=<client-id>
export CLIENT_SECRET=<client-secret>
curl --request POST \
--url <token-endpoint-URL> \
--user "$CLIENT_ID:$CLIENT_SECRET" \
--data 'grant_type=client_credentials&scope=all-apis&assume_group=<group-id>'
Substitua <group-id> pelo ID numérico do grupo de apoio da função.
Assumir uma função tem os seguintes requisitos e limitações:
- Suportado apenas para tokens em nível de workspace. Se o senhor incluir
assume_groupem uma solicitação de token em nível de conta, a solicitação falhará. - O Service Principal deve ter permissão de **Assumir** no grupo. Caso contrário, a solicitação falha. Para conceder Assumir, consulte Gerenciar permissões em um grupo.
Para obter mais informações sobre a alternância de funções, consulte Alternar funções.
Chamar uma API REST da Databricks
Use os tokens de acesso OAuth para chamar account-level ou workspace-level REST APIs. Para chamar o account-level APIs, a entidade de serviço deve ser um administrador do account.
Inclua os tokens no cabeçalho de autorização com a autenticação Bearer.
Exemplo account-level REST API request
Este exemplo lista todos os espaços de trabalho de um account. Substitua:
<oauth-access-token>com os tokens de acesso OAuth da entidade de serviço.<account-id>com sua ID account.
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/workspaces'
Exemplo workspace-level REST API request
Este exemplo lista todos os clusters disponíveis em um workspace. Substitua:
<oauth-access-token>com os tokens de acesso OAuth da entidade de serviço.<databricks-instance>com o Databricks workspace nome da instância, pordbc-a1b2345c-d6e7.cloud.databricks.comexemplo,.
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'
Solucionar problemas de autenticação OAuth M2M
Use estes passos para corrigir os problemas mais comuns com a autenticação Databricks OAuth M2M para entidades de serviço.
Verificações rápidas
Comece verificando esses problemas comuns de configuração que causam falhas na autenticação do OAuth M2M:
- Credenciais:
DATABRICKS_CLIENT_IDé definido como o ID do aplicativo da entidade de serviço (ID do cliente) eDATABRICKS_CLIENT_SECRETé definido como o valor secreto do OAuth, ambos sem espaços extras. - Host:
DATABRICKS_HOSTapontahttps://accounts.cloud.databricks.compara para account operações ou para o workspace URL de destino, por exemplo,https://dbc-a1b2345c-d6e7.cloud.databricks.compara workspace operações. Não inclua/api. - Atribuição: A entidade de serviço é atribuída ao alvo workspace.
- Permissões: A entidade de serviço tem as permissões necessárias no recurso de destino.
- Conflitos: Nenhuma variável conflitante definida, como
DATABRICKS_TOKEN,DATABRICKS_USERNAME. execuçãoenv | grep DATABRICKSe conflitos não definidos. - Ferramentas: Use a autenticação unificada e as versões atuais da CLI ou do SDK.
401 Não autorizado
Causas e soluções prováveis:
- ID de cliente ou segredo incorretos: copie novamente
DATABRICKS_CLIENT_IDeDATABRICKS_CLIENT_SECRET. Regenere o segredo se não tiver certeza. - Segredo expirado: crie um novo segredo se o atual tiver expirado.
- Emissor de tokens errado: Para M2M, use os tokens Databricks OAuth endpoint, não seu IdP ou cloud tokens endpoint.
- Incompatibilidade de host: Se o senhor se autenticar em workspace APIs,
DATABRICKS_HOSTdeve ser o URL workspace que o senhor chama.
403 Proibido
Causas e soluções prováveis:
- Permissões de recurso ausentes: Conceda à entidade de serviço
CAN USEouCAN MANAGEno depósito clusters ou SQL e as permissões necessárias em nível de objeto para Notebook, Job ou objetos de dados. - Não há atribuição de workspace: Atribua a entidade de serviço ao workspace no console account.
- Acesso de administrador API: Para acesso somente de administrador APIs, atribua a entidade de serviço ao grupo de administradores workspace ou conceda permissões de administrador account.
Problemas de configuração
Os sintomas incluem timeouts, "host not found" (host não encontrado), "account not found" ( não encontrado) ou "workspace not found" ( não encontrado).
Correções:
- Regras de host: Use o URL do console account para account APIs. Use o URL workspace para workspace APIs. Não inclua o sufixo
/api. - ID da conta: Forneça
DATABRICKS_ACCOUNT_IDsomente para operações de nível account. Use o UUID do console account. - Seleção de perfil: se você usar vários perfis, passe
--profile <name>ou definaDATABRICKS_CONFIG_PROFILE.
Conectividade
Se a autenticação do OAuth M2M falhar devido a problemas de rede, use estes testes para verificar se seu ambiente pode acessar o endpoint Databricks:
- DNS:
nslookup <your-host>(deve retornar endereços IP para o hostname) - TLS e acessibilidade:
curl -I https://<your-host>(deve retornar o status HTTP 200, 401 ou 403) - Rede corporativa: Confirme se as regras de proxy ou firewall permitem HTTPS para o endpoint Databricks
Recurso adicional
- Entidades de serviço
- Visão geral do modelo de identidade da Databricks
- Informações adicionais sobre autenticação e controle de acesso