【问题标题】:upload file into AWS Secrets Manager using Terraform使用 Terraform 将文件上传到 AWS Secrets Manager
【发布时间】: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 中回显 Nonecloud-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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-09-24
      • 2021-03-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 2021-11-19
      • 2019-06-11
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多