使用Terraform上传文件到AWS秘密管理器



为了使Terraform成功地将命名文件上传到AWS秘密管理器中的秘密中,需要对下面示例的语法进行哪些具体更改?

请注意,运行Amazon Linux 2的AWS EC2实例也由相同的Terraform模块创建,并且需要从Secrets管理器检索该文件。同一个Amazon Linux 2 EC2实例已经能够成功地从同一个AWS秘密管理器检索字符串秘密。因此,此问题被隔离为上传文件而不是短字符串。

如果不可能上传file对象,那么第二个最佳答案将显示如何上传文件的文本内容。注意,该文件是一个x509证书,需要由在EC2实例中运行的程序使用。文本内容是x509证书的典型长度,它是相对较小的文本量。

当前代码:

variable "certFileAndPath" { default = "C:\path\to\the\x509\certificate.crt" } 
resource "aws_secretsmanager_secret" "example-cert" {
name = "example-cert"
recovery_window_in_days = 0
}
resource "aws_secretsmanager_secret_version" "cert-val" {
secret_id     = aws_secretsmanager_secret.example-cert.id
secret_binary = filebase64(var.certFileAndPath)
}

当前结果:

目前,上面的Terraform代码导致None被检索秘密的cloud-init脚本回显。而且,当人类用户试图读取由下面创建的秘密的内容时,用于秘密管理器的AWS web UI控制台不会显示任何内容。并且Terraform运行上面的代码而不会抛出错误。

在生成的EC2实例的/var/log/cloud-init-output.log中回显Nonecloud-initbash userdata命令为:

echo "example-cert is: n"
echo $(aws secretsmanager get-secret-value --secret-id "example-cert" --version-stage AWSCURRENT --region "${var._region}" --output text --query SecretString)

如果您使用的是secret_binary,那么在AWS CLI中您应该使用SecretBinary:

aws secretsmanager get-secret-value --secret-id "example-cert" --version-stage AWSCURRENT --region "${var._region}" --output text --query SecretBinary

最新更新