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的主要内容,如果未能解决你的问题,请参考以下文章