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

使用Azure AD服务主体向Azure托管Grafana HTTP API(Terraform Provider)认证

Terraform部署Azure托管Grafana的API认证优化方案

问题背景

需要通过Terraform部署Azure托管Grafana及相关资源,托管Grafana已集成Azure AD,可通过AAD令牌调用其HTTP API,但手动生成令牌并设置环境变量的方式在开发场景中效率低下。当前临时方案命令如下:

export GRAFANA_AUTH=$(az account get-access-token --resource="ce34e7e5-485f-4d76-964f-b3d2b16d1e4f" --query accessToken --output tsv)
# 或使用客户端凭证模式
export GRAFANA_AUTH="$(curl -X POST \
  -d "client_id=${ARM_CLIENT_ID}" \
  -d "client_secret=${ARM_CLIENT_SECRET}" \
  -d "grant_type=client_credentials" \
  -d "resource=ce34e7e5-485f-4d76-964f-b3d2b16d1e4f" \
  "https://login.microsoftonline.com/${ARM_TENANT_ID}/oauth2/token" \
  | jq -r .access_token)"

优化方案

方案1:使用Terraform AzureAD Provider原生获取令牌(推荐)

通过azuread_access_token数据源直接获取AAD令牌,无需依赖外部脚本,完全在Terraform生态内完成认证:

# 配置AzureAD Provider
provider "azuread" {
  tenant_id     = var.arm_tenant_id
  client_id     = var.arm_client_id
  client_secret = var.arm_client_secret
}

# 获取托管Grafana的AAD访问令牌
data "azuread_access_token" "grafana" {
  client_id     = var.arm_client_id
  client_secret = var.arm_client_secret
  tenant_id     = var.arm_tenant_id
  resource      = "ce34e7e5-485f-4d76-964f-b3d2b16d1e4f" # Azure托管Grafana的固定资源ID
}

# 配置Grafana Provider,使用自动获取的令牌
provider "grafana" {
  url  = azurerm_managed_grafana.your_grafana_resource.grafana_url
  auth = data.azuread_access_token.grafana.token
}

说明:此方案适用于服务主体认证场景,令牌会自动刷新,无需手动干预。

方案2:通过本地执行脚本自动生成令牌

如果依赖az cli的用户上下文认证,可以用external数据源调用az cli获取令牌,自动注入Grafana Provider:

# 调用az cli获取AAD令牌,输出JSON格式供Terraform解析
data "external" "grafana_aad_token" {
  program = [
    "bash",
    "-c",
    <<-EOT
      TOKEN=$(az account get-access-token --resource="ce34e7e5-485f-4d76-964f-b3d2b16d1e4f" --query accessToken --output tsv)
      echo "{\"access_token\": \"$TOKEN\"}"
    EOT
  ]
}

# 配置Grafana Provider
provider "grafana" {
  url  = azurerm_managed_grafana.your_grafana_resource.grafana_url
  auth = data.external.grafana_aad_token.result.access_token
}

说明:此方案复用当前az cli的登录会话,适合交互式开发场景,但需要确保执行环境已正确登录az cli。

注意事项

  • 确保使用的身份(用户或服务主体)具备Azure托管Grafana的API访问权限,建议分配Grafana Admin或Monitoring Contributor角色。
  • AAD令牌有效期通常为1小时,两种方案都会在每次terraform plan/apply时重新获取令牌,避免过期问题。
  • 若使用服务主体,需确保其在Azure AD中拥有读取托管Grafana资源的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:05:37