Pular para o conteúdo principal

Configurar uma política de federação

info

Visualização

A federação de tokens OAuth da Databricks está em Public Preview.

Databricks OAuth A federação de tokens permite que o senhor acesse com segurança Databricks APIs usando tokens do seu provedor de identidade (IdP). Para ativar a federação de tokens OAuth, o senhor deve configurar uma política de federação, seja como Databricks account-wide ou para cargas de trabalho.

Este artigo descreve como criar e configurar uma política de federação de tokens OAuth.

nota

O Databricks CLI Databricks workspace senhor não pode criar uma política de federação usando o no terminal da Web .

federação de tokens em toda a conta

Os administradores de conta podem configurar a federação de tokens OAuth no site Databricks account usando uma política de federação account. Uma política de federação account permite que todos os usuários e entidades de serviço em seu Databricks account acessem Databricks APIs usando tokens de seu provedor de identidade. Uma política de federação account especifica:

  • O provedor de identidade ou emissor do qual a Databricks aceitará tokens.
  • Os critérios para mapear um token para o usuário ou entidade de serviço correspondente em Databricks.

Por exemplo, a seguinte política de federação account é apresentada:

issuer: "https://idp.mycompany.com/oidc"
audiences: ["databricks"]
subject_claim: "sub"

Esse corpo JWT pode ser usado para autenticar a Databricks como username@mycompany.com:

JSON
{
"iss": "https://idp.mycompany.com/oidc",
"aud": "databricks",
"sub": "username@mycompany.com"
}

Configurar uma política de federação account

Para configurar uma política de federação account, o senhor deve especificar:

  • O emissor de tokens necessário, especificado na reivindicação iss do seu tokens. O emissor é um URL HTTPS que identifica seu provedor de identidade.

  • Os públicos de tokens permitidos, especificados na reivindicação aud do seu tokens. Esse identificador representa o destinatário dos tokens. Desde que o público nos tokens corresponda a pelo menos um público na política, os tokens são considerados correspondentes. Se não for especificado, o valor default será sua ID Databricks account .

  • A reivindicação em questão . Isso indica qual reivindicação de tokens contém o nome de usuário Databricks do usuário para o qual os tokens foram emitidos. Se não for especificado, o valor default será sub.

  • Opcionalmente, a chave pública (ou o URL da chave pública) usada para validar a assinatura do seu tokens, no formato JSON Web key Sets (JWKS). Se não for especificado (recomendado), o site Databricks obtém automaticamente a chave pública do conhecido site do emissor endpoint. Databricks recomenda enfaticamente que o senhor confie no conhecido site endpoint do emissor para descobrir a chave pública.

nota

Se você não especificar um JWKS ou um jwks_uri em sua política de federação, seu provedor de identidade deverá fornecer metadados do provedor OpenID em {issuer-url}/.well-known/openid-configuration. Os metadados do provedor OpenID devem incluir um jwks_uri que especifique o local da chave pública usada para verificar as assinaturas dos tokens.

Os administradores de conta podem configurar uma política de federação account usando o comando Databricks CLI (versão 0.239.0 e acima) ou o Databricks API. O senhor pode especificar até cinco políticas de federação account em seu Databricks account.

  1. Instale ou atualize para a versão mais recente da CLI da Databricks.

  2. Como administrador do account, autentique-se em seu Databricks account usando o CLI. Especificando o ACCOUNT_CONSOLE_URL (por exemplo, https://accounts.cloud.databricks.com) e seu ACCOUNT_ID da Databricks:

    Bash
    databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
  3. Crie a política de federação account. Por exemplo:

    Bash
    databricks account federation-policy create --json \
    '{
    "oidc_policy": {
    "issuer": "https://idp.mycompany.com/oidc",
    "audiences": [
    "databricks"
    ],
    "subject_claim": "sub"
    }
    }'

Exemplo de políticas de federação account

A tabela a seguir fornece exemplos de políticas de federação account e o corpo JWT correspondente.

Política da federação

Exemplo de tokens correspondentes

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"]

{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" }

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] subject_claim: "preferred_username"

{ "iss": "https://idp.mycompany.com/oidc", "aud": ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "other-audience"], "preferred_username": "username@mycompany.com", "sub": "some-other-ignored-value" }

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] jwks_json: {"keys":[{"kty":"RSA","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256", "n":"uPUViFv..."}]}

{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } (signature verified using public key in policy)

issuer: "https://idp.mycompany.com/oidc" audiences: ["2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"] jwks_uri: "https://idp.mycompany.com/jwks.json"

{ "iss": "https://idp.mycompany.com/oidc", "aud": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d", "sub": "username@mycompany.com" } (signature verified using public key fetched from jwks_uri)

Federação de identidades de carga de trabalho

A federação de identidade de carga de trabalho permite que suas cargas de trabalho automatizadas executadas fora do Databricks acessem as APIs do Databricks sem a necessidade de segredos do Databricks. Os administradores de conta podem configurar a federação de identidade de carga de trabalho usando uma política de federação de entidade de serviço.

Uma política de federação de entidade de serviço está associada a uma entidade de serviço em seu site Databricks account e especifica:

  • O provedor de identidade (ou emissor) do qual a entidade de serviço pode se autenticar.
  • A identidade (ou assunto) da carga de trabalho que tem permissão para se autenticar como a entidade de serviço Databricks.

Por exemplo, dada a seguinte política de federação de entidades de serviço para uma carga de trabalho GitHub Actions:

issuer: "https://token.actions.githubusercontent.com"
audiences: ["https://github.com/my-github-org"]
subject: "repo:my-github-org/my-repo:environment:prod"

Esse corpo JWT pode ser usado para autenticar a Databricks:

JSON
{
"iss": "https://token.actions.githubusercontent.com",
"aud": "https://github.com/my-github-org",
"sub": "repo:my-github-org/my-repo:environment:prod"
}

Configurar uma política de federação de entidade de serviço

Para configurar uma política de federação de entidade de serviço, o senhor deve especificar:

  • O emissor dos tokens necessários, especificado na declaração iss da identidade da carga de trabalho tokens. O emissor é um URL HTTPS que identifica o provedor de identidade da carga de trabalho.

  • O assunto dos tokens necessários, especificado na reivindicação sub da identidade da carga de trabalho tokens. O assunto identifica de forma exclusiva a carga de trabalho no ambiente de execução da carga de trabalho.

  • Os públicos de tokens permitidos, especificados na declaração aud da identidade da carga de trabalho tokens. O público representa o destinatário dos tokens. Desde que o público nos tokens corresponda a pelo menos um público na política, os tokens são considerados correspondentes. Se não for especificado, o valor default será sua ID Databricks account .

  • Opcionalmente, a chave pública (ou o URL da chave pública) usada para validar a assinatura da identidade da carga de trabalho tokens, no formato JSON Web key Sets (JWKS). Se não for especificado (recomendado), o site Databricks obtém automaticamente a chave pública do site bem conhecido do emissor endpoint. Databricks recomenda enfaticamente que o senhor confie no conhecido site endpoint do emissor para descobrir a chave pública.

nota

Se você não especificar um JWKS ou um jwks_uri em sua política de federação, seu provedor de identidade deverá fornecer metadados do provedor OpenID em {issuer-url}/.well-known/openid-configuration. Os metadados do provedor OpenID devem incluir um jwks_uri que especifique o local da chave pública usada para verificar as assinaturas dos tokens.

  • Opcionalmente, a reivindicação em questão. Isso indica qual reivindicação de tokens contém a identidade da carga de trabalho (ou assunto) dos tokens. Se não for especificado, o valor default será sub. Databricks recomenda enfaticamente o uso da reivindicação default sub para federação de identidade de carga de trabalho. Uma afirmação diferente de sub só deve ser usada nos casos em que a afirmação sub não é um identificador de assunto apropriado ou estável, o que é incomum. Para obter detalhes, consulte o exemplo de políticas de federação de entidades de serviço abaixo.

Os administradores de conta podem configurar uma política de federação de entidade de serviço usando o Databricks CLI (versão 0.239.0 e acima) ou o site Databricks API. O senhor pode criar até cinco políticas de federação de entidade de serviço por entidade de serviço da Databricks.

  1. Instale ou atualize para a versão mais recente da CLI da Databricks.

  2. Como administrador do account, autentique-se em seu Databricks account usando o CLI. Especificando o ACCOUNT_CONSOLE_URL (por exemplo, https://accounts.cloud.databricks.com) e seu ACCOUNT_ID da Databricks:

    Bash
    databricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID}
  3. Obtenha a ID numérica da entidade de serviço que terá a política de federação aplicada a ela. (Por exemplo, 3659993829438643.)

    Se o senhor souber antecipadamente a ID do aplicativo da entidade de serviço (normalmente um valor GUID, como bc3cfe6c-469e-4130-b425-5384c4aa30bb), poderá determinar a ID numérica da entidade de serviço usando a CLI da Databricks:

    Bash
    databricks account service-principals list --filter 'applicationId eq "<service-principal-application-id>"'
  4. Criar a política de federação da entidade de serviço. Aqui está um exemplo de criação de uma política de federação para um GitHub Actions:

    Bash
    databricks account service-principal-federation-policy create ${SERVICE_PRINCIPAL_NUMERIC_ID} --json \
    '{
    "oidc_policy": {
    "issuer": "https://token.actions.githubusercontent.com",
    "audiences": [
    "https://github.com/my-github-org"
    ],
    "subject": "repo:my-github-org/my-repo:environment:prod"
    }
    }'

Exemplo Databricks políticas de federação da entidade de serviço

A tabela a seguir fornece exemplos de políticas de federação de entidades de serviço e o corpo JWT correspondente.

Para obter as etapas completas de configuração para habilitar a federação de identidade de carga de trabalho para alguns desses provedores de identidade comuns, consulte Habilitar a federação de identidade de carga de trabalho em CI/CD.

Ferramenta

Política da federação

Exemplo de tokens correspondentes

GitHub Actions

issuer: "https://token.actions.githubusercontent.com" audiences: ["https://github.com/<github-org>"] subject: "repo:<github-org>/<repo>:environment:prod"

{ "iss": "https://token.actions.githubusercontent.com", "aud": "https://github.com/<github-org>", "sub": "repo:<github-org>/<repo>:environment:prod" }

Kubernetes

issuer: "https://kubernetes.default.svc" audiences: ["https://kubernetes.default.svc"] subject: "system:serviceaccount:namespace:podname" jwks json: {"keys":[{"kty":"rsa","e":"AQAB","use":"sig", "kid":"<key-id>","alg":"RS256","n":"uPUViFv..."}]}

{ "iss": "https://kubernetes.default.svc", "aud": ["https://kubernetes.default.svc"], "sub": "system:serviceaccount:namespace:podname" }

Azure DevOps

issuer: "https://vstoken.dev.azure.com/<org_id>" audiences: ["api://AzureADTokenExchange"] subject: "sc://my-org/my-project/my-connection"

{ "iss": "https://vstoken.dev.azure.com/<org_id>", "aud": "api://AzureADTokenExchange", "sub": "sc://my-org/my-project/my-connection" }

GitLab

issuer: "https://gitlab.example.com" audiences: ["https://gitlab.example.com"] subject: "project_path:my-group/my-project:..."

{ "iss": "https://gitlab.example.com", "aud": "https://gitlab.example.com", "sub": "project_path:my-group/my-project:..." }

Círculo CI

issuer: "https://oidc.circleci.com/org/<org_id>" audiences: ["<org_id>"] subject: "7cc1d11b-46c8-4eb2-9482-4c56a910c7ce" subject_claim: "oidc.circleci.com/project-id"

{ "iss": "https://oidc.circleci.com/org/<org_id>", "aud": "<org_id>", "oidc.circleci.com/project-id": "7cc1d11b-46c8-4eb2-9482-4c56a910c7ce" }

Próximas etapas

Depois que o senhor tiver configurado uma política de federação para seu account:

  • Talvez seja necessário configurar seu provedor de identidade para gerar tokens para seus usuários trocarem com a Databricks. Consulte a documentação do seu provedor de identidade para obter instruções. Para obter as etapas completas de configuração para habilitar a federação de identidade de carga de trabalho para alguns provedores de identidade comuns, consulte Habilitar a federação de identidade de carga de trabalho em CI/CD.
  • O senhor pode usar um JWT do seu provedor de identidade para acessar a API da Databricks. Primeiro, troque os tokens JWT do seu provedor de identidade por tokens Databricks OAuth e, em seguida, use os tokens Databricks OAuth no campo Bearer: da chamada API para obter acesso e concluir a chamada. Os tokens devem ser JWTs válidos e assinados usando os algoritmos RS256 ou ES256. Para obter detalhes sobre a implementação da troca de tokens, consulte Usar tokens de um provedor de identidade para autenticar Databricks REST APIs .