@@ -8,8 +8,14 @@ resource "databricks_service_principal" "this" {
88}
99
1010locals {
11- # For each Databricks service principal, convert permission objects to access control rule objects.
12- #
11+ # For each Databricks service principal, convert permission objects to access
12+ # control rule objects. Service principals are currently the only type of
13+ # object in Databricks that do not support the "databricks_permissions"
14+ # resource for managing access control. In this module, we provide a
15+ # permissions-like interface for managing service principal access control
16+ # using the "databricks_access_control_rule_set" resource. If support for
17+ # using the "databricks_permissions" resource is added in the future, we
18+ # should be able to make the switch without changing this interface.
1319 access_control_rules = {
1420 for key , sp in var . service_principals : key => [for permission in sp . permissions : {
1521 acl_user_id = permission.user_name != null ? " users/${ permission . user_name } " : null
@@ -23,15 +29,13 @@ locals {
2329 }
2430}
2531
26- data "databricks_current_user" "this" {}
27-
2832resource "databricks_access_control_rule_set" "service_principal" {
2933 for_each = databricks_service_principal. this
3034
3135 name = " accounts/${ var . account_id } /servicePrincipals/${ each . value . application_id } /ruleSets/default"
3236
3337 grant_rules {
34- principals = concat ([ data . databricks_current_user . this . acl_principal_id ], [ for rule in local . access_control_rules [each . key ] : coalesce (rule. acl_user_id , rule. acl_group_id , rule. acl_service_principal_id ) if rule . role == " roles/servicePrincipal.manager" ])
38+ principals = [ for rule in local . access_control_rules [each . key ] : coalesce (rule. acl_user_id , rule. acl_group_id , rule. acl_service_principal_id ) if rule . role == " roles/servicePrincipal.manager" ]
3539 role = " roles/servicePrincipal.manager"
3640 }
3741
0 commit comments