使用 Terraform 将文件上传到 AWS Secrets Manager
Posted
技术标签:
【中文标题】使用 Terraform 将文件上传到 AWS Secrets Manager【英文标题】:upload file into AWS Secrets Manager using Terraform 【发布时间】: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)
【问题讨论】:
【参考方案1】:如果您使用的是secret_binary
,则应在 AWS CLI 中使用SecretBinary
:
aws secretsmanager get-secret-value --secret-id "example-cert" --version-stage AWSCURRENT --region "$var._region" --output text --query SecretBinary
【讨论】:
以上是关于使用 Terraform 将文件上传到 AWS Secrets Manager的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 不会等待代码上传到 Terraform 脚本中的 S3 存储桶
如何在 Azure Pipeline 上使用 Terraform 将文件上传到 Azure 存储?