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

Posted

技术标签:

【中文标题】Terraform 将 Cosmos 数据库连接字符串传递给 KeyVault【英文标题】:Terraform Pass Cosmos Database Connection String to KeyVault 【发布时间】:2022-01-01 22:33:06 【问题描述】:

我最近在 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.

我也尝试使用敏感参数,但密钥库不喜欢该参数,我也找不到任何有关如何执行此操作的文档。在 Terraform 网站上,它只是将它列为您可以调用的属性。

我的 Terraform Secret 代码如下,我不会把我所有的代码都放在这里,因为堆栈溢出不喜欢我拥有的代码量。

所以请假设,我使用的是最新的 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,
  ]

【问题讨论】:

您想使用连接字符串的任何具体原因?为什么不主键和端点 因为 .Net Dev 已将应用程序编程为查找连接字符串。 【参考方案1】:

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

为了存储您可以在下面使用的所有 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

输出:

【讨论】:

你的传奇人物知道你会知道如何做到这一点。 哈哈 .. 很高兴能帮助@Jason :)

以上是关于Terraform 将 Cosmos 数据库连接字符串传递给 KeyVault的主要内容,如果未能解决你的问题,请参考以下文章

Cosmos SDK远程连接被拒绝

我可以将 Alteryx 连接到 Cosmos DB

使用Spring-MongoDB连接全球分布数据库Cosmos DB

Cosmos生态爆发年,有哪些东西值得我们期待?

区块链的 TCP/IP ?Cosmos 技术分析|标准共识

如何将 Cosmos DB 添加到 .Net 6 Web API?