【问题标题】:How to retrieve a secret in terraform from aws secret manager如何从 aws 秘密管理器中检索 terraform 中的秘密
【发布时间】:2020-10-01 08:24:51
【问题描述】:

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

我是从 terraform 网站上找到的

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

然后我如何检索该值?意思是什么是“get-value" 在 terraform 中对于 EC2 实例的等效项?

【问题讨论】:

    标签: amazon-web-services terraform aws-secrets-manager


    【解决方案1】:

    这是一个例子。默认情况下,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"]
    

    【讨论】:

    • 嗨!谢谢你能举个秘密的例子而不是名字吗? @pabloxio
    • 您可以使用arnname 检索密钥。我使用了name,但这里是使用arn 的示例:arn = "arn:aws:secretsmanager:us-east-1:123456789012:secret: my_secrety_name"
    • 所以同样适用于 arn?你能替换这个例子吗?
    • 当然...请记住 AWS 为 AWS Secret 名称添加了后缀,在此示例中为 123456
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-10-13
        • 2020-12-04
        • 2019-12-03
        • 2021-10-07
        • 2022-08-16
        • 2021-03-15
        • 2022-11-02
        • 2021-01-19
        • 2021-10-26
        相关资源
        最近更新 更多