Terraform 将 Cosmos 数据库连接字符串传递给 KeyVault

Terraform Pass Cosmos Database Connection String to KeyVault

我最近在 Terraform 中创建了一个 cosmos 数据库,我正试图将其数据库连接字符串作为密码传递到 keyvault 中,但是这样做时出现以下错误:

Error: Incorrect attribute value type │ │ on keyvault.tf line 282, in resource "azurerm_key_vault_secret" "Authentication_Server_Cosmos_DB_ConnectionString": │ 282: value = azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings │ ├──────────────── │ │ azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings has a sensitive value │ │ Inappropriate value for attribute "value": string required.

我也尝试过使用 sensitive 参数,但 key vault 不喜欢该参数,而且我找不到任何关于如何执行此操作的文档。在 Terraform 网站上,它只是将其列为您可以调用的属性。

我的 Terraform Secret 代码如下,我不会将所有代码都放在这里,因为 Stack overflow 不喜欢我拥有的代码量。

所以请假设,我使用的是最新的 Azurerm 代理,我的所有其余代码都是正确的,只是无法正常工作的秘密部分。

resource "azurerm_key_vault_secret" "Authentication_Server_Cosmos_DB_ConnectionString" { //Auth Server Cosmos Connection String Secret
  name         = "AuthenticationServerCosmosDBConnectionString"
  value        = azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings 
  key_vault_id = azurerm_key_vault.nscsecrets.id

  depends_on = [
    azurerm_key_vault_access_policy.client,
    azurerm_key_vault_access_policy.service_principal,
    azurerm_cosmosdb_account.nsauthsrvcosmosdb,
  ]

}

您提供的值中有 4 个连接字符串,并且这些值的类型为 secure_string。因此,您需要将它们转换为 String 值,并 应用索引 要将其存储在密钥库中的值。

为了存储您可以在下面使用的所有 4 个连接字符串:

resource "azurerm_key_vault_secret" "example" {
  count = length(azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings)
  name         = "AuthenticationServerCosmosDBConnectionString-${count.index}"
  value        = tostring("${azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings[count.index]}")
  key_vault_id = azurerm_key_vault.example.id
}

输出:

如果你只想存储一个连接字符串,那么你可以根据你的要求使用索引 (例如:如果你想存储第一个 connection_string 那么在下面的代码中使用'0'作为索引,就像明智的 1/2/3 .):

resource "azurerm_key_vault_secret" "example1" {
  name         = "AuthenticationServerCosmosDBConnectionString"
  value        = tostring("${azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings[0]}")
  key_vault_id = azurerm_key_vault.example.id
}

输出: