azure - Terraform 将 Cosmos 数据库连接字符串传递到 KeyVault

标签 azure azure-devops terraform azure-cosmosdb azure-keyvault

我最近在 Terraform 中创建了一个 cosmos 数据库,并且尝试将其数据库连接字符串作为 keyvault 中的 secret 传递,但是在执行此操作时出现以下错误:

错误:属性值类型不正确 │ │ 在 keyvault.tf 第 282 行,资源“azurerm_key_vault_secret”“Authentication_Server_Cosmos_DB_ConnectionString”中: │ 282:值 = azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings │ ├──────── ──────── │ │ azurerm_cosmosdb_account.nsauthsrvcosmosdb.connection_strings 具有敏感值 │ │ 属性“value”的值不合适:需要字符串。

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

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

所以请假设,我正在使用最新的 Azurerm 代理,并且我的其余代码都是正确的,只是 secret 部分不起作用。

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 值,并为要存储在 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
}

输出:

enter image description here

enter image description here

enter image description here

如果您只想存储一个连接字符串,那么您可以根据您的要求使用索引(例如:如果您想存储第一个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
}

输出:

enter image description here

enter image description here

关于azure - Terraform 将 Cosmos 数据库连接字符串传递到 KeyVault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70080780/

相关文章:

azure - 找不到任何在 Cosmos db 本地存储/Azure 门户中创建集合的选项

powershell - 调用 ASCmd 以在 PowerShell 中返回错误/警告

azure - 如何根据定义的环境在Azure管道中运行相同的步骤?

terraform - 使用 terraform 添加 azure SQL 用户

terraform - 在 Terraform 中定义 sagemaker 管道资源

Azure 应用服务劫持 HTTP 状态 500 错误的响应

Azure静态网站使用我自己的ssl证书?

azure - 如何使用 azurerm_virtual_machine_scale_set_extension 中的设置

azure - 创建 3 个 VNET,其中所有流量都通过一个 VNET(中心和辐射)进行路由

azure-devops - DevOps 发布错误 : EPERM operation not permitted