从 Azure Key Vault 获取 API 密钥,用于 Terraform 中的 mongodb atlas 提供程序

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

我正在使用 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
}

但我希望我可以从密钥库中获取这些秘密。

mongodb azure terraform
2个回答
1
投票

使用 Terraform 时,您有两种主要策略用于从 Azure Key Vault 检索 API 密钥等机密:

  1. 外部 CLI 命令:在运行 Terraform 之前通过 Azure CLI 命令获取机密,然后将它们作为变量传递 到您的 Terraform 配置。这个方法可以保守秘密 Terraform 状态文件,但需要仔细处理以避免 将它们暴露在您的 shell 历史记录或日志中。
  2. Terraform 数据源:使用 azurerm_key_vault_secret 数据源 直接在 Terraform 配置中获取机密。 这种方法更简单,更独立,但秘密会 存储在 Terraform 状态文件中。

关于 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
}

0
投票

我的结论是这是不可行的,并且它们需要进行硬编码。

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