我正在使用 Terraform 在 azure 上部署 mongodb atlas 实例,但现在我必须使用 API 密钥来验证 Terraform 中的 mongodb 提供程序,但这对我来说并不安全,所以我想将它们放在密钥库。但现在我不清楚如何在 Terraform 中构建提供程序时读取 keyvault。
使用变量它可以工作:
provider "mongodbatlas" {
public_key = var.mongodb_atlas_api_pub_key
private_key = var.mongodb_atlas_api_pri_key
}
但我希望我可以从密钥库中获取这些秘密。
使用 Terraform 时,您有两种主要策略用于从 Azure Key Vault 检索 API 密钥等机密:
关于 Terraform 状态文件,需要注意的是:
Terraform 状态文件旨在跟踪资源的状态,其中包括通过数据源检索的数据。因此,如果您使用 Terraform 检索机密,这些机密将存储在状态文件中。 虽然 Terraform 提供程序可以将数据标记为敏感以防止其显示在控制台输出中,但敏感数据仍将以纯文本形式存在于状态文件中。对于使用 azurerm_key_vault_secret 数据源从 Azure Key Vault 检索的机密,情况如此。 考虑到状态文件中数据的潜在敏感性,安全地存储状态文件至关重要。如果使用远程状态,请确保它位于安全、访问控制和加密的存储解决方案中。如果它是本地的,请确保它位于安全的环境中,并考虑对静态文件进行加密。
以下是如何构建 Terraform 文件以从 Azure Key Vault 检索机密并在 MongoDB Atlas 提供程序中使用这些机密的示例:
azure.tf(Azure 提供商和 Key Vault 数据源)
provider "azurerm" {
features = {}
}
data "azurerm_key_vault" "example" {
name = "your_key_vault_name"
resource_group_name = "your_resource_group_name"
}
data "azurerm_key_vault_secret" "mongodb_public_key" {
name = "your-mongodb-public-key-secret-name"
key_vault_id = data.azurerm_key_vault.example.id
}
data "azurerm_key_vault_secret" "mongodb_private_key" {
name = "your-mongodb-private-key-secret-name"
key_vault_id = data.azurerm_key_vault.example.id
}
mongodb_atlas_provider.tf(MongoDB Atlas 提供程序)
provider "mongodbatlas" {
public_key = data.azurerm_key_vault_secret.mongodb_public_key.value
private_key = data.azurerm_key_vault_secret.mongodb_private_key.value
}
我的结论是这是不可行的,并且它们需要进行硬编码。