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

如何使用服务主体通过Terraform创建Azure Synapse工作区

Terraform配置Synapse工作区使用服务主体作为AAD管理员实现方案

当前配置说明

当前使用如下Terraform根模块代码创建Synapse工作区:

module "synapse_workspace" {
  source = "./modules/synapse-workspace"

  rg_name  = module.resource_group.name
  location = module.resource_group.location

  prefix  = var.prefix
  postfix = random_string.postfix.result

  vnet_id   = module.virtual_network.id
  subnet_id = azurerm_subnet.default_subnet.id

  adls_id              = module.storage_account.adls_id
  storage_account_id   = module.storage_account.id
  storage_account_name = module.storage_account.name
  key_vault_id         = module.key_vault.id
  key_vault_name       = module.key_vault.name

  synadmin_username = var.synadmin_username
  synadmin_password = var.synadmin_password

  aad_login = {
    name      = var.aad_login.name
    object_id = var.aad_login.object_id
    tenant_id = var.aad_login.tenant_id
  }
}

terraform.tfvars中现有AD用户配置如下:

aad_login = {
  name = "azureuser@contoso.com"
  object_id = "00000000-0000-0000-0000-000000000000"
  tenant_id = "00000000-0000-0000-0000-000000000000"
}

现有Synapse子模块核心资源配置如下:

# Azure Synapse Workspace 

data "azurerm_client_config" "current" {}

data "http" "ip" {
  url = "https://ifconfig.me"
}

resource "azurerm_synapse_workspace" "syn_ws" {
  name                                 = "syn-${var.prefix}-${var.postfix}"
  resource_group_name                  = var.rg_name
  location                             = var.location
  storage_data_lake_gen2_filesystem_id = var.adls_id

  sql_administrator_login          = var.synadmin_username
  sql_administrator_login_password = var.synadmin_password

  managed_virtual_network_enabled = true
  managed_resource_group_name     = "${var.rg_name}-syn-managed"

  aad_admin {
    login     = var.aad_login.name
    object_id = var.aad_login.object_id
    tenant_id = var.aad_login.tenant_id
  }
}

当前配置使用AAD用户作为工作区管理员可正常运行,实现目标为替换为服务主体作为AAD管理员。


配置方法

azurerm_synapse_workspace资源的aad_admin块原生支持服务主体配置,不需要引入额外资源,仅需要补充类型参数、调整传入的属性值即可:

  1. 修改子模块中aad_admin块,显式指定管理员类型为服务主体:
aad_admin {
  login     = var.aad_login.name
  object_id = var.aad_login.object_id
  tenant_id = var.aad_login.tenant_id
  type      = "ServicePrincipal" # 核心配置,指定AAD管理员类型为服务主体
}
  1. 调整terraform.tfvars中aad_login的赋值,匹配服务主体属性:
aad_login = {
  # 此处填写服务主体在Azure AD中的显示名称,不要填服务主体的登录标识
  name = "synapse-workspace-admin-sp"
  # 此处填写服务主体的对象ID,注意不要和应用注册的客户端ID混淆
  object_id = "11111111-1111-1111-1111-111111111111"
  tenant_id = "00000000-0000-0000-0000-000000000000"
}

配置注意事项

  • 服务主体对象ID可通过Azure CLI执行az ad sp show --id <服务主体客户端ID> --query id -o tsv查询获取,不要直接使用应用注册概览页的应用(客户端)ID
  • 执行Terraform部署的身份需要拥有Synapse工作区的管理员写入权限,同时拥有Azure AD目录读取服务主体信息的权限
  • 如果需要配置AAD安全组作为管理员,仅需要将type参数值改为"Group",传入安全组的名称和对象ID即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:33:20