我正在尝试在 Terraform 中创建一个 Vault 用户,但似乎找不到合适的命令来执行此操作。我搜索了 Terraform Registry 并进行了一些在线搜索,但都无济于事。
我要做的就是创建一个用户,将相应的 Terraform 命令用于下面的 Vault CLI 命令:
vault write auth/userpass/users/bob password="passworld123" policies="default"
有什么建议吗?
@hitman126 我猜你可以使用“vault”提供者模块和“vault_auth_backend”资源块。我猜你的代码应该类似于下面的内容
terraform {
required_providers {
vault = {
source = "hashicorp/vault"
version = "3.5.0"
}
}
}
provider "vault" {
}
resource "vault_auth_backend" "example" {
type = "userpass"
}
resource "vault_generic_secret" "developer_sample_data" {
path = "secret/foo"
data_json = <<EOT
{
"username": "bob",
"password": "passworld123"
}
EOT
}
在上面的代码块中,路径是我们写入给定数据的完整逻辑路径。要将数据写入默认安装在 Vault 中的“通用”秘密后端,这应该以'secret/'为前缀。
这可能不是一个成熟的解决方案,但您可以尝试这样的事情
解决方案2:
如果你已经在机器上安装了 vault 并且你想单独使用 vault 命令实现上述用例(如果你不想使用 terraform-vault provider),那么你可以尝试下面的东西
touch vault-write.sh
让脚本内容可以类似下面
#!/bin/sh
vault write auth/userpass/users/bob password="passworld123" policies="default"
chmod +x vault-write.sh
touch vault.tf
vault.tf 文件的内容可以类似于下面
terraform {
required_version = "~> 1.1.1"
}
resource "null_resource" "vault_write" {
provisioner "local-exec" {
command = "/bin/sh vault-write.sh"
}
}
Vault 提供了一个
vault_generic_endpoint
资源,可用于此目的。
例如:
resource "vault_auth_backend" "userpass" {
type = "userpass"
}
resource "vault_generic_endpoint" "u1" {
depends_on = [vault_auth_backend.userpass]
path = "auth/userpass/users/bob"
ignore_absent_fields = true
data_json = <<EOT
{
"policies": ["default"],
"password": "passworld123"
}
EOT
}
请务必记住,资源配置中提供的所有数据都将以明文形式写入 Terraform 生成的状态和计划文件,并在 Terraform 运行时出现在控制台输出中。
您可以在提供商文档中找到更多信息这里
您可以找到使用这种方法的更长的教程here