默认情况下,我们如果使用Terraform在Azure上部署VM资源,则必须在变量文件中以明文的方式提供对应的用户名和密码信息,从安全的角度讲,这种做法存在极大的安全隐患。为了这种安全隐患,我们可以选择将用户名和密码信息存储在Azure Keyvault中。在每次部署的时候,Terraform都会以加密的方式从Azure Keyvault中读取部署所需的信息,从而避免对应的安全隐患。
若要在Terraform部署中使用Azure Key Vault,我们必须在Terraform中添加如下代码:
// Get Keyvault Data
data "azurerm_resource_group" "rg_keyvault" {
name = "${var.rg_keyvault}"
}
data "azurerm_key_vault" "keyvault" {
name = "${var.keyvault_name}"
resource_group_name = "${data.azurerm_resource_group.rg_keyvault.name}"
}
data "azurerm_key_vault_secret" "secret_default-windows-linux-admin-password" {
key_vault_id = var.key_vault_id
name = "default-windows-linux-admin-password"
}
然后我们需要将我们从keyvault中获取到的secret赋值到admin_password变量中:
admin_password = "${data.azurerm_key_vault_secret.secret_secret_default-windows-linux-admin-password.value}"
接下来我们可以运行terraform init来初始化资源:
然后运行terraform plan来查看整体执行计划:
运行terraform apply来应用部署:
因为我在terraform文件中加了output参数来输出我们所获取到的密码信息,所以在上图中我们可以看到绿色"se"部分输出了对应的密码。