Aller au contenu principal

Accorder des autorisations par programmation

Les autorisations de projet Lakebase peuvent être gérées par programmation à l'aide de l'API Databricks Permissions standard, de la CLI Databricks, des SDK Databricks et de Terraform.

Pour un aperçu des types d'autorisations, des autorisations par default et de la façon de gérer les autorisations dans l'interface utilisateur de Lakebase, consultez Gérer les autorisations de projet.

Niveaux d'autorisation

Les niveaux d’autorisation accordables pour les projets Lakebase sont CAN_USE et CAN_MANAGE. CAN_CREATE est un niveau hérité qui transite automatiquement du workspace vers tous les utilisateurs et ne peut être explicitement accordé ou révoqué sur un projet. Les tentatives d'accorder CAN_CREATE via l'API renvoient le code HTTP 400.

L'API de Permissions identifie les projets par ID de projet (par exemple, my-app). Vous pouvez trouver cette valeur dans le champ project_id du statut du projet renvoyé par les APIs Get project et List projects.

remarque

Le champ project_id est disponible dans les réponses de l'API REST, mais pas encore dans les objets de réponse du SDK ou de la CLI. Si vous utilisez un SDK, vous pouvez extraire l'ID du projet du champ name en supprimant le préfixe projects/ (par exemple, projects/my-app devient my-app).

API REST

Les autorisations de projet utilisent l'API d'autorisations Databricks standard à /api/2.0/permissions/database-projects/{project_id}.

Obtenir les autorisations actuelles

Bash
curl -X GET "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Accorder ou mettre à jour les autorisations (PATCH)

Bash
curl -X PATCH "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"access_control_list": [
{
"user_name": "user@example.com",
"permission_level": "CAN_USE"
}
]
}'

Pour accorder des autorisations à un groupe ou à un Service Principal, remplacez user_name par group_name ou service_principal_name.

remarque

PATCH est additif et ne peut pas réduire une permission supérieure existante. Par exemple, l'application d'un correctif CAN_USE à un utilisateur qui détient déjà CAN_MANAGE n'a aucun effet. Pour rétrograder ou supprimer une autorisation, utilisez PUT à la place.

Remplacez toutes les autorisations explicites (PUT)

attention

PUT remplace l’intégralité de l’ACL explicite. Tout utilisateur, groupe ou service principal non inclus dans le corps de la requête perd sa permission explicitement accordée. Les autorisations héritées (telles que celles des administrateurs du Workspace) ne sont pas affectées.

Bash
curl -X PUT "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"access_control_list": [
{
"user_name": "user@example.com",
"permission_level": "CAN_MANAGE"
}
]
}'

Pour la référence complète de l'API Permissions, consultez API Permissions.

CLI

Utilisez les commandes databricks permissions (qui encapsulent l'API des autorisations) pour gérer les autorisations de projet à partir de la ligne de commande.

Accorder ou mettre à jour les autorisations

Bash
# PROJECT_ID is your project ID (e.g., my-app).
databricks permissions update database-projects ${PROJECT_ID} \
--json '{
"access_control_list": [
{
"user_name": "user@example.com",
"permission_level": "CAN_USE"
}
]
}'

Obtenir les autorisations actuelles

Bash
databricks permissions get database-projects ${PROJECT_ID}
remarque

Utilisez databricks permissions (et non databricks postgres) pour la gestion des ACL du projet. La sous-commande databricks postgres gère les Ressources du projet (Branch, compute, etc.) et non les autorisations.

SDK

Utilisez l'interface WorkspaceClient.permissions dans le SDK Python, Java ou Go pour gérer les autorisations de projet.

Python
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.iam import AccessControlRequest, PermissionLevel

w = WorkspaceClient()

# Your project ID (e.g., "my-app")
PROJECT_ID = "<project-id>"

# Grant CAN_USE to a user (PATCH is additive and cannot downgrade)
w.permissions.update(
request_object_type="database-projects",
request_object_id=PROJECT_ID,
access_control_list=[
AccessControlRequest(
user_name="user@example.com",
permission_level=PermissionLevel.CAN_USE,
)
],
)

# Get current permissions
permissions = w.permissions.get(
request_object_type="database-projects",
request_object_id=PROJECT_ID,
)
print(permissions)

# Revoke or downgrade: use set() (PUT), not update() (PATCH)
# update() with an empty list is a no-op; set() replaces the full explicit ACL
w.permissions.set(
request_object_type="database-projects",
request_object_id=PROJECT_ID,
access_control_list=[
# Include every identity that should retain explicit access
AccessControlRequest(
user_name="owner@example.com",
permission_level=PermissionLevel.CAN_MANAGE,
)
],
)

Ressources supplémentaires