使用 terraform 获取保险库机密值

Sun*_*eha 7 terraform hashicorp-vault

我正在使用带有 consul 的保管库服务器作为存储后端,并尝试使用 terraform 中的保管库提供程序获取密码值。但它没有获取它的价值。我将我的机密存储在位置机密/实例中

主文件

provider "vault" {
 address = "https://<IP_ADDRESS>:<PORT_NUMBER>"
 token = "118bb796-d715-8ce4-b987-7f354ff3f5a7"
}
data "vault_generic_secret" "mypass"{
 path = "secret/instances/password"
}
output "mypassword" {
 value = "${data.vault_generic_secret.mypass.data["value"]}"
}
Run Code Online (Sandbox Code Playgroud)

当我运行 terraform apply 它显示:

data.vault_generic_secret.mypass: Refreshing state...
data.vault_generic_secret.mypass: Refreshing state...

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Run Code Online (Sandbox Code Playgroud)

请建议我在这里做错了什么,因为它没有从保险库中获取密码值。

Ade*_*mad 8

我也遇到了类似的问题并找到了这篇文章。就我而言,问题在于 terraform 和 Vault 之间的兼容性。我使用的是 KV 版本 2,它与 terraform v0.11.10 不兼容。

相关问题:GitHub 链接

因此,我将尝试用工作示例和环境详细信息来写我的答案,因为它可能会对其他人有所帮助。

Vault版本:Vault 0.10.1

秘密引擎类型:KV 版本 1

路径:srekv1/development

金库的秘密

Terraform 版本:Terraform v0.11.10

  • 提供商本地 v1.1.0
  • 提供商.v1.1.4

用于获取秘密的 Terraform 代码:

provider "vault" {

address = "https://vault-myappXXX.net"
skip_tls_verify = true
token = "95XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

data "vault_generic_secret" "srekv1" {
  path = "srekv1/development"
}

output Namekv1 {
value = "${data.vault_generic_secret.srekv1.data["Name"]}"
}
Run Code Online (Sandbox Code Playgroud)


小智 -3

vault_generic_secret应该在resource块中定义。

您已经在data块中定义了它。

参考: https: //www.terraform.io/docs/providers/vault/d/aws_access_credentials.html