已具备Databricks账户管理员权限,创建Metastore仍遇权限报错
问题描述
尝试用Terraform创建Databricks Metastore,代码如下:
resource "databricks_metastore" "this" { name = "primary" storage_root = format("abfss://%s@%s.dfs.core.windows.net/", azurerm_storage_container.unity_catalog.name, azurerm_storage_account.unity_catalog.name ) force_destroy = true }
触发错误:
Error: cannot create metastore: Only account admin can create metastores.
已确认用于az login的账号拥有Databricks账户管理员角色,但当前Databricks Provider配置为:
provider "databricks" { azure_workspace_resource_id = data.azurerm_databricks_workspace.this.id host = local.databricks_workspace_host }
问题原因
当前的Databricks Provider配置是工作区级上下文,即便你的账号有账户管理员角色,通过工作区认证的方式只会获取到该工作区内的权限,无法访问账户级资源(比如Metastore)。Metastore是Databricks账户级别的资源,必须使用账户级认证来创建。
解决方案
修改Databricks Provider配置,切换到账户级认证模式:
方式1:使用服务主体认证(推荐生产环境)
provider "databricks" { azure_account_id = var.databricks_account_id azure_client_id = var.azure_client_id azure_client_secret = var.azure_client_secret azure_tenant_id = var.azure_tenant_id }
其中azure_account_id是你的Databricks账户ID(格式类似d-xxxxxxxxxxxx),可在Azure Portal的Databricks账户页面获取。
方式2:使用当前az login的账户级权限
如果用的是用户账户登录(az login),可直接指定账户ID,Provider会自动从Azure CLI获取账户级凭据:
provider "databricks" { azure_account_id = var.databricks_account_id }
注意事项
- 确保你的账户(或服务主体)确实拥有Databricks账户管理员权限,而非仅工作区管理员权限。
- 账户级与工作区级认证的Provider可通过
alias区分,同时存在以管理不同层级资源:
# 账户级Provider,用于创建Metastore等账户资源 provider "databricks" { alias = "account" azure_account_id = var.databricks_account_id } # 工作区级Provider,用于工作区内资源 provider "databricks" { alias = "workspace" azure_workspace_resource_id = data.azurerm_databricks_workspace.this.id host = local.databricks_workspace_host } # 创建Metastore时指定账户级Provider resource "databricks_metastore" "this" { provider = databricks.account name = "primary" storage_root = format("abfss://%s@%s.dfs.core.windows.net/", azurerm_storage_container.unity_catalog.name, azurerm_storage_account.unity_catalog.name ) force_destroy = true }
内容的提问来源于stack exchange,提问作者Chris Snow
相关产品推荐
相关产品推荐

