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

Terraform单文件将存储账户主密钥写入Key Vault遇输入问题求助

解决Terraform写入存储账户密钥到Key Vault时需手动输入的问题

问题背景

我有一个main.tf文件,用于创建Azure资源组、存储账户、事件中心命名空间和Key Vault,希望将存储账户的主访问密钥自动写入Key Vault,所有操作在单个文件内完成。添加了以下代码:

存储账户及输出配置

resource "azurerm_storage_account" "storage" {
  name                     = "mystorageaccount"
  resource_group_name      = azurerm_resource_group.rg.name
  location                 = azurerm_resource_group.rg.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

output "storage_account_key" {
  value = azurerm_storage_account.storage.primary_access_key
}

Key Vault密钥写入配置

resource "azurerm_key_vault_secret" "storage_account_key" {
  name         = "storageAccountKey"
  value        = azurerm_storage_account.storage.primary_access_key
  key_vault_id = azurerm_key_vault.kv.id
}

运行terraform plan时,终端要求手动输入storage_account_key,如何解决?

原因及解决方案

原因

存储账户的primary_access_key属于敏感数据,Terraform默认会对其进行敏感标记;同时若Key Vault未配置足够权限,Terraform无法自动获取并写入密钥,会误触发手动输入提示。

解决步骤

  1. 调整Key Vault访问策略
    确保Key Vault允许当前执行Terraform的主体(用户或服务主体)拥有设置密钥的权限,添加access_policy配置:

    resource "azurerm_key_vault" "kv" {
      name                       = "mykeyvault"
      location                   = azurerm_resource_group.rg.location
      resource_group_name        = azurerm_resource_group.rg.name
      tenant_id                  = data.azurerm_client_config.current.tenant_id
      soft_delete_retention_days = 7
    
      access_policy {
        tenant_id = data.azurerm_client_config.current.tenant_id
        object_id = data.azurerm_client_config.current.object_id
    
        secret_permissions = [
          "Set", "Get", "List" # 至少保留"Set"权限以写入密钥
        ]
      }
    }
    
    # 添加数据源获取当前客户端配置
    data "azurerm_client_config" "current" {}
    
  2. 可选:调整输出的敏感标记
    若保留output块,可显式标记其为非敏感,避免输出时的敏感提示(不影响密钥写入逻辑):

    output "storage_account_key" {
      value     = azurerm_storage_account.storage.primary_access_key
      sensitive = false
    }
    
  3. 重新执行Terraform命令
    运行以下命令重新初始化并生成计划:

    terraform init
    terraform plan
    

完成以上配置后,Terraform会自动在存储账户创建完成后获取主访问密钥,并写入指定的Key Vault,无需手动输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:33