Terraform创建Azure AD应用时无法将Client ID和密码存入Key Vault报错求助
问题背景
使用Terraform创建AzureAD应用,尝试将应用Client ID和密码作为机密传入Key Vault时,触发两类报错:
no resource declared in main.tfNo applications found matching filter: "displayName eq,报错触发时AzureAD应用尚未完成创建
排除Key Vault相关逻辑后,AzureAD应用可正常创建。
根因说明
错误1:拼写错误导致资源未识别
代码中多处将azuread_application误写为azureread_application,Terraform无法匹配到已声明的资源,触发资源未声明报错。
错误2:不必要的数据源依赖
无需额外定义data "azuread_application"数据源查询刚创建的应用属性,Terraform可直接引用azuread_application资源的输出属性。新增的数据源会在Terraform计划阶段就发起AzureAD查询,此时应用还未创建,自然触发查询不到的报错。
错误3:密码取值错误
原有配置中AzureADAppPassword机密取值为应用object_id,并不是生成的应用密码。
修复代码
删除冗余的data "azuread_application" "websiteadapp"块,修改Key Vault机密配置如下:
resource "azurerm_key_vault_secret" "AzureADClientID" { name = "AzureADClientID" # 直接引用azuread_application资源的client_id属性 value = azuread_application.websiteadapp.client_id key_vault_id = azurerm_key_vault.Terraform_Testings.id depends_on = [ azurerm_key_vault_access_policy.terraform_testings_client, azurerm_key_vault_access_policy.terraform_testings_service_principal, # 修正拼写错误 azuread_application.websiteadapp, ] } resource "azurerm_key_vault_secret" "AzureADAppPassword" { name = "AzureADAppPassword" # 直接引用密码资源的value属性,为生成的真实应用密码 value = azuread_application_password.websiteadapp.value key_vault_id = azurerm_key_vault.Terraform_Testings.id depends_on = [ azurerm_key_vault_access_policy.terraform_testings_client, azurerm_key_vault_access_policy.terraform_testings_service_principal, azuread_application_password.websiteadapp, ] } # 原有AzureAD应用、密码资源保留即可 resource "azuread_application" "websiteadapp" { display_name = var.adapplication_name owners = [data.azurerm_client_config.current.object_id] sign_in_audience = "AzureADMultipleOrgs" required_resource_access { resource_app_id = "00000003-0000-0000-c000-000000000000" # Microsoft Graph固定ID resource_access { id = "df021288-bdef-4463-88db-98f22de89214" # User.Read.All权限ID type = "Scope" } resource_access { id = "e1fe6dd8-ba31-4d61-89e7-88639da4683d" # User.Read权限ID type = "Scope" } } } resource "azuread_application_password" "websiteadapp" { application_object_id = azuread_application.websiteadapp.object_id }
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

