使用 terraform 构建 mongodb atlas 集群时,如何通过保管库使用动态机密
When using terraform to build a mongodb atlas cluster how do i use dynamic secrets through vault
我正在尝试让我的 terraform(管理我们的 mongo atlas 基础设施)在 terraform 连接到 atlas 时使用动态机密(通过 vault,运行 目前在本地主机上),但我似乎无法让它工作。
我找不到有关如何执行此操作的任何示例,因此我整理了一个示例 github repo,展示了到目前为止我尝试过的一些事情。
所有的魔法都包含在 3 个提供程序文件中。我有使用静态密钥连接到 atlas 的标准方法(即使上述密钥通过保险库生成为临时 API 密钥)请参阅 provider1.tf
当我尝试使用 atlas vault secret engine for terraform along with the mongo atlas provider 时出现问题。就是没有例子!
我的问题是在使用 terraform 供应基础设施时如何使用 atlas vault 秘密引擎生成和使用临时密钥?
我已经尝试了两种不同的连接提供者的方法,请参阅文件 provider2.tf 和 provider3.tf,代码复制在这里:
provider2.tf
provider "mongodbatlas" {
public_key = vault_database_secrets_mount.db.mongodbatlas[0].public_key
private_key = vault_database_secrets_mount.db.mongodbatlas[0].private_key
}
provider "vault" {
address = "http://127.0.0.1:8200"
}
resource "vault_database_secrets_mount" "db" {
path = "db"
mongodbatlas {
name = "foo"
public_key = var.mongodbatlas_org_public_key
private_key = var.mongodbatlas_org_private_key
project_id = var.mongodbatlas_project_id
}
}
provider3.tf
provider "mongodbatlas" {
public_key = vault_database_secret_backend_connection.db2.mongodbatlas[0].public_key
private_key = vault_database_secret_backend_connection.db2.mongodbatlas[0].private_key
}
resource "vault_mount" "db1" {
path = "mongodbatlas01"
type = "database"
}
resource "vault_database_secret_backend_connection" "db2" {
backend = vault_mount.db1.path
name = "mongodbatlas02"
allowed_roles = ["dev", "prod"]
mongodbatlas {
public_key = var.mongodbatlas_org_public_key
private_key = var.mongodbatlas_org_private_key
project_id = var.mongodbatlas_project_id
}
}
两种方法都给出相同类型的错误:
mongodbatlas_cluster.cluster-terraform01: Creating...
╷
│ Error: error creating MongoDB Cluster: POST https://cloud.mongodb.com/api/atlas/v1.0/groups/10000000000000000000001/clusters: 401 (request "") You are not authorized for this resource.
│
│ with mongodbatlas_cluster.cluster-terraform01,
│ on main.tf line 1, in resource "mongodbatlas_cluster" "cluster-terraform01":
│ 1: resource "mongodbatlas_cluster" "cluster-terraform01" {
任何指示或示例将不胜感激
非常感谢
设置并启动 vault、启用 mongodbatlas、向 vault 添加配置和角色后,使用由 vault 创建的动态临时密钥将 terraform 连接到 atlas 实际上相当容易。
运行 首先使用这些命令在本地启动和配置 Vault:
vault server -dev
export VAULT_ADDR='http://127.0.0.1:8200'
vault secrets enable mongodbatlas
# Write your master API keys into vault
vault write mongodbatlas/config public_key=org-api-public-key private_key=org-api-private-key
vault write mongodbatlas/roles/test project_id=100000000000000000000001 roles=GROUP_OWNER ttl=2h max_ttl=5h cidr_blocks=123.45.67.1/24
现在将保管库提供程序和数据源添加到您的 Terraform 配置中:
provider "vault" {
address = "http://127.0.0.1:8200"
}
data "vault_generic_secret" "mongodbatlas" {
path = "mongodbatlas/creds/test"
}
最后,使用保险库数据源提供的密钥添加 mongodbatlas 提供程序:
provider "mongodbatlas" {
public_key = data.vault_generic_secret.mongodbatlas.data["public_key"]
private_key = data.vault_generic_secret.mongodbatlas.data["private_key"]
}
中的完整示例显示了这一点
我正在尝试让我的 terraform(管理我们的 mongo atlas 基础设施)在 terraform 连接到 atlas 时使用动态机密(通过 vault,运行 目前在本地主机上),但我似乎无法让它工作。
我找不到有关如何执行此操作的任何示例,因此我整理了一个示例 github repo,展示了到目前为止我尝试过的一些事情。
所有的魔法都包含在 3 个提供程序文件中。我有使用静态密钥连接到 atlas 的标准方法(即使上述密钥通过保险库生成为临时 API 密钥)请参阅 provider1.tf
当我尝试使用 atlas vault secret engine for terraform along with the mongo atlas provider 时出现问题。就是没有例子!
我的问题是在使用 terraform 供应基础设施时如何使用 atlas vault 秘密引擎生成和使用临时密钥?
我已经尝试了两种不同的连接提供者的方法,请参阅文件 provider2.tf 和 provider3.tf,代码复制在这里:
provider2.tf
provider "mongodbatlas" {
public_key = vault_database_secrets_mount.db.mongodbatlas[0].public_key
private_key = vault_database_secrets_mount.db.mongodbatlas[0].private_key
}
provider "vault" {
address = "http://127.0.0.1:8200"
}
resource "vault_database_secrets_mount" "db" {
path = "db"
mongodbatlas {
name = "foo"
public_key = var.mongodbatlas_org_public_key
private_key = var.mongodbatlas_org_private_key
project_id = var.mongodbatlas_project_id
}
}
provider3.tf
provider "mongodbatlas" {
public_key = vault_database_secret_backend_connection.db2.mongodbatlas[0].public_key
private_key = vault_database_secret_backend_connection.db2.mongodbatlas[0].private_key
}
resource "vault_mount" "db1" {
path = "mongodbatlas01"
type = "database"
}
resource "vault_database_secret_backend_connection" "db2" {
backend = vault_mount.db1.path
name = "mongodbatlas02"
allowed_roles = ["dev", "prod"]
mongodbatlas {
public_key = var.mongodbatlas_org_public_key
private_key = var.mongodbatlas_org_private_key
project_id = var.mongodbatlas_project_id
}
}
两种方法都给出相同类型的错误:
mongodbatlas_cluster.cluster-terraform01: Creating...
╷
│ Error: error creating MongoDB Cluster: POST https://cloud.mongodb.com/api/atlas/v1.0/groups/10000000000000000000001/clusters: 401 (request "") You are not authorized for this resource.
│
│ with mongodbatlas_cluster.cluster-terraform01,
│ on main.tf line 1, in resource "mongodbatlas_cluster" "cluster-terraform01":
│ 1: resource "mongodbatlas_cluster" "cluster-terraform01" {
任何指示或示例将不胜感激
非常感谢
设置并启动 vault、启用 mongodbatlas、向 vault 添加配置和角色后,使用由 vault 创建的动态临时密钥将 terraform 连接到 atlas 实际上相当容易。
运行 首先使用这些命令在本地启动和配置 Vault:
vault server -dev
export VAULT_ADDR='http://127.0.0.1:8200'
vault secrets enable mongodbatlas
# Write your master API keys into vault
vault write mongodbatlas/config public_key=org-api-public-key private_key=org-api-private-key
vault write mongodbatlas/roles/test project_id=100000000000000000000001 roles=GROUP_OWNER ttl=2h max_ttl=5h cidr_blocks=123.45.67.1/24
现在将保管库提供程序和数据源添加到您的 Terraform 配置中:
provider "vault" {
address = "http://127.0.0.1:8200"
}
data "vault_generic_secret" "mongodbatlas" {
path = "mongodbatlas/creds/test"
}
最后,使用保险库数据源提供的密钥添加 mongodbatlas 提供程序:
provider "mongodbatlas" {
public_key = data.vault_generic_secret.mongodbatlas.data["public_key"]
private_key = data.vault_generic_secret.mongodbatlas.data["private_key"]
}
中的完整示例显示了这一点