我在机密管理器中存储了一个机密,可以访问该机密。我想从此arn中检索值并将其用于terraform中,如何实现呢?
我是从terraform网站上找到的
data "aws_secretsmanager_secret" "by-arn" {
arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456"
}
然后如何检索值?意思是EC2距离在地形中的“ get-value"
等价物是什么?
答案 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))
}