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

Azure应用注册通过Terraform添加资源组Contributor角色报错求助

解决方案

1. 错误原因:AzureAD Provider 属性名变更

你遇到的Unsupported attribute 'application_id'错误,是因为AzureAD Provider v2.x+版本中,azuread_application_registration资源的标识属性已从application_id改为client_id;同时创建azuread_service_principal时,需要通过client_id参数关联对应的应用注册,而非旧版的application_id。

2. 完整实现代码

要完成应用注册创建、服务主体关联,以及资源组Contributor角色分配,需要同时使用AzureAD Provider和AzureRM Provider(角色分配属于Azure资源管理器范畴)。以下是完整示例:

# 配置AzureAD Provider
terraform {
  required_providers {
    azuread = {
      source  = "hashicorp/azuread"
      version = "~> 2.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
  }
}

provider "azuread" {
  # 认证方式可根据环境配置,比如使用az login本地认证、服务主体等
}

provider "azurerm" {
  features {}
  # 同样配置认证方式
}

# 1. 创建Azure AD应用注册
resource "azuread_application_registration" "app" {
  display_name = "MyAppRegistration"
}

# 2. 创建对应应用注册的服务主体
resource "azuread_service_principal" "app_sp" {
  client_id = azuread_application_registration.app.client_id # 这里用client_id替代旧版的application_id
}

# 3. 为服务主体分配资源组级别的Contributor角色
resource "azurerm_role_assignment" "app_contributor" {
  scope                = azurerm_resource_group.example.id # 替换为你的目标资源组ID
  role_definition_name = "Contributor"
  principal_id         = azuread_service_principal.app_sp.id
}

# 可选:如果需要创建新资源组,可添加以下代码
resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "East US"
}

3. 关键注意事项

  • Provider版本匹配:确保AzureAD Provider版本在2.x以上,AzureRM Provider在3.x以上,避免属性不兼容问题。
  • 角色分配的主体:角色分配必须给服务主体(azuread_service_principal),而非应用注册本身,因为应用注册是身份定义,服务主体才是实际拥有权限的实体。
  • 认证配置:根据你的运行环境(本地/CI/CD)配置AzureAD和AzureRM Provider的认证方式,比如本地开发可直接用az login自动认证,生产环境建议使用服务主体认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:49:53