为何无法通过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
相关产品推荐
相关产品推荐

