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

为何无法通过AZCLI查询Terraform创建的Azure AD应用注册?

问题:Terraform创建的Azure AD应用注册无法通过AZ CLI查询到

问题根源

Terraform的azuread_application资源仅创建了Azure AD应用注册(Application Object),但你使用的az ad sp系列命令是查询**服务主体(Service Principal Object)**的——这是Azure AD中两个完全独立的对象:

  • 应用注册是应用的全局定义,跨租户有效
  • 服务主体是应用在当前租户的实例,用于资源授权

Azure UI手动创建应用时,系统会自动生成对应的服务主体,但Terraform的azuread_application默认不会自动创建服务主体,需要单独声明对应的资源。

解决方案

1. 修正Terraform代码,自动生成服务主体

在现有代码中添加服务主体资源,关联到你的应用注册:

resource "azuread_application" "test" {
  display_name = "something-something-microsoft"
}

# 新增:创建对应应用注册的服务主体
resource "azuread_service_principal" "test" {
  application_id = azuread_application.test.application_id
}

执行terraform apply后,即可通过az ad sp命令查询到服务主体。

2. 用正确的命令查询对应对象

如果要查询应用注册(Terraform创建的azuread_application),不要用az ad sp,改用az ad app系列命令:

# 按名称查询应用注册
az ad app list --display-name something-something-microsoft

# 用应用对象ID查询详情
az ad app show --id d5f75adb-XXXX-XXXX-XXXX-1473334f1386

如果已经创建了服务主体,再用az ad sp命令查询服务主体:

az ad sp list --display-name something-something-microsoft

3. 手动补建服务主体(无需修改Terraform)

如果已经有应用注册但未创建服务主体,可直接用CLI手动创建:

az ad sp create --id <你的应用注册的客户端ID(application_id)>

验证方式

执行以下命令确认应用注册和服务主体是否存在:

# 筛选所有应用注册
az ad app list --all | jq '.[].displayName' | grep something-something-microsoft

# 筛选所有服务主体
az ad sp list --all | jq '.[].displayName' | grep something-something-microsoft

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:21