AKS kubeconfig 中的服务器 ID 和客户端 ID 是什么? [已关闭]

问题描述 投票:0回答:1

我将 AKS 集群与 Entra 集成,并启用了具有自定义服务主体的 Azure RBAC。我正在尝试通过 terraform 准备部署 helm 图表,并为此取消硬编码一些值。 该文件是根据 az cli 生成的 kubeconfig 创建的,并且按预期工作:

provider "helm" {
  kubernetes {
    host                   = module.kubernetes.kubernetes_cluster.kube_config.0.host
    cluster_ca_certificate = base64decode(module.kubernetes.kubernetes_cluster.kube_config.0.cluster_ca_certificate)
    exec {
      api_version = "client.authentication.k8s.io/v1beta1"
      args        = ["get-token",
                     "--environment", "AzurePublicCloud",
                     "--server-id", "{cryptic-value}",
                     "--client-id", "{cryptic-value}",
                     "--tenant-id", data.azurerm_subscription.main.tenant_id,
                     "--login", "devicecode"
                    ]
      command     = "kubelogin"
    }
  }

}

在这种情况下,

--server-id
--client-id
是什么?客户端 ID 与我为集群配置的客户端 ID 不同。我还在 az cli 输出中发现了类似的提及,但它们的值为空:

    "aadProfile": {
      "adminGroupObjectIDs": [
        "value removed"
      ],
      "adminUsers": null,
      "clientAppId": null,
      "enableAzureRbac": true,
      "managed": true,
      "serverAppId": null,
      "serverAppSecret": null,
      "tenantId": "value removed"
    }

如何取消对这两个值的硬编码以及除了 kubeconfig 文件之外在哪里可以找到它们?

azure azure-aks microsoft-entra-id
1个回答
0
投票

AKS kubeconfig 中的服务器 ID 和客户端 ID 是什么?

由于您的 AKS 集群启用了 Azure RBAC,Azure 认为 AKS 集群配置的

clientAppId
中的
serverAppId
null
aadProfile
,这表明 Azure 在幕后管理这些详细信息。对于使用
kubectl
访问 AKS 集群等操作,通常不需要手动指定这些 ID。

如何取消对这两个值的硬编码

为了避免 硬编码

clientAppId
serverAppId
,您可以将它们存储在 Azure Key Vault Secret 中,并使用 terraform 数据块来检索它们。

要为 clientAppIdserverAppId 创建密钥保管库和两个密钥,请按照以下步骤操作:

在 Azure 门户中创建

key vault
。导航到秘密,然后选择
Generate/Import
选项 > 为
clientAppId
serverAppId
添加秘密。

enter image description here

注意:要从 Key Vault 访问机密,您需要拥有适当的权限。

这里是更新的 terraform 代码,用于传递应用程序 ID 和服务器 ID,无需硬编码。


data "azurerm_key_vault" "example" {
  name                = "mykeyvault"
  resource_group_name = "<keyvault-RG-Name>"
}

data "azurerm_key_vault_secret" "client-id" {
  name         = "client-id"
  key_vault_id = data.azurerm_key_vault.example.id
}
data "azurerm_key_vault_secret" "server-id" {
  name         = "server-id"
  key_vault_id = data.azurerm_key_vault.example.id
}

provider "helm" {
  kubernetes {
    host                   = module.kubernetes.kubernetes_cluster.kube_config.0.host
    cluster_ca_certificate = base64decode(module.kubernetes.kubernetes_cluster.kube_config.0.cluster_ca_certificate)
    exec {
      api_version = "client.authentication.k8s.io/v1beta1"
      args        = ["get-token",
                     "--environment", "AzurePublicCloud",
                     "--server-id", data.azurerm_key_vault_secret.server-id,
                     "--client-id", data.azurerm_key_vault_secret.client-id,
                     "--client-id", data.azurerm_subscription.main.tenant_id,
                     "--login", "devicecode"
                    ]
      command     = "kubelogin"
    }
  }

}

或者,您也可以使用 terraform 中的

kube_config
值连接到 aks cluster,而无需传递 client-idserver-id。请点击我回答的堆栈链接以获取更多详细信息。

参考使用 Azure 门户创建密钥保管库

© www.soinside.com 2019 - 2024. All rights reserved.