Terraform使用Azure服务主体认证失败,执行plan/apply提示需az login
解决Terraform AzureRM Provider提示"No valid Azure CLI Auth Tokens found"的问题
这个问题我之前也碰到过,核心原因是Terraform没有正确使用你配置的服务主体认证,而是默认尝试调用Azure CLI的令牌导致的,给你几个具体的解决办法:
1. 让Resource明确使用带Alias的Provider
你给provider块设置了alias = "tf_bootstrap",但你的resource资源块没有指定要使用这个带别名的provider,所以Terraform会自动去找默认的AzureRM Provider配置(而你并没有配置默认的,它就会 fallback 到Azure CLI认证)。
修改你的resource块,加上provider引用即可:
resource "azurerm_resource_group" "dev" { provider = azurerm.tf_bootstrap # 指定使用你配置的带别名的provider name = "dev-rg" location = "East US" }
2. 移除Alias,使用默认Provider
如果这个服务主体是你全局要使用的认证方式,不需要区分多个Azure Provider实例,直接去掉alias字段,让它成为默认Provider,这样所有资源都会自动使用它:
provider "azurerm" { client_id = "55708466-3686-xxxx-xxxx-xxxxxxxxxxxx" client_secret = "88352837-xxxx-xxxx-xxxx-xxxxxxxxxxxx" tenant_id = "129a861e-a703-xxxx-xxxx-xxxxxxxxxxxx" subscription_id = "c2e9d518-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
3. 检查是否有强制使用CLI认证的环境变量
有时候系统环境变量ARM_USE_CLI如果被设置为true,会强制Terraform忽略Provider块里的服务主体配置,转而使用Azure CLI的令牌。你可以检查一下:
- Linux/macOS终端执行:
echo $ARM_USE_CLI - Windows命令行执行:
echo %ARM_USE_CLI%
如果输出结果是true,取消这个环境变量即可:
- Linux/macOS:执行
unset ARM_USE_CLI - Windows:在系统环境变量设置中删除该变量
内容的提问来源于stack exchange,提问作者Michelle Welcks
相关产品推荐
相关产品推荐

