当terraform连接到atlas时,我试图让我的terraform(管理我们的mongo atlas基础设施)使用动态秘密(通过vault,目前在本地主机上运行),但我似乎无法让它工作。
我找不到任何关于如何做到这一点的例子,所以我把一个示例github repo放在一起,展示了我到目前为止尝试做的几件事。
所有的魔力都包含在这3个提供程序文件中。我有使用静态密钥连接到atlas的标准方法(即使这些密钥通过vault作为临时API密钥生成),请参见provider1.tf
问题来了,当我试图使用地图库秘密引擎的地形与蒙古地图库提供程序。根本没有例子!
我的问题是如何使用atlas vault秘密引擎来生成和使用临时密钥,当使用terraform提供基础设施时?
我已经尝试了两种不同的方式来连接提供程序,参见fileprovider2。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
现在将保险库提供程序和数据源添加到您的地形配置:
provider "vault" {
address = "http://127.0.0.1:8200"
}
data "vault_generic_secret" "mongodbatlas" {
path = "mongodbatlas/creds/test"
}
最后,使用保险库数据源提供的密钥添加mongodb提供程序:
provider "mongodbatlas" {
public_key = data.vault_generic_secret.mongodbatlas.data["public_key"]
private_key = data.vault_generic_secret.mongodbatlas.data["private_key"]
}
完整的示例如下:github repo