如何使用服务主体通过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块原生支持服务主体配置,不需要引入额外资源,仅需要补充类型参数、调整传入的属性值即可:
- 修改子模块中
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管理员类型为服务主体 }
- 调整
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
相关产品推荐
相关产品推荐

