使用terraform获取保险库秘密值

时间:2017-11-15 13:53:31

标签: terraform hashicorp-vault

我正在使用带有consul的Vault服务器作为存储后端,并尝试使用terraform中的Vault提供程序获取密码值。 但它并没有取得它的价值。我将我的秘密存储在location secret / instances

main.tf

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"]}"
}

当我运行terraform时,它会显示:

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

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

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

2 个答案:

答案 0 :(得分:0)

vault_generic_secret应该在resource块中定义。

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

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

答案 1 :(得分:0)

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

相关问题:GitHub Link

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

Vault版本:Vault 0.10.1

秘密引擎类型:KV版本1

路径:srekv1 / development

vault secret

Terraform版本:Terraform v0.11.10

  • provider.local v1.1.0
  • provider.vault 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"]}"
}