使用 Secretsmanager Terraform 设置 aws 访问密钥和秘密密钥

vkr*_*vkr 3 terraform terraform-provider-aws

我有下面的 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}"
}
Run Code Online (Sandbox Code Playgroud)

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

secret_string = "{\"AccessKey\": data.aws_iam_access_key.test.id,\"SecretAccessKey\": data.aws_iam_access_key.test.secret}"
Run Code Online (Sandbox Code Playgroud)

Mat*_*ard 6

您可以将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})
}
Run Code Online (Sandbox Code Playgroud)

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