【发布时间】:2021-04-21 01:11:23
【问题描述】:
需要对以下示例的语法进行哪些特定更改才能使 Terraform 成功将命名文件上传到 AWS Secrets Manager 中的密钥中?
请注意,运行 Amazon Linux 2 的 AWS EC2 实例也是由相同的 Terraform 模块创建的,并且需要从 Secrets manager 中检索此文件。同一个 Amazon Linux 2 EC2 实例已经能够从同一个 AWS Secrets Manager 成功检索字符串密钥。因此,这个问题被隔离为上传文件而不是短字符串。
如果无法上传文件对象,那么第二个最佳答案将显示如何上传文件的文本内容。请注意,该文件是一个 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 中回显 None 的 cloud-init bash 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)
【问题讨论】:
标签: amazon-web-services amazon-ec2 terraform terraform-provider-aws aws-secrets-manager