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
}
输出:
我最近在 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
}
输出: