Terraform:如何向Azure现有应用注册添加Web重定向URI
解决AzureAD应用注册添加Web重定向URI的Terraform配置问题
要在现有AzureAD应用注册中添加新的重定向URI,你不能直接通过data块修改(data块仅用于读取资源状态),需要用azuread_application资源块接管现有应用的管理,再合并新旧URI列表。以下是具体实现步骤:
1. 修正URI列表的获取方式
你当前输出的web.*.redirect_uris是嵌套列表结构(外层列表对应web块的集合,内层是具体的URI列表),要拿到现有URI的一维列表,需要取web数组的第一个元素(单个应用注册的web配置仅一组):
data "azuread_application" "example_app" { display_name = "Appication_Registration" } # 验证现有URI的一维列表 output "existing_redirect_uris" { value = data.azuread_application.example_app.web[0].redirect_uris }
2. 用resource块接管并更新应用注册
创建azuread_application资源块,将现有应用导入Terraform管理(避免重新创建),并通过concat合并新旧URI:
resource "azuread_application" "example_app" { display_name = data.azuread_application.example_app.display_name application_id = data.azuread_application.example_app.application_id object_id = data.azuread_application.example_app.object_id web { redirect_uris = concat( data.azuread_application.example_app.web[0].redirect_uris, [ "https://customer02.domain.com/signin-microsoft", "https://customer02.domain.com/page/signin-microsoft", ] ) # 保留原有web块的其他配置(如logout_uris等,若存在) logout_uris = data.azuread_application.example_app.web[0].logout_uris } # 保留应用的其他原有配置,如required_resource_access、reply_urls等 }
3. 导入现有应用到Terraform状态
因为应用已存在,需先执行导入命令将其纳入Terraform管理:
terraform import azuread_application.example_app <应用的object_id>
你可以从Azure Portal的应用注册概述页面获取object_id,或通过Azure CLI命令查询:
az ad app show --display-name "Appication_Registration" --query id -o tsv
4. 执行部署验证
导入完成后,执行terraform plan查看变更计划,确认新URI会被添加,再执行terraform apply完成更新。
关键说明
- 必须保留应用原有所有配置项(如
application_id、object_id、其他web配置、API权限等),否则Terraform会尝试删除未声明的配置。 concat函数要求传入参数均为一维列表,需确保现有URI和新URI都是一维结构,避免嵌套列表导致错误。
内容的提问来源于stack exchange,提问作者Steve Thompson
相关产品推荐
相关产品推荐

