【问题标题】:How to avoid including credential information in Terraform script when creating a secret manager resource?创建秘密管理器资源时如何避免在 Terraform 脚本中包含凭据信息?
【发布时间】:2021-05-29 00:57:48
【问题描述】:

我想在 Terraform 中创建一个秘密来存储 FTP 凭据,我做了一些阅读,包括资源 secretsmanager_secretsecretsmanager_secret_version 的 Terraform 文档。

我现在有了一些想法,我的理解是使用下面的代码我可以创建一个空的秘密:

resource "aws_secretsmanager_secret" "example" {
  name = "example"
}

然后我可以使用下面的代码来指定我的凭据,以告诉 Terraform 需要在此密钥中存储什么键和值:

resource "aws_secretsmanager_secret_version" "example" {
  secret_id     = aws_secretsmanager_secret.example.id
  secret_string = "example-string-to-protect"
}

我现在很困惑,这样的话,凭证会暴露在 Terraform 脚本中,那么这样做有什么意义呢?我想知道最佳实践是什么,也许只是在 Terraform 中创建一个空秘密,然后在 AWS 控制台中手动添加凭据?请问有人可以帮忙吗?谢谢。

【问题讨论】:

    标签: amazon-web-services terraform credentials terraform-provider-aws aws-secrets-manager


    【解决方案1】:

    由于您对“example-string-to-protect”进行硬编码,因此秘密将在源代码中以纯文本形式出现。这是不好的做法

    我想知道最佳实践是什么,也许只是在 Terraform 中创建一个空密码,然后在 AWS 控制台中手动添加凭据?

    是的,这很常见。但即使您这样做,并尝试使用 数据源 aws_secretsmanager_secret_version 获取秘密并使用它,例如要为您的数据库设置密码,秘密将在状态文件中以 pain text 的形式结束。

    这是 github Storing sensitive values in state files 上一个长期未解决的问题。

    因此,如果您想手动执行此操作,然后使用数据源获取机密,则必须保护您的状态文件,通常通过使用远程后端来完成(例如 S3)具有严格的访问控制。另一种方法是再次不访问 TF 中的秘密值。相反,您可以使用 local-exec 来使用 AWS CLI 或 SDK 来获取密钥,并在需要时使用它。或者完全在 TF 之外“手动”(使用 AWS CLI 或 SDK)。

    更新

    关于Hashicorp Vault

    Vault 管理员可以使用 Terraform 来配置 Vault 并使用机密填充它。在这种情况下,与配置相关的状态和任何计划都必须小心存储和通信,因为它们将在 cleartext 中包含写入 Vault 的任何值。

    目前 Terraform 没有通过配置提供的密文编辑或保护机制

    【讨论】:

    • 如果我们使用hashicorp vault 来保存秘密,它不会解决问题吗? @marcin
    • @Prashanna 可悲的是,它也不是那么简单。我更新了答案。
    • 感谢详细解答,只是一个后续问题,我目前正在使用创建一个空秘密并在AWS控制台中手动添加凭据的方法,我想知道在生产环境中,我们之后应用 terraform 并在 AWS prod 帐户中创建一个空密钥,我们必须手动添加凭证,对吗?这是否会导致任何问题,因为我的理解是我们希望部署尽可能自动化。
    • @Cecilia 没问题。 “手动”在某种意义上,在 TF 之外。因此,您可以通过 AWS CLI 或 SDK 完全自动化它。如果答案有帮助,我们将不胜感激。
    猜你喜欢
    • 2022-11-02
    • 2020-12-04
    • 1970-01-01
    • 2021-06-14
    • 2021-10-07
    • 2019-10-31
    • 2020-10-01
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多