Azure AD Terraform中azuread_client_config输出的Client ID来源咨询
问题描述
我编写了如下Terraform配置,使用data.azuread_client_config数据源输出object_id、client_id和tenant_id。执行plan和apply后,已通过Azure AD界面截图确认object_id为当前用户对象ID、tenant_id为Azure AD租户ID,但不清楚该client_id的定义及来源,且在Azure AD企业应用选项卡中未找到相关内容,特此咨询。
Terraform配置
# Terraform Block terraform { required_version = ">= 1.0.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.0" } } } # Provider Block provider "azurerm" { features {} }
# Datasources data "azuread_client_config" "current" {} output "object_id" { value = data.azuread_client_config.current.object_id } output "client_id" { value = data.azuread_client_config.current.client_id } output "tenant_id" { value = data.azuread_client_config.current.tenant_id }
执行输出
Outputs: client_id = "04b07795-8ddb-YYYY-bbee-XXXXXXXXXXXX" object_id = "3603657a-34b8-YYYY-b7df-XXXXXXXXXXXX" tenant_id = "35b02984-c026-YYYY-8cb3-XXXXXXXXXXXX"
回答
你输出的client_id是Terraform AzureRM Provider进行身份验证时所使用的身份主体的客户端ID,具体来源分以下场景:
本地用户登录场景(你当前的情况):如果是通过
az login完成本地用户身份验证,这个client_id是Azure CLI的内置公共客户端应用ID(你输出的04b07795-8ddb-YYYY-bbee-XXXXXXXXXXXX正是微软官方Azure CLI的默认应用ID)。该应用由微软维护,属于全局公共应用,不属于你的Azure AD租户内创建的企业应用,因此在租户的「企业应用」选项卡中无法找到它。服务主体登录场景:若通过设置
AZURE_CLIENT_ID等环境变量使用服务主体身份验证,这个client_id就是你指定的服务主体的客户端ID,此时可在Azure AD的「应用注册」或「企业应用」中找到对应条目。托管标识场景:若在Azure资源(如虚拟机、函数应用)中使用托管标识运行Terraform,这个
client_id就是该托管标识的客户端ID,可在Azure AD的「企业应用」>「所有应用」中筛选托管标识类型找到。
简单来说,你当前看到的client_id是Azure CLI工具本身的身份ID,不是你租户内的自定义应用,所以不会出现在你的企业应用列表里。
内容的提问来源于stack exchange,提问作者VivekDev

