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

如何通过Terraform正确配置azurerm_kubernetes_flux_configuration的Git凭据

配置azurerm_kubernetes_flux_configuration的安全凭据方案

方案一:Azure AD联邦身份(推荐,无密钥管理负担)

这是Azure生态下最安全的方式,无需存储或维护PAT,直接依托AKS托管身份完成Azure DevOps Git仓库的访问授权。

  1. 为AKS集群启用OIDC Issuer并配置系统托管身份
resource "azurerm_kubernetes_cluster" "aks" {
  name                = "my-aks-cluster"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  node_count          = 3

  identity {
    type = "SystemAssigned"
  }

  oidc_issuer_enabled = true
}
  1. 在Azure DevOps中为AKS系统身份授权
  • 进入项目设置 → 权限 → 服务主体
  • 搜索AKS集群的系统身份名称,授予Git仓库读取权限(可选择项目贡献者或更细粒度的Git权限)
  1. 配置Flux资源使用托管身份认证
resource "azurerm_kubernetes_flux_configuration" "flux" {
  name                  = "flux-config"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
  namespace             = "flux-system"

  git_repository {
    url    = "https://dev.azure.com/your-org/your-project/_git/your-repo"
    branch = "main"
  }

  authentication {
    type = "ManagedIdentity"
    managed_identity {
      client_id = azurerm_kubernetes_cluster.aks.identity[0].principal_id
    }
  }

  sync_interval = "1m"
}

方案二:AKS KeyVault CSI驱动挂载PAT

若必须使用PAT,通过CSI驱动直接从KeyVault挂载凭据到Flux控制器,彻底避免明文传递风险。

  1. 启用AKS的KeyVault Secrets Provider插件
resource "azurerm_kubernetes_cluster" "aks" {
  # 其他基础配置...

  addon_profile {
    keyvault_secrets_provider {
      enabled = true
    }
  }
}
  1. 在KeyVault中存储PAT,并授予AKS系统身份对该密钥的读取权限

  2. 创建SecretProviderClass定义密钥挂载规则

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: flux-git-pat
  namespace: flux-system
spec:
  provider: azure
  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "true"
    userAssignedIdentityID: "<AKS系统身份ID>"
    keyvaultName: "<你的KeyVault名称>"
    objects: |
      array:
        - |
          objectName: "flux-git-pat"
          objectType: secret
    tenantId: "<你的Azure租户ID>"
  1. 在Flux配置中引用CSI挂载的密钥
resource "azurerm_kubernetes_flux_configuration" "flux" {
  name                  = "flux-config"
  kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
  namespace             = "flux-system"

  git_repository {
    url    = "https://dev.azure.com/your-org/your-project/_git/your-repo"
    branch = "main"
  }

  authentication {
    type = "Secret"
    secret {
      name      = "flux-git-pat"
      namespace = "flux-system"
      key       = "flux-git-pat"
    }
  }

  sync_interval = "1m"
}

方案三:CSI挂载密钥后通过Helm部署Flux

若偏好用Helm管理Flux生命周期,可先完成CSI密钥挂载,再在Helm配置中引用该密钥。

  1. 完成方案二中的SecretProviderClass配置,确保密钥已挂载到flux-system命名空间

  2. 用Terraform Helm Provider部署Flux并引用密钥

resource "helm_release" "flux" {
  name               = "flux"
  repository         = "https://fluxcd-community.github.io/helm-charts"
  chart              = "flux2"
  namespace          = "flux-system"
  create_namespace   = true

  set {
    name  = "git.url"
    value = "https://dev.azure.com/your-org/your-project/_git/your-repo"
  }

  set {
    name  = "git.secretName"
    value = "flux-git-pat"
  }
}

关键注意事项

  • 联邦身份方案完全消除了PAT的管理成本,是Azure环境下的最优选择,优先推荐
  • 所有权限配置遵循最小权限原则:AKS身份仅需Git仓库的读取权限,无需更高权限
  • 禁止在Terraform代码、Pipeline变量中明文存储PAT,所有凭据必须通过KeyVault或托管身份管控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:52:42