使用 Azure Key Vault 进行 Terraform 以获取机密值

Posted

技术标签:

【中文标题】使用 Azure Key Vault 进行 Terraform 以获取机密值【英文标题】:Terraform with Azure Key Vault to get secret value 【发布时间】:2018-03-26 20:35:02 【问题描述】:

有什么方法可以从 Azure Key Vault 中获取密钥的值?

看起来value 不会暴露在密钥库机密对象here 中。

【问题讨论】:

在报告一些问题和寻求帮助时,您需要提供详细信息,例如错误、与azurerm_key_vault_secret 一起使用的代码等。 【参考方案1】:

现在您可以使用azurerm_key_vault_secret 数据源来实现。

没有任何脚本我很享受。

data "azurerm_key_vault_secret" "test" 
  name      = "secret-sauce"
  vault_uri = "https://rickslab.vault.azure.net/"


output "secret_value" 
  value = "$data.azurerm_key_vault_secret.test.value"

【讨论】:

【参考方案2】:

您首先需要创建一个数据资源到 azure key vault 以获取 key vault 资源 ID:

data "azurerm_key_vault" "keyvault" 
  name                = "$var.keyvault_name"
  resource_group_name = "$var.resourcegroup_name"

然后使用azurerm_key_vault_secret 获取带有密钥库资源 ID 的秘密:

data "azurerm_key_vault_secret" "win_admin_pass" 
  name         = "$var.secret_name"
  key_vault_id = "$data.azurerm_key_vault.keyvault.id"

请注意,azurerm_key_vault_secret 中的vault_uri 已被弃用且不推荐使用。

【讨论】:

【参考方案3】:

有什么方法可以从 Azure Key Vault 中获取密钥的值?

作为一种解决方法,我们可以使用PowerShell 来获取此值,如下所示:

$a = Get-AzureKeyVaultSecret -VaultName "jasonkey" -Name "jason"
$a.SecretValueText

【讨论】:

只是检查提供的信息是否有用。如果您需要进一步的帮助,请告诉我。 这对你有用吗?如果您需要更多帮助,请告诉我:) 谢谢,不幸的是它没有帮助,因为我正在寻找使用 Terraform 而不是 Powershell 的解决方案。【参考方案4】:

我一直在努力从密钥库机密中获取密码。下面的代码对我有用,试试看。

data "azurerm_key_vault" "terrakv" 
  name                = "terrakv" // KeyVault name
  resource_group_name = "mykv" // resourceGroup


data "azurerm_key_vault_secret" "kvsecret" 
name = "secret" // Name of secret
key_vault_id = data.azurerm_key_vault.terrakv.id


os_profile 
computer_name  = "vm-01"
admin_username = "testadmin"
admin_password = data.azurerm_key_vault_secret.kvsecret.value // Toget actual value

希望对你有帮助。

【讨论】:

【参考方案5】:

不幸的是,目前这在 Terraform 中是不可能的。 Terraform 只会输出秘密 ID 和版本。如果您需要检索 azure keyvault 机密,最好的方法是使用 Azure-CLI,如果不可用,则使用 Powershell。

使用 Azure-CLI (2.0)

az keyvault secret show --vault-name <vault-name> --name <secret-name>

语法:

az keyvault secret show --name
                        --vault-name
                        [--version]

更多信息请见:Managing Azure Keyvault Secrets with Azure-CLi


使用 Powershell:Get-AzureKeyVaultSecret

get-azurekeyvaultsecret -vaultName "<vault-name>" -name "<secret-name>"

【讨论】:

谢谢!我知道如何使用 Azure CLI 进行操作,正在 Terraform 中寻找解决方案。 即使使用 Hashicorp Vault,它们也不支持数据源来检索机密。原因是它会通过状态暴露或可用,这首先否定了拥有保险库的安全性。 感谢您的评论。我很好奇,因为使用 Azure 资源管理器可以获得 Azure Key Vault 机密的值 是的,就像任何 API 一样。 hashcorp Vault 也是如此。 Terraform 无法解决这个问题,除非它们支持在不将值存储在 state 中的情况下检索 Secret 的能力

以上是关于使用 Azure Key Vault 进行 Terraform 以获取机密值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Azure Key Vault 中的证书/密钥对使用 Azure Pipelines 构建的代码进行签名?

Python Azure 函数 - 使用 Key Vault 进行 MSI 身份验证

Azure Key Vault 使用Azure Portal创建和查看Azure Key Vault

无法从 Azure Key Vault 获取令牌

我们可以使用 Azure Key Vault 加密本地计算机上的 XML 文件吗?

在 Azure Batch 中使用托管标识在批处理池中使用 Python 对 Key Vault 进行身份验证