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无法自动获取并写入密钥,会误触发手动输入提示。
解决步骤
调整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" {}可选:调整输出的敏感标记
若保留output块,可显式标记其为非敏感,避免输出时的敏感提示(不影响密钥写入逻辑):output "storage_account_key" { value = azurerm_storage_account.storage.primary_access_key sensitive = false }重新执行Terraform命令
运行以下命令重新初始化并生成计划:terraform init terraform plan
完成以上配置后,Terraform会自动在存储账户创建完成后获取主访问密钥,并写入指定的Key Vault,无需手动输入。
内容的提问来源于stack exchange,提问作者sphtd
相关产品推荐
相关产品推荐

