You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Terraform创建Databricks工作区级服务主体并获取密钥?

Terraform工作区级Databricks服务主体密钥输出解决方案

目前Terraform的Databricks Provider确实没有原生支持工作区级别服务主体的密钥创建与输出——databricks_service_principal_secret资源仅针对账户级操作,这也是你遇到的核心问题。下面提供两种可行的解决思路:

方案1:通过Databricks REST API手动创建并捕获密钥

利用Terraform的local-exec provisioner调用工作区的SCIM API创建密钥,然后将结果写入文件并输出:

resource "databricks_service_principal" "sp" {
  provider = databricks.workspace

  display_name          = "My service principle"
  databricks_sql_access = true
}

# 用本地文件临时存储密钥(避免直接在控制台输出)
resource "local_file" "sp_secret_store" {
  filename = "${path.module}/sp_secret.tmp"
  content  = ""
}

provisioner "local-exec" {
  command = <<EOT
    # 调用SCIM API创建服务主体密钥
    curl -s -X POST \
      -H "Authorization: Bearer ${var.databricks_workspace_token}" \
      -H "Content-Type: application/json" \
      https://<你的工作区URL>/api/2.0/preview/scim/v2/ServicePrincipals/${databricks_service_principal.sp.id}/credentials \
      -d '{"schemas":["urn:ietf:params:scim:schemas:core:2.0:Credential"],"type":"password"}' | \
    jq -r '.value' > ${local_file.sp_secret_store.filename}
  EOT
}

# 输出密钥,标记为敏感信息防止泄露
output "service_principal_secret" {
  value     = file(local_file.sp_secret_store.filename)
  sensitive = true
}

使用时注意:

  • 替换<你的工作区URL>为实际的Databricks工作地址
  • 确保环境中安装了jq用于解析API返回的JSON结果
  • var.databricks_workspace_token需要是拥有服务主体管理权限的工作区令牌

方案2:切换为账户级别服务主体(若业务允许)

如果你的架构支持,将服务主体创建在账户级别,就能直接使用官方提供的databricks_service_principal_secret资源获取密钥:

resource "databricks_service_principal" "account_sp" {
  provider = databricks.account

  display_name = "Account-level Service Principal"
}

resource "databricks_service_principal_secret" "sp_secret" {
  provider = databricks.account

  service_principal_id = databricks_service_principal.account_sp.id
}

output "account_sp_secret" {
  value     = databricks_service_principal_secret.sp_secret.secret_value
  sensitive = true
}

这是官方推荐的标准流程,能完全通过Terraform管理密钥的生命周期,无需额外API调用。

额外提醒

  • 密钥属于敏感数据,所有输出都要加上sensitive = true,避免在Terraform执行日志或状态文件中泄露
  • 方案1中通过API创建的密钥,Terraform不会自动管理其生命周期,销毁服务主体时需要手动清理,或在destroy阶段添加对应的API删除调用

内容的提问来源于stack exchange,提问作者Tim Harsch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:24:57