如何从 aws 秘密管理器中检索 terraform 中的秘密

use*_*mda 7 terraform aws-secrets-manager

我有一个秘密存储在我可以访问 arn 的秘密管理器中。我想从此 arn 检索值并在 terraform 中使用它,我该如何实现?

我从 terraform 网站上找到了这个

data "aws_secretsmanager_secret" "by-arn" {
  arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:example-123456"
}
Run Code Online (Sandbox Code Playgroud)

然后我如何检索该值?意思是什么是“ get-value"EC2 istance 在 terraform 中的等价物?

Suf*_*ori 14

请注意,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))
}

Run Code Online (Sandbox Code Playgroud)

  • 请注意,永远不要将真正的敏感数据作为这样的输出,因为输出在 terraform 状态文件中保存为纯文本。 (4认同)

pab*_*xio 11

这是一个例子。默认情况下,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
}
Run Code Online (Sandbox Code Playgroud)

并用于data.aws_secretsmanager_secret_version.current.secret_string获取秘密。如果您想检索该秘密中的特定值,就像DATABASE_URL您可以使用内置函数一样jsondecode

jsondecode(data.aws_secretsmanager_secret_version.current.secret_string)["DATABASE_URL"]
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用“arn”或“name”来检索秘密。我使用了 `name`,但这里有一个使用 `arn` 的示例: `arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret: my_secrety_name"` (2认同)

小智 1

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

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