You need to enable JavaScript to run this app. 使用Terraform创建AKS时如何配置Key Vault托管的RSA公钥作为节点SSH密钥
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform创建AKS时如何配置Key Vault托管的RSA公钥作为节点SSH密钥

问题根因
  • AKS节点linux_profile配置的ssh_key.key_data,仅接受标准OpenSSH格式的公钥字符串(即以ssh-rsa开头的单行文本结构)
  • Azure Key Vault中通过azurerm_key_vault_key资源创建的RSA密钥,采用JSON Web Key(JWK)结构化格式存储,仅暴露公指数、模数值等原始加密字段,无直接输出OpenSSH格式公钥的能力,纯HCL逻辑无法完成格式转换。
  • Key Vault的机密(Secret)存储能力支持任意格式文本存储,可直接适配AKS的公钥配置要求,全程无需本地存储任何密钥文件。
可落地方案

实现流程

  1. 生成无本地落地的RSA密钥对
    使用tls_private_key资源生成2048位RSA类型密钥,密钥全生命周期在Terraform运行时内存中完成,不会在本地磁盘留下任何密钥文件:
    resource "tls_private_key" "aks_linux_ssh" {
      algorithm = "RSA"
      rsa_bits  = 2048
    }
    
  2. 将OpenSSH格式公钥存入Key Vault托管
    直接引用tls_private_key资源输出的public_key_openssh字段(该字段输出值本身就是AKS要求的标准OpenSSH格式),写入Key Vault的Secret中统一托管:
    resource "azurerm_key_vault_secret" "aks_linux_ssh_pubkey" {
      name         = "aks-linux-ssh-pubkey"
      value        = tls_private_key.aks_linux_ssh.public_key_openssh
      key_vault_id = azurerm_key_vault.example-keyvault.id
    }
    
  3. AKS配置直接引用托管公钥
    无需文件下载、无需本地读取操作,直接将Key Vault中存储的公钥值填充到AKS的SSH配置块中:
    resource "azurerm_kubernetes_cluster" "k8s" {
      name                = var.cluster_name
      location            = azurerm_resource_group.k8s.location
      resource_group_name = azurerm_resource_group.k8s.name
      dns_prefix          = var.dns_prefix
    
      linux_profile {
        admin_username = "ubuntu"
        ssh_key {
          key_data = azurerm_key_vault_secret.aks_linux_ssh_pubkey.value
        }
      }
      # 其余原有AKS配置逻辑保持不变
    }
    
无效方案说明
  • 通过Azure CLI下载Key Vault中JWK类型密钥导出的PEM格式公钥,本质是X.509编码格式,和AKS要求的OpenSSH编码格式不兼容,需要额外依赖本地工具做格式转换,违背“无本地密钥管理”的目标。
  • 尝试拼接azurerm_key_vault_key数据源输出的原始JWK字段生成公钥,需要实现base64编码、字段拼接、协议头格式化等逻辑,现有Terraform内置函数无法简洁完成,工程落地成本极高。
  • azurerm Key Vault密钥数据源输出的PEM格式公钥,无法被AKS直接识别,必须经过格式转换才能使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 02:54:04