Terraform部署遇ADAL.tokenRefreshError错误求助(旧版本环境)
针对Terraform v0.11.11 + azurerm v1.44.0的AADSTS700016错误解决方案
1. 修正环境变量语法错误
你的ARM环境变量存在两处格式问题,这是触发错误的直接原因:
ARM_CLIENT_ID末尾多了英文逗号,导致实际传递的应用ID包含逗号(错误日志中明确显示Application with identifier 'xxxxxxxxxxxxx-xxxxxxxxxxx,')ARM_CLIENT_SECRET结尾使用了中文引号,会导致密钥解析异常
正确的环境变量配置:
export ARM_SUBSCRIPTION_ID="xxxxxx" export ARM_TENANT_ID="xxxxxx" export ARM_CLIENT_ID="xxxxxx" export ARM_CLIENT_SECRET="xxxxxxx"
配置完成后执行printenv | grep ARM,确认变量值无多余符号或格式错误。
2. 验证服务主体有效性
确认对应ARM_CLIENT_ID的服务主体确实存在于指定租户ARM_TENANT_ID中:
az ad sp show --id <你的ARM_CLIENT_ID> --tenant <你的ARM_TENANT_ID>
若返回资源不存在,需修正租户ID或重新创建对应服务主体。
3. 绕过ADAL兼容性限制
由于旧版本azurerm依赖已被微软淘汰的ADAL框架,添加以下环境变量强制使用兼容的旧API端点:
export ARM_USE_LEGACY_API=true export ARM_GRAPH_API_ENDPOINT=https://graph.windows.net/
4. 配置服务主体必要权限
虽然terraform plan可正常执行,但账户初始化阶段需要读取服务主体的Object ID,需给服务主体添加Azure AD Graph的Directory.Read.All权限:
# 添加权限 az ad app permission add --id <你的ARM_CLIENT_ID> --api 00000002-0000-0000-c000-000000000000 --api-permissions 311a71cc-e848-46a1-bdf8-97ff7156d8e6=Role # 授予管理员同意(需租户管理员权限) az ad app permission grant --id <你的ARM_CLIENT_ID> --api 00000002-0000-0000-c000-000000000000
5. 临时替代方案:使用Azure CLI认证
若上述方法无效,可直接使用Azure CLI会话完成认证,跳过ARM环境变量配置:
# 登录指定租户 az login --tenant <你的ARM_TENANT_ID> # 设置默认订阅 az account set --subscription <你的ARM_SUBSCRIPTION_ID>
之后直接执行Terraform命令即可,旧版本azurerm会自动读取CLI的认证信息。
内容的提问来源于stack exchange,提问作者iamrent
相关产品推荐
相关产品推荐

