gpt4 book ai didi

azure - 使用 Terraform 配置 Azure AD Databricks SCIM 应用程序

转载 作者:行者123 更新时间:2023-12-02 23:00:43 30 4
gpt4 key购买 nike

我正在尝试创建和配置 Azure Databricks SCIM Provisioning Connector ,这样我就可以从 AAD 在我的 Databricks 工作区中配置用户。

已关注 these instructions ,我可以让它手动工作。也就是说,可以在 Azure 门户中创建和设置应用程序,并且我选择的用户可以在 Databricks 中同步。 (这个过程并不完全简单。在做任何事情之前需要进行大量的摆弄,我不记得了,需要进行配置设置。)

当我尝试将其转换为 Terraform 时,我并没有走得太远:

  • 我可以使用 Terraform 创建应用程序,使用创建 Databricks 工作区资源的同一服务主体:

    data "azuread_application_template" "scim" {
    display_name = "Azure Databricks SCIM Provisioning Connector"
    }

    resource "azuread_application" "scim" {
    display_name = "${var.name}-scim"
    template_id = data.azuread_application_template.scim.template_id

    feature_tags {
    enterprise = true
    gallery = true
    }
    }

    同样,我可以非常轻松地为我的服务主体创建 Databricks 访问 token :

    resource "databricks_token" "scim" {
    comment = "SCIM Integration"
    }
  • 现在我陷入困境:

    1. 如何在 Terraform 中定义企业应用程序的用户和组?我没有看到任何看起来合适的 azureread 资源。
    2. 同样,如何在 Terraform 中配置企业应用程序的配置(即使用 SCIM 端点 URL 和 Databricks token 等)?

(旁白:我注意到,在我的 Terraform 创建的应用程序中,如果我继续在 Azure 门户中手动设置用户和配置,它似乎不会执行任何操作。我可能不耐烦:“配置按需”按钮确实有效,但轮询同步要么不执行任何操作,要么速度非常慢。)

(编辑:旁边的更新:轮询配置——在 Terraform 管理的 SCIM 应用程序上手动设置——自从我写这个问题以来,现在已经运行了两次。在这段时间里,它没有同步我的用户手动选择,但决定删除我之前创建的 Databricks 中的“Provision on Demand”用户...)

最佳答案

我正在尝试自己解决这个难题。

关于 1:根据我的理解,您可以通过 MS Graph 通过角色分配来分配用户和组。请参阅此处的第一个 tf 示例 App role assignment for accessing Microsoft Graph ,

并应用 Automate SCIM provisioning using Microsoft Graph 中描述的配置,例如授予这些权限:

Application.ReadWrite.All
Application.ReadWrite.OwnedBy

关于 2:似乎无法以编程方式将工作区 SCIM 端点和 token 提供到创建的 Azure 应用程序“Azure Databricks SCIM 预配连接器”中,因为这些似乎是库应用程序特定的配置参数。因此恐怕该选项需要手动干预。

根据 Databricks 的说法,AAD SCIM 的完全配置自动化是不可能的。但 Terraform SCIM 方法将是完全自动化的。示例参见:

// define which groups have access to a particular workspace
variable "groups" {
default = {
"AAD Group A" = {
workspace_access = true
databricks_sql_access = false
},
"AAD Group B" = {
workspace_access = false
databricks_sql_access = true
}
}
}

// read group members of given groups from AzureAD every time Terraform is started
data "azuread_group" "this" {
for_each = toset(keys(var.groups))
display_name = each.value
}

// create or remove groups within databricks - all governed by "groups" variable
resource "databricks_group" "this" {
for_each = data.azuread_group.this
display_name = each.key
external_id = each.value.id
workspace_access = var.groups[each.key].workspace_access
databricks_sql_access = var.groups[each.key].databricks_sql_access
}

// read users from AzureAD every time Terraform is started
data "azuread_user" "this" {
for_each = toset(flatten([for g in data.azuread_group.this : g.members]))
object_id = each.value
}

// all governed by AzureAD, create or remove users from databricks workspace
resource "databricks_user" "this" {
for_each = data.azuread_user.this
external_id = each.value.id
user_name = each.value.user_principal_name
display_name = each.value.display_name
active = each.value.account_enabled
}

// put users to respective groups
resource "databricks_group_member" "this" {
for_each = toset(flatten(
[
for group_name in keys(var.groups) :
[
for member_id in data.azuread_group.this[group_name].members :
jsonencode({
user : member_id,
group : group_name
})
]
]))
group_id = databricks_group.this[jsondecode(each.value).group].id
member_id = databricks_user.this[jsondecode(each.value).user].id
}

关于azure - 使用 Terraform 配置 Azure AD Databricks SCIM 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70926276/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com