我正在使用带有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.
请告诉我我在这里做错了什么,因为它没有从保险库获取密码值。
答案 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
Terraform版本:Terraform v0.11.10
要解密的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"]}"
}