如何通过Terraform数据源获取Azure数据工厂(ADF)托管标识的应用程序ID
如何通过Terraform数据源获取Azure数据工厂(ADF)托管标识的应用程序ID
嗨,我完全理解你的需求——你已经能通过Terraform拿到ADF托管标识的对象ID,但想要的是应用程序ID对吧?别担心,咱们只需要多添加一个数据源就能搞定这个问题。
你当前的代码里,azurerm_data_factory数据源确实只返回托管标识的principal_id(也就是对象ID),而应用程序ID需要通过Azure AD的服务主体来获取,因为系统分配的托管标识本质上就是一个Azure AD服务主体。
下面是修改后的完整代码示例:
# 配置AzureRM provider provider "azurerm" { features {} } # 配置AzureAD provider(需要确保你的执行账号有读取Azure AD服务主体的权限) provider "azuread" {} # 获取目标ADF实例的信息 data "azurerm_data_factory" "adf" { name = "adf-dev-gg-we-01" resource_group_name = "your_resource_group_name" } # 通过ADF托管标识的对象ID,查找对应的Azure AD服务主体 data "azuread_service_principal" "adf_managed_identity" { principal_id = data.azurerm_data_factory.adf.identity[0].principal_id } # 输出你需要的托管标识应用程序ID output "managed_identity_application_id" { value = data.azuread_service_principal.adf_managed_identity.application_id }
简单解释一下这段代码的逻辑:
- 首先还是通过
azurerm_data_factory数据源获取到ADF的基础信息,包括托管标识的对象ID(principal_id)。 - 接着使用
azuread_service_principal数据源,通过刚才拿到的对象ID去匹配对应的Azure AD服务主体。 - 最后从服务主体数据中提取出
application_id,这就是你要的托管标识应用程序ID啦。
注意事项:
- 确保运行Terraform的账号拥有读取Azure AD服务主体的权限,不然可能会遇到权限不足的报错。
- 如果你的ADF使用的是用户分配的托管标识,逻辑类似,只是可以直接用
azurerm_user_assigned_identity数据源来获取应用程序ID,不需要通过Azure AD服务主体查询。
备注:内容来源于stack exchange,提问作者play_something_good
相关产品推荐
相关产品推荐

