Configurez une politique de fédération
La fédération de jetons OAuth Databricks vous permet d'accéder en toute sécurité aux APIs Databricks en utilisant des jetons de votre fournisseur d'identité (IdP). Pour activer la fédération de jetons OAuth, vous devez configurer une politique de fédération, soit à l'échelle du compte Databricks, soit pour les workloads.
Cette page décrit comment créer et configurer une stratégie de fédération de jetons OAuth.
Fédération d'identité Workload
La fédération d'identités des Workloads permet à vos Workloads automatisés s'exécutant en dehors de Databricks d'accéder aux APIs Databricks sans nécessiter de secrets Databricks. Les administrateurs de compte peuvent configurer la fédération d'identités des Workloads à l'aide d'une politique de fédération de Service Principal.
Une politique de fédération de Service Principal est associée à un Service Principal de votre compte Databricks et spécifie :
- Le fournisseur d'identité (ou émetteur) auprès duquel le Service Principal peut s'authentifier.
- L'identité de la charge de travail (ou sujet) qui est autorisée à s'authentifier en tant que Service Principal Databricks.
Par exemple, étant donné la politique de fédération de Service Principal suivante pour une charge de travail GitHub Actions :
- Émetteur :
https://token.actions.githubusercontent.com - Audiences :
https://github.com/my-github-org - Objet :
repo:my-github-org/my-repo:environment:prod
Vous pouvez utiliser ce corps JWT pour vous authentifier auprès de Databricks :
{
"iss": "https://token.actions.githubusercontent.com",
"aud": "https://github.com/my-github-org",
"sub": "repo:my-github-org/my-repo:environment:prod"
}
Configurer une politique de fédération de service principal
Les administrateurs de compte peuvent configurer une politique de fédération de Service Principal à l'aide du CLI Databricks ou de l'API Databricks. Vous pouvez créer un maximum de 20 politiques de fédération de Service Principal par Service Principal Databricks.
Pour configurer une stratégie de fédération de Service Principal, vous devez spécifier les éléments suivants :
-
URL de l'émetteur : une URL HTTPS qui identifie le fournisseur d'identité de la charge de travail, spécifiée dans la revendication
issdes jetons d'identité de la charge de travail. -
**Objet :** L'identifiant unique de la charge de travail dans l'environnement d'exécution de la charge de travail. Si non spécifié, le default est
sub. -
Audiences : Le destinataire prévu du jeton, spécifié dans la revendication d’audience
aud. Le jeton correspond si son audience correspond à au moins une audience de la politique. S'il n'est pas spécifié, l'ID de votre compte Databricks est utilisé par default. -
Revendication de sujet : (Facultatif) Spécifie la revendication de jeton qui contient l'identité de la charge de travail (également appelée le sujet) du jeton. Si non défini, Databricks utilise
subpar default. Databricks recommande de conserver la revendication par defaultsubpour la fédération d'identité de charge de travail. Ne choisissez une revendication différente que sisubn'est pas un identificateur de sujet approprié ou stable, ce qui est rare. Pour plus de détails, consultez Exemple de politiques de fédération de Service Principal. -
Validation de la signature du jeton : (Facultatif) Les clés publiques, ou leur URL, au format JSON Web Key Sets (JWKS) utilisées pour valider les signatures de jeton. JWKS JSON prend en charge jusqu'à 5 clés. Si votre fournisseur d'identité en publie davantage, utilisez un URI JWKS à la place.
Si non spécifié, Databricks récupère les clés à partir de l'Endpoint connu de l'émetteur, ce qui est l'approche recommandée. Votre fournisseur d'identité doit servir les métadonnées du fournisseur OpenID à
<issuer-url>/.well-known/openid-configurationqui incluent unjwks_urispécifiant l'emplacement des clés publiques utilisées pour vérifier les signatures de jetons.
- Databricks UI
- Databricks CLI
- Databricks Account API
- En tant qu'administrateur de compte, connectez-vous à la console de compte Databricks à l'adresse
https://accounts.cloud.databricks.com. - Cliquez sur **Gestion des utilisateurs**.
- Accédez à l’onglet Service principals .
- Sélectionnez le service principal pour lequel créer la politique.
- Accédez à l'onglet Identifiants et secrets .
- Sous l'onglet Federation policies tab, cliquez sur Créer une politique .
- Sélectionnez un fournisseur d'identifiants fédéré et configurez les champs correspondants.
- Cliquez sur Créer une politique .
Vous ne pouvez pas utiliser la CLI Databricks dans le Workspace Databricks terminal web pour créer une politique de fédération.
-
Installez ou mettez à jour vers la version la plus récente de la CLI Databricks.
-
En tant qu'administrateur de compte, authentifiez-vous à votre compte Databricks à l'aide de l'interface de ligne de commande (CLI). Spécifiez le
ACCOUNT_CONSOLE_URLet votre DatabricksACCOUNT_ID:Bashdatabricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID} -
Obtenez l'ID numérique du Service Principal auquel la politique de fédération sera appliquée. (Par exemple :
3659993829438643.)Si vous connaissez l'ID d'application du Service Principal (généralement une valeur GUID, telle que
bc3cfe6c-469e-4130-b425-5384c4aa30bb) à l'avance, vous pouvez alors déterminer l'ID numérique du Service Principal à l'aide de Databricks CLI :Bashdatabricks account service-principals list --filter 'applicationId eq "<service-principal-application-id>"' -
Créez la politique de fédération du Service Principal. Voici un exemple de création d'une politique de fédération pour une GitHub Action :
Bashdatabricks 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"
}
}'
-
Obtenez l'ID numérique du Service Principal (par exemple,
3659993829438643) à partir de la console de compte ou en utilisant l'API des Service Principals. -
Créez la politique de fédération du Service Principal. Spécifiez le
ACCOUNT_CONSOLE_URL, votreACCOUNT_IDDatabricks, leSERVICE_PRINCIPAL_NUMERIC_IDet unTOKENporteur pour l'authentification :Bashcurl --request POST \
--header "Authorization: Bearer $TOKEN" \
"${ACCOUNT_CONSOLE_URL}/api/2.0/accounts/${ACCOUNT_ID}/servicePrincipals/${SERVICE_PRINCIPAL_NUMERIC_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://token.actions.githubusercontent.com",
"audiences": [
"https://github.com/my-github-org"
],
"subject": "repo:my-github-org/my-repo:environment:prod"
}
}'Pour une documentation de référence complète de l'API, consultez l'API de stratégie de fédération de compte.
Exemple de politiques de fédération de Service Principal Databricks
Le tableau suivant présente des exemples de politiques de fédération de service principal et le corps JWT correspondant.
Pour connaître les étapes de configuration complètes permettant d’activer la fédération d’identité de charge de travail pour certains de ces fournisseurs d’identité courants, consultez Activer la fédération d’identité de charge de travail dans CI/CD.
Outil | Politique de fédération | Exemple de jeton correspondant. |
|---|---|---|
GitHub Actions | Émetteur : |
|
Kubernetes | Émetteur : |
|
Azure DevOps | Émetteur : |
|
GitLab | Émetteur : |
|
CircleCI | Émetteur : |
|
Fédération d’identités sortante AWS IAM | Émetteur : |
|
Pour la fédération d'identités sortantes AWS IAM, la revendication sub dans le jeton est l'ARN du rôle IAM de la charge de travail appelante (par exemple, le rôle d'exécution Lambda, le rôle de tâche ECS ou le rôle d'instance EC2).
Bonnes pratiques pour les politiques de fédération de service principal
Chaque Service Principal prend en charge un maximum de 20 stratégies de fédération. Suivez ces directives pour éviter d'atteindre cette limite.
Mapper une identité externe par service principal
Créez un Service Principal dédié pour chaque identité de charge de travail externe distincte. Plusieurs politiques de fédération sur un seul Service Principal ne sont appropriées que lorsque la même identité logique s'authentifie par le biais de différents fournisseurs d'identité. Par exemple, une charge de travail qui s'exécute à la fois dans GitHub Actions et Azure DevOps nécessite deux politiques, une par fournisseur, sur le même Service Principal.
N'utilisez pas plusieurs politiques pour mapper différentes charges de travail (telles que des pods Kubernetes séparés par région) à un seul Service Principal. Créez plutôt un Service Principal distinct pour chaque charge de travail. Cela préserve l'attribution du audit Logs et vous permet de révoquer l'accès pour une charge de travail sans affecter les autres.
Rationaliser les autorisations avec des groupes
Lorsque plusieurs Service Principal ont besoin des mêmes autorisations, ajoutez-les en tant que membres d'un groupe Databricks et attribuez les autorisations au groupe. Voir les meilleures pratiques d'identité.
Utilisez la propriété subject_claim pour les revendications alternatives
Par default, Databricks utilise la revendication sub du jeton d'identité pour identifier la charge de travail. Si votre fournisseur d'identité n'utilise pas la revendication sub comme identifiant de charge de travail stable, définissez la propriété subject_claim sur le nom de revendication utilisé par votre fournisseur. Pour un exemple, voir la configuration CircleCI dans Exemple de politiques de fédération de Service Principal Databricks.
Fédération de jetons à l'échelle du compte
Les administrateurs de compte peuvent configurer la fédération de jetons OAuth dans le compte Databricks à l'aide d'une politique de fédération de compte. Une politique de fédération de compte permet à tous les utilisateurs et Service Principals de votre compte Databricks d'accéder aux APIs Databricks à l'aide de jetons de votre fournisseur d'identité. Une politique de fédération de compte spécifie :
- Le fournisseur d'identité ou l'émetteur auprès duquel Databricks acceptera les jetons.
- Les critères pour mapper un jeton à l'utilisateur Databricks ou au service principal correspondant.
Par exemple, étant donné une politique de fédération avec les champs suivants :
- Émetteur :
https://idp.mycompany.com/oidc - Audiences :
databricks - Revendication de sujet :
sub
Utilisez ce corps JWT pour vous authentifier auprès de Databricks en tant que username@mycompany.com:
{
"iss": "https://idp.mycompany.com/oidc",
"aud": "databricks",
"sub": "username@mycompany.com"
}
Configurer une politique de fédération de compte
Les administrateurs de compte peuvent configurer une politique de fédération de compte à l'aide de l'interface utilisateur de Databricks, de la CLI Databricks ou de l'API REST Databricks. Vous pouvez spécifier un maximum de 20 politiques de fédération de compte dans votre compte Databricks.
Pour configurer une stratégie de fédération de compte, vous devez spécifier les éléments suivants :
-
URL de l'émetteur : une URL HTTPS qui identifie votre fournisseur d'identité, spécifiée dans la revendication
issde vos jetons. -
Audiences : Le destinataire prévu du jeton, spécifié dans la revendication d’audience
aud. Le jeton correspond si son audience correspond à au moins une audience de la politique. S'il n'est pas spécifié, l'ID de votre compte Databricks est utilisé par default. -
Revendication du sujet : La revendication de jeton qui contient le nom d'utilisateur Databricks de l'utilisateur pour lequel le jeton a été émis. Si non spécifié, le default est
sub. -
Validation de la signature du jeton : (Facultatif) Les clés publiques, ou leur URL, au format JSON Web Key Sets (JWKS) utilisées pour valider les signatures de jeton. JWKS JSON prend en charge jusqu'à 5 clés. Si votre fournisseur d'identité en publie davantage, utilisez un URI JWKS à la place.
Si non spécifié, Databricks récupère les clés à partir de l'Endpoint connu de l'émetteur, ce qui est l'approche recommandée. Votre fournisseur d'identité doit servir les métadonnées du fournisseur OpenID à
<issuer-url>/.well-known/openid-configurationqui incluent unjwks_urispécifiant l'emplacement des clés publiques utilisées pour vérifier les signatures de jetons.
Pour la fédération à l'échelle du compte, enregistrez uniquement les IdP qui sont entièrement managés et approuvés par votre organisation, tels que l'IdP de votre propre entreprise. Ne configurez pas de fédération à l'échelle du compte avec des fournisseurs d'identité externes que vous ne contrôlez pas, tels que ceux gérés par des clients ou des Partenaires.
- Databricks UI
- Databricks CLI
- Databricks Account API
- En tant qu'administrateur de compte, connectez-vous à la console de compte Databricks à l'adresse
https://accounts.cloud.databricks.com. - Cliquez sur Sécurité et accédez à l'onglet tab .
- Sous Politiques de fédération , cliquez sur Créer une politique .
- Entrez l’URL de l’émetteur, les audiences, la revendication de l’objet et la validation facultative de la signature du jeton.
- Cliquez sur Créer une politique .
Vous ne pouvez pas utiliser la CLI Databricks dans le Workspace Databricks terminal web pour créer une politique de fédération.
-
Installez ou mettez à jour la version la plus récente de la CLI Databricks.
-
En tant qu'administrateur de compte, authentifiez-vous à votre compte Databricks à l'aide de l'interface de ligne de commande (CLI). Spécifiez le
ACCOUNT_CONSOLE_URLet votre DatabricksACCOUNT_ID.Bashdatabricks auth login --host ${ACCOUNT_CONSOLE_URL} --account-id ${ACCOUNT_ID} -
Créer la politique de fédération de compte. Par exemple :
Bashdatabricks account federation-policy create --json \
'{
"oidc_policy": {
"issuer": "https://idp.mycompany.com/oidc",
"audiences": [
"databricks"
],
"subject_claim": "sub"
}
}'
L'appel d'API REST suivant crée une politique de fédération de comptes. Spécifiez le ACCOUNT_CONSOLE_URL, votre ACCOUNT_ID Databricks, et un TOKEN porteur pour l'authentification.
curl --request POST \
--header "Authorization: Bearer $TOKEN" \
"${ACCOUNT_CONSOLE_URL}/api/2.0/accounts/${ACCOUNT_ID}/federationPolicies" \
--data '{
"oidc_policy": {
"issuer": "https://idp.mycompany.com/oidc",
"audiences": [
"databricks"
],
"subject_claim": "sub"
}
}'
Pour une documentation de référence complète de l'API, consultez l'API de stratégie de fédération de compte.
Exemples de politiques de fédération de comptes
Le tableau suivant fournit des exemples de politiques de fédération de compte et le corps de jeton JWT correspondant.
Politique de fédération | Exemple de jeton correspondant. |
|---|---|
Émetteur : |
|
Émetteur : |
|
Émetteur : |
|
Émetteur : |
|
Étapes suivantes
Après avoir configuré une stratégie de fédération pour votre compte :
- Configurez votre fournisseur d'identité (IdP) pour générer des jetons que vos utilisateurs peuvent échanger avec Databricks. Reportez-vous à la documentation de votre IdP pour les détails de configuration. Pour obtenir des instructions sur l'activation de la fédération d'identités de charge de travail avec des fournisseurs d'identité courants, consultez Activer la fédération d'identités de charge de travail en CI/CD.
- Utilisez un JWT de votre IdP pour accéder à l'API Databricks en l'échangeant d'abord contre un jeton Databricks OAuth. Incluez le jeton Databricks OAuth dans l'en-tête
Bearer:de votre appel d'API pour terminer la requête. Le JWT doit être valide et signé à l'aide des algorithmes RS256 ou ES256. Pour plus de détails sur la mise en œuvre, consultez Authentification avec un jeton de fournisseur d'identité.