如何使用 Terraform 创建 Hashicorp Vault 用户

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

我正在尝试在 Terraform 中创建一个 Vault 用户,但似乎找不到合适的命令来执行此操作。我搜索了 Terraform Registry 并进行了一些在线搜索,但都无济于事。

我要做的就是创建一个用户,将相应的 Terraform 命令用于下面的 Vault CLI 命令:

vault write auth/userpass/users/bob password="passworld123" policies="default" 

有什么建议吗?


authentication terraform command-line-interface hashicorp-vault vault
2个回答
1
投票

@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),那么你可以尝试下面的东西

  1. 使用上面的 vault 命令创建一个小的 sh 脚本。 (valut-write.sh)
touch vault-write.sh

让脚本内容可以类似下面

#!/bin/sh
vault write auth/userpass/users/bob password="passworld123" policies="default" 
chmod +x vault-write.sh
  1. Create a .tf file with null resource, local-exec provisioner 并调用这个 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"
  }
}

0
投票

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

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