如何使用 terraform 将来自 SQL 托管实例的连接字符串存储在 Azure Key Vault 中

问题描述 投票:0回答:2

我正在使用 terraform 部署 SQL 托管实例,并且需要将其附带的 4 个连接字符串存储在 azure key Vault 中。根据 SQL 托管实例的 terraform 文档: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/mssql_managed_instance 连接字符串不是导出的属性,因此不能只进行输出并引用它。我如何识别这些连接字符串以将它们存储在密钥保管库中?

如果 terraform 无法实现,我愿意接受 powershell/arm 解决方案

azure terraform azure-keyvault azure-sql-managed-instance
2个回答
3
投票

一般来说,您可以使用 terraform 将任何秘密存储在密钥保管库中,如下所示:

resource "azurerm_key_vault_secret" "example" {
  name         = "the-secret-name"
  value        = "the-secret-value"
  key_vault_id = var.keyvault_id
}

每个连接字符串都遵循一定的语法,因此我会根据名称、管理员用户和管理员密码将它们组合在一起作为字符串,并将它们添加到密钥保管库中,类似于:

locals {
    username = "admin"
    password = "abc"
}

resource "azurerm_mssql_managed_instance" "example" {
  name                = "managedsqlinstance"
  resource_group_name = var.resource_group_name
  location            = var.location
  
  administrator_login          = local.username
  administrator_login_password = local.password
  ...
}
resource "azurerm_key_vault_secret" "example" {
  name         = "sql-connectionstring"
  value        = "Server=tcp:${azurerm_mssql_managed_instance.example.name}.database.windows.net,1433;Persist Security Info=False;User ID=${local.username};Password=${local.password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  key_vault_id = var.keyvault_id
}

要查找连接字符串及其确切语法,您应该查看已在 azure 门户中创建的 sql 托管实例。


0
投票

@mattymac,你能用 PowerShell 修复剩下的部分吗?如果是的话你愿意分享你的脚本吗?我也面临同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.