【问题标题】:Set aws access key and secret key with secretsmanager Terraform使用 secretsmanager Terraform 设置 aws 访问密钥和密钥
【发布时间】:2020-07-21 07:52:42
【问题描述】:

我有下面的 terraform 模板,它创建一个用户、访问密钥并存储在秘密管理器中。

resource "aws_iam_user" "test" {
  name = "test"
}

resource "aws_iam_access_key" "test" {
  user = aws_iam_user.test.name
}

resource "aws_secretsmanager_secret" "test" {
  name = "credentials"
  description = "My credentials"
}

resource "aws_secretsmanager_secret_version" "test" {
  secret_id     = "${aws_secretsmanager_secret.test.id}"
  secret_string = "{\"AccessKey\": data.aws_iam_access_key.test.id,\"SecretAccessKey\": data.aws_iam_access_key.test.secret}"
}

secret_string 中的值未设置。这是正确的用法吗?请帮我设置正确的值

secret_string = "{\"AccessKey\": data.aws_iam_access_key.test.id,\"SecretAccessKey\": data.aws_iam_access_key.test.secret}"

【问题讨论】:

  • 您是否尝试将带有 Terraform 导出属性的 JSON 作为 secret_string 的参数值传递?
  • 是的,你是对的。我将idsecret 创建为aws_iam_access_key 资源的一部分。我需要将其作为 JSON 传递给 secret_string
  • 试试secret_string = jsonencode({"AccessKey" = data.aws_iam_access_key.test.id, "SecretAccessKey" = data.aws_iam_access_key.test.secret})"
  • 我收到此错误Error: Reference to undeclared resource on iam.tf line 16, in resource "aws_secretsmanager_secret_version" "test": 16: secret_string = jsonencode({"AccessKey" = data.aws_iam_access_key.test.id, "SecretAccessKey" = data.aws_iam_access_key.test.secret}) A data resource "aws_iam_access_key" "test" has not been declared in the root module.
  • 它可以在没有数据的情况下工作secret_string = jsonencode({"AccessKey" = aws_iam_access_key.test.id, "SecretAccessKey" = aws_iam_access_key.test.secret})

标签: terraform terraform-provider-aws


【解决方案1】:

您可以将 secret_string 参数值构造为 Map 类型,然后使用 Terraform 的原生 jsonencode 函数将其编码为 JSON 字符串,以确保将值正确传递给参数。您的资源如下所示:

resource "aws_secretsmanager_secret_version" "test" {
  secret_id     = "${aws_secretsmanager_secret.test.id}"
  secret_string = jsonencode({"AccessKey" = aws_iam_access_key.test.id, "SecretAccessKey" = aws_iam_access_key.test.secret})
}

还要注意aws_iam_access_key.test.idaws_iam_access_key.test.secret 是从资源而不是数据中导出的属性,因此需要从它们的命名空间中删除data 前缀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2020-11-28
    • 2017-03-23
    相关资源
    最近更新 更多