You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无客户端密钥时,Terraform Cloud中如何用az login登录Azure

解决Terraform Cloud中local-exec调用az login(无client-secret)的问题

以下是几种无需client-secret即可完成az login的方案,适配Terraform Cloud动态凭证场景:

方案1:直接利用Terraform Cloud注入的临时环境变量

Terraform Cloud的dynamic provider credentials会自动在运行环境中注入一组Azure临时凭证相关的环境变量,直接用这些变量完成登录:

resource "null_resource" "azure_cli_operation" {
  provisioner "local-exec" {
    command = <<EOT
      az login --service-principal \
        -u $ARM_CLIENT_ID \
        -t $ARM_TENANT_ID \
        --federated-token $ARM_ACCESS_TOKEN
    EOT
  }
}
  • 变量说明:ARM_CLIENT_ID是服务主体ID,ARM_TENANT_ID是租户ID,ARM_ACCESS_TOKEN是Terraform Cloud生成的临时联邦令牌,均由动态凭证机制自动注入。

方案2:通过AzureAD Provider获取自定义权限令牌

如果需要更精细的权限控制,可以用azuread_access_token数据源生成指定范围的令牌,再用于登录:

data "azuread_access_token" "management_scope" {
  application_id = var.azure_service_principal_id
  scope          = ["https://management.azure.com/.default"]
}

resource "null_resource" "custom_cli_operation" {
  provisioner "local-exec" {
    command = <<EOT
      az login --service-principal \
        -u ${var.azure_service_principal_id} \
        -t ${var.azure_tenant_id} \
        --federated-token ${data.azuread_access_token.management_scope.token}
    EOT
  }
}
  • 优势:可以自定义令牌的权限范围,适配不同操作的权限需求。

方案3:跳过显式login,直接用环境变量执行az命令

AZ CLI支持直接读取ARM系列环境变量完成认证,无需显式调用az login:

resource "null_resource" "direct_cli_call" {
  provisioner "local-exec" {
    command = "az vm list --subscription $ARM_SUBSCRIPTION_ID"
    # 若环境变量未自动注入,可手动传入
    environment = {
      ARM_CLIENT_ID      = var.azure_service_principal_id
      ARM_TENANT_ID      = var.azure_tenant_id
      ARM_ACCESS_TOKEN   = data.azuread_access_token.management_scope.token
      ARM_SUBSCRIPTION_ID = var.azure_subscription_id
    }
  }
}
  • 注意:确保服务主体拥有执行目标az命令所需的权限。

内容的提问来源于stack exchange,提问作者Jaimin Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:52:05