使用secretsmanager Terraform设置aws访问密钥和密钥

使用secretsmanager Terraform设置aws访问密钥和密钥,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我有下面的terraform模板,它创建了一个用户、访问密钥并存储在secret manager中 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" des

我有下面的terraform模板,它创建了一个用户、访问密钥并存储在secret manager中

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_字符串中的值。这是正确的用法吗?请帮我设置正确的值

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

您可以将
secret\u字符串
参数值构造为映射类型,然后使用Terraform的原生
jsonecode
函数将其编码为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\u iam\u access\u key.test.id
aws\u iam\u access\u key.test.secret
是从资源而非数据导出的属性,因此需要从其命名空间中删除
数据前缀。

您可以将
secret\u字符串
参数值构造为映射类型,然后使用Terraform的原生
jsonecode
函数将其编码为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\u iam\u access\u key.test.id
aws\u iam\u access\u key.test.secret
是从资源而非数据导出的属性,因此,
数据
前缀需要从其名称空间中删除。

您是否试图将带有Terraform导出属性的JSON作为
secret\u string
的参数值传递?是的。我将
id
secret
创建为
aws\u iam\u access\u key
资源的一部分。我需要将它作为JSONTry
secret\u string=jsonecode({“AccessKey”=data.aws\u iam\u access\u key.test.id,“SecretAccessKey”=data.aws\u iam\u access\u key.test.secret})传递给
。我得到了这个错误
错误:参考了iam.tf第16行中的未声明的资源aws_secretsmanager_secret_version“test”:16:secret_string=jsonecode({“AccessKey”=data.aws_iam_access_key.test.id,“SecretAccessKey”=data.aws_iam_access_key.test.secret})根模块中未声明数据资源“aws_iam_access_key”test。
它在没有数据的情况下工作
secret string=jsonecode({“AccessKey”“=aws_iam_access_key.test.id,“SecretAccessKey”=aws_iam_access_key.test.secret})
您是否试图传递带有Terraform导出属性的JSON作为
secret_string
的参数值?是的。我将
id
secret
创建为
aws\u iam\u access\u key
资源的一部分。我需要将它作为JSONTry
secret\u string=jsonecode({“AccessKey”=data.aws\u iam\u access\u key.test.id,“SecretAccessKey”=data.aws\u iam\u access\u key.test.secret})传递给
。我得到了这个错误
错误:参考了iam.tf第16行中的未声明的资源aws_secretsmanager_secret_version“test”:16:secret_string=jsonecode({“AccessKey”=data.aws_iam_access_key.test.id,“SecretAccessKey”=data.aws_iam_access_key.test.secret})根模块中未声明数据资源“aws_iam_access_key”test。
它在没有数据的情况下工作
secret string=jsonecode({“AccessKey”“=aws_iam_access_key.test.id,“SecretAccessKey”=aws_iam_access_key.test.secret})