如何用Terraform的AzAPI Provider更新Azure AD应用注册的ID URI?
解决方案:用Terraform更新Azure AD应用注册的Application ID URI
原代码问题分析
- 资源类型错误:你使用了
Microsoft.Web/sites@2022-03-01,这是Azure App Service的资源类型,而非Azure AD应用注册的类型,正确类型应为Microsoft.AAD/applications@[对应API版本]。 - parent_id参数误用:Azure AD应用注册是顶层资源,不需要设置
parent_id;你传入的服务主体Object ID不属于合法资源ID格式(必须以/开头),且更新应用注册应操作应用本身,而非服务主体。 - 目标资源指向错误:更新应用注册需直接关联
azuread_application资源,而非服务主体对象。
正确的Terraform代码实现
场景1:通过Terraform管理的应用注册
如果该应用注册已在Terraform中用azuread_application资源定义,直接用以下代码更新:
resource "azapi_update_resource" "update_app_reg" { type = "Microsoft.AAD/applications@2023-04-01" resource_id = azuread_application.app_reg.id body = jsonencode({ properties = { identifierUris = [ "api://${azuread_application.app_reg.application_id}" ] } }) depends_on = [azuread_application.app_reg] }
场景2:更新已存在的非Terraform创建的应用注册
手动构造应用注册的资源ID(替换EXISTING_APP_OBJECT_ID和EXISTING_APP_APPLICATION_ID为实际值):
resource "azapi_update_resource" "update_existing_app_reg" { type = "Microsoft.AAD/applications@2023-04-01" resource_id = "/providers/Microsoft.AAD/applications/EXISTING_APP_OBJECT_ID" body = jsonencode({ properties = { identifierUris = [ "api://EXISTING_APP_APPLICATION_ID" ] } }) }
更优方案:创建时直接配置
如果还未创建应用注册,或可修改原创建代码,直接在azuread_application资源中指定identifier_uris,无需后续更新:
resource "azuread_application" "app_reg" { display_name = "你的应用名称" identifier_uris = ["api://${azuread_application.app_reg.application_id}"] # 其他必要配置... }
纯Terraform完全可以实现需求,无需依赖Azure CLI命令。
内容的提问来源于stack exchange,提问作者Serhat
相关产品推荐
相关产品推荐

