Azure DevOps terraform和AKV

Azure DevOps terraform和AKV,azure,azure-devops,terraform,devops,Azure,Azure Devops,Terraform,Devops,在我们的案例中,我们正在做以下工作: 1.红外线代理 A.我们创建了一个KV B我们在tf脚本中创建SQL数据库,包括分配管理员用户名和密码(随机生成的值)。 C我们将用户名和密码作为机密存储在新创建的KV中 2.数据代理 A.我们希望将repos中的DDL部署到我们在Infra Agent中创建的SQL数据库中。我们需要使用存储在KV中的SQL数据库用户名和密码来执行此操作 B为了从KV中读取机密,我们当前的想法是在步骤1中向管道参数插入用户名和密码(即在运行时设置它们),以便我们可以跨其他代

在我们的案例中,我们正在做以下工作:
1.红外线代理
A.我们创建了一个KV
B我们在tf脚本中创建SQL数据库,包括分配管理员用户名和密码(随机生成的值)。
C我们将用户名和密码作为机密存储在新创建的KV中
2.数据代理
A.我们希望将repos中的DDL部署到我们在Infra Agent中创建的SQL数据库中。我们需要使用存储在KV中的SQL数据库用户名和密码来执行此操作
B为了从KV中读取机密,我们当前的想法是在步骤1中向管道参数插入用户名和密码(即在运行时设置它们),以便我们可以跨其他代理重用这些值

几个问题:
-这是正确的方法吗?是否应在Infra Agent tf脚本中创建KV?我们是否应该随机生成密码(作为机密)?
-在其他代理中访问数据库用户名和密码的最佳做法是什么:
o我们不能使用变量组,因为KV和值直到运行时才知道
o我们不能使用密钥库任务()从KV读取,因为KV名称只有在运行时才知道(通过tf vars文件)

b。我们在tf脚本中创建一个SQL数据库,包括分配管理员用户名和密码(随机生成的值)

如果您使用的是Key Vault,那么我假设您谈论的是Azure SQL数据库。然而,目前Terraform只支持为管理员分配用户名和密码,而不支持

在这种情况下,我建议使用资源分配值,然后将这些值分配为
azurerm\u sql\u服务器
管理员密码

通过此设置,您可以确定密钥库中的密码始终处于同步状态,并且可以将其视为SQL server密码的真实来源(当然,除非有人手动重置管理员密码)

现在,如果您想要重置SQL server密码,只需污染
random\u密码
,强制使用新值重新创建密码,然后更新
azurerm\u key\u vault\u secret
值,然后更新
azurerm\u SQL\u服务器
密码

这里有一些快速盐酸作为例子

resource "random_password" "password" {
    length = 16
    special = false
}

resource "azurerm_key_vault_secret" "password_secret" {
    depends_on = [<the Key Vault access policy for your infra agent which runs terraform apply>]
    ...
    value = random_password.password.result
    ...
}

resource "azurerm_sql_server" "sql_server" {
    ...
    administrator_login_password = azurerm_key_vault_secret.password_secret.value
    ...
}
然后运行'terraform output key\u vault\u name'将值写入标准输出

output "key_vault_name" {
    value = "${azurerm_key_vault.demo_key_vault.name}"
}