如何从AWS Secret Manager中检索Terraform中的秘密

时间:2020-06-11 16:10:56

标签: terraform aws-secrets-manager

我在机密管理器中存储了一个机密,可以访问该机密。我想从此arn中检索值并将其用于terraform中,如何实现呢?

我是从terraform网站上找到的

data "aws_secretsmanager_secret" "by-arn" {
  arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456"
}

然后如何检索值?意思是EC2距离在地形中的“ get-value"等价物是什么?

3 个答案:

答案 0 :(得分:2)

这里是一个例子。默认情况下,aws_secretsmanager_secret_version根据AWSCURRENT标签(又称最新版本)检索信息:

data "aws_secretsmanager_secret" "secrets" {
  arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secrety_name-123456"
}

data "aws_secretsmanager_secret_version" "current" {
  secret_id = data.aws_secretsmanager_secret.secrets.id
}

并使用data.aws_secretsmanager_secret_version.current.secret_string来获取秘密。如果您想在秘密中检索特定值,例如DATABASE_URL,则可以使用内置函数jsondecode

jsondecode(data.aws_secretsmanager_secret_version.current.secret_string)["DATABASE_URL"]

答案 1 :(得分:0)

aws_secretsmanager_secret是一个AWS Secretsmanager秘密对象,但是一个秘密可以具有多个版本,并且值存储在版本中,而不存储在父秘密对象中。

因此,您正在寻找的是https://www.terraform.io/docs/providers/aws/r/secretsmanager_secret_version.html(它描述了如何获取秘密版本(即aws_secretsmanager_secret_version.example.secret_string)的值。

答案 2 :(得分:0)

请注意,Terraform 0.14 添加了在控制台输出中编辑敏感值的功能。

因此,如果您使用 Terraform > 0.14,则必须使用 nonsensitive 函数来公开实际的秘密值。

nonsensitive 函数接受一个敏感值并返回该值的副本,其中删除了敏感标记,从而暴露了实际值。

data "aws_secretsmanager_secret" "secrets" {
  arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my_secrety_name-123456"
}

data "aws_secretsmanager_secret_version" "current" {
  secret_id = data.aws_secretsmanager_secret.secrets.id
}

output "sensitive_example_hash" {
  value = jsondecode(nonsensitive(data.aws_secretsmanager_secret_version.current.secret_string))
}