DevContainer中Terraform调用Azure应用注册执行plan时令牌获取失败
问题描述
我在Azure门户(portal.azure.com)中为Terraform创建了新的应用注册,生成了证书和密钥,该应用已被赋予Cloud Application Administrator角色。尝试通过该应用注册运行Terraform脚本,运行环境是VSCode中的DevContainer(开发环境已容器化)。
我的Terraform代码如下:
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">=3.53.0" } azapi = { source = "azure/azapi" } } } provider "azurerm" { features {} subscription_id = "<subscription_id>" client_id = "<client_id>" client_secret = "<client_secret>" tenant_id = "<tenant_id>" } provider "azapi" { subscription_id = "<subscription_id>" client_id = "<client_id>" client_secret = "<client_secret>" tenant_id = "<tenant_id>" use_cli = true }
执行terraform plan命令时出现以下错误:
│ Error: building account: could not acquire access token to parse claims: clientCredentialsToken: cannot request token: Post "https://login.microsoftonline.com/8e7e5486-6e11-48bf-9cca-ef5fd4205af3/oauth2/v2.0/token": POST https://login.microsoftonline.com/8e7e5486-6e11-48bf-9cca-ef5fd4205af3/oauth2/v2.0/token giving up after 5 attempt(s): Post "https://login.microsoftonline.com/8e7e5486-6e11-48bf-9cca-ef5fd4205af3/oauth2/v2.0/token": dial tcp: lookup login.microsoftonline.com on 127.0.0.11:53: server misbehaving │ │ with provider["registry.terraform.io/hashicorp/azurerm"], │ on providers.tf line 13, in provider "azurerm": │ 13: provider "azurerm" {
解决方案
从错误信息来看,核心问题是DevContainer无法解析login.microsoftonline.com的DNS地址,以下是针对性解决步骤:
- 测试容器网络连通性:进入DevContainer终端,执行
nslookup login.microsoftonline.com或ping login.microsoftonline.com,确认是否能正常解析和访问该域名。 - 自定义容器DNS服务器:在
.devcontainer/devcontainer.json中添加DNS配置,替换为公共DNS(比如Google的8.8.8.8):"runArgs": ["--dns=8.8.8.8", "--dns=8.8.4.4"] - 重启DevContainer:修改配置后,重新构建并启动容器,使网络设置生效。
- 验证凭证有效性:虽然错误源于DNS,但可顺带确认
client_id、client_secret、tenant_id、subscription_id是否填写正确,避免后续其他问题。 - 利用Azure CLI预登录:由于azapi provider设置了
use_cli = true,可先在容器内执行Azure CLI登录命令,确认能正常获取token:
登录成功后再运行az login --service-principal -u <client_id> -p <client_secret> --tenant <tenant_id>terraform plan。
内容的提问来源于stack exchange,提问作者mike01010
相关产品推荐
相关产品推荐

