Autorizar o acesso da entidade de serviço ao Databricks com o OAuth
Este artigo explica como autorizar o acesso ao Databricks recurso a partir de processos não supervisionados, como o CLI comando automatizado ou REST API chamadas 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.
Neste artigo, a autorização refere-se ao uso do site OAuth para conceder a uma entidade de serviço acesso ao recurso Databricks, enquanto a autenticação refere-se à validação de credenciais por meio do acesso tokens.
Para obter mais detalhes de alto nível, consulte Autorização de acesso a Databricks recurso.
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 de cliente com ferramentas e SDKs compatíveis, como o Databricks Terraform SDK. Essa abordagem lida com a geração de tokens e com o site refresh automaticamente 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 um token OAuth. Use esse método se sua ferramenta ou API não for compatível com a autenticação unificada de cliente. Talvez o senhor precise criar seu próprio mecanismo de tokens refresh para seu aplicativo. Para obter detalhes, consulte Gerar manualmente tokens de acesso OAuth M2M.
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.
- Na página de detalhes da entidade de serviço, abra a seção Segredos tab.
- Em Segredos do OAuth , clique em Gerar segredo .
- Defina a vida útil do segredo em dias (máximo de 730 dias).
- 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 de cliente 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.com
para account operações ou o workspace URL de destino, por exemplo,https://dbc-a1b2345c-d6e7.cloud.databricks.com
para 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 Autorização de acesso a Databricks recurso ou a documentação da ferramenta ou SDK. Consulte também variável de ambiente e campos para autenticação unificada de cliente e os métodos padrão para autenticação unificada de cliente.
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_ID
DATABRICKS_CLIENT_ID
DATABRICKS_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.com
exemplo,.DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
Crie ou identifique um perfil de configuração do Databricks com os seguintes campos em 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 Autorização de acesso ao recurso Databricks ou a documentação da ferramenta ou SDK. Consulte também variável de ambiente e campos para autenticação unificada de cliente e os métodos padrão para autenticação unificada de cliente.
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
.databrickscfg
conforme 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
.databrickscfg
conforme descrito em Perfil tab. Defina também ocluster_id
para 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_ID
para 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 do Databricks para Visual Studio Code, faça o seguinte:
- Defina os valores em seu
.databrickscfg
arquivo para Databricks workspace-level operações conforme especificado no Profile. tab - No painel Configuração da extensão do Databricks para Visual Studio Code, 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 autorização para a extensão Databricks para Visual Studio Code.
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 do cliente, 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 do cliente, 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"
)
// ...
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(),
AccountId: retrieveAccountId(),
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"
)
// ...
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 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 destina-se a ferramentas ou serviços que não oferecem suporte à autenticação de cliente unificadaDatabricks. Se o senhor precisar gerar manualmente, refresh, ou usar Databricks OAuth tokens para autenticação M2M, siga estas etapas.
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
curl
para 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-apis
solicita 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_token
da 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.com
exemplo,:https://<databricks-instance>/oidc/v1/token
-
Use
curl
para 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_token
da 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.
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.com
exemplo,.
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'
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