Terraform:检查秘密是否存在于蔚蓝金库中

时间:2020-10-26 17:34:11

标签: terraform

我正在使用Terraform进行Azure部署,并且试图将ssh密钥存储在Azure保管库中。如果库中不存在密钥,我想创建并存储ssh密钥,否则,如果存在密钥,我想重用该密钥。

这是我尝试过的

  1. 因为它包含了我所有的密钥,所以首先独立创建文件库
  2. 使用数据来测试密钥是否存在,但是当密钥不存在时,我总是会收到一条错误行11。我不知道该怎么做。
  3. 注意:不能重新运行tls_private_key,因为ssh密钥会更改。
data "azurerm_resource_group" "rg_transverse" {
  name = "k8s-transversal-rg"
}


# Retrieving vault
data "azurerm_key_vault" "data-cluster-vault" {
  name                  = "k8s-transverse-vault"
  resource_group_name   = data.azurerm_resource_group.rg_transverse.name
}
data "azurerm_key_vault_secret" "data-cluster-key-public-openssh" {
  name = "cluster-key-public-openssh" 
  key_vault_id = "${data.azurerm_key_vault.data-cluster-vault.id}" 
}
output "secret_value2" {
  value = "${data.azurerm_key_vault_secret.data-cluster-key-public-openssh.value}"
}

# Creating ssh key only if doesn't exist
 resource "tls_private_key" "cluster-key" {
   count = (data.azurerm_key_vault_secret.data-cluster-key-public-openssh.value == "" ) ? 1 : 0
   algorithm   = "RSA"
   rsa_bits    = "4096"
 }

# store ssh key into vault if created
resource "azurerm_key_vault_secret" "cluster-key-public-openssh" {
  depends_on = [tls_private_key.cluster-key]
  count = (data.azurerm_key_vault_secret.data-cluster-key-public-openssh.value == "" ) ? 1 : 0
  name         = "cluster-key-public-openssh"
  value        = tls_private_key.cluster-key[count.index].public_key_openssh
  key_vault_id = data.azurerm_key_vault.data-cluster-vault.id
}

有什么想法吗? 谢谢

1 个答案:

答案 0 :(得分:0)

实际的密钥库API没有提供“密钥存在”测试功能(除了其他答案中提到的在C#代码/ API中实现此功能的某些方法之外)。

恕我直言,我认为您可以轻松阅读密钥并捕获错误,请参见Terraform的这种尝试并继续方法:

https://www.terraform.io/docs/configuration/functions/try.html

因此,您将创建保管库(步骤1),然后在第2步中使用try函数读取密钥。 注意:try(..)通过吃掉错误并继续第二个参数来工作。因此,您首先要在第一个参数中读取键,然后在第二个参数中创建键。