【问题标题】:How can I insure that my retrieval of secrets is secure?如何确保我的机密检索是安全的?
【发布时间】:2021-04-03 15:33:13
【问题描述】:

目前我正在使用 Terraform 和 Aws Secrets Manager 来存储和检索机密,我想了解一下我的实施是否安全,如果不安全,我该如何使其更安全。让我用我的尝试来说明。

secrets.tf 我创建了一个类似的秘密(这需要通过定位来实现):

resource "aws_secretsmanager_secret" "secrets_of_life" {
  name = "top-secret"
}

然后我转到控制台并在 AWS Secrets manager 中手动设置密钥。

然后我检索secrets.tf 中的秘密,例如:

data "aws_secretsmanager_secret_version" "secrets_of_life_version" {
  secret_id = aws_secretsmanager_secret.secrets_of_life.id
}

locals {
  creds = jsondecode(data.aws_secretsmanager_secret_version.secrets_of_life.secret_string)
}

然后我继续使用秘密(例如将它们导出为 K8s 秘密),例如:

resource "kubernetes_secret" "secret_credentials" {
  metadata {
    name      = "kubernetes_secret"
    namespace = kubernetes_namespace.some_namespace.id
  }
  data = {
    top_secret = local.creds["SECRET_OF_LIFE"]
  }
  type = "kubernetes.io/generic"
}

值得一提的是,我远程存储了tf state。我的实施安全吗?如果没有,我怎样才能使它更安全?

【问题讨论】:

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


    【解决方案1】:

    是的,我可以确认它是安全的,因为您完成了以下操作:

    • 您的代码中包含纯文本秘密。
    • 您的机密存储在一个专用的机密存储中,该存储执行加密和严格的访问控制。
    • 一切都在代码本身中定义。不需要额外的手动步骤或包装脚本。
    • 秘密管理器支持轮换秘密,这在秘密被泄露时很有用。

    我唯一想知道的是使用支持像 s3 这样的加密的 Terraform 后端,并避免将状态文件添加到源代码管理中。

    【讨论】:

      【解决方案2】:

      看起来不错,因为 @asri 认为它是一个很好的安全实现。

      暴露的风险将处于远程状态。秘密可能会以纯文本形式存储在那里。假设您使用的是 S3,请确保存储桶已加密。如果您与其他开发人员共享 tf 状态访问权限,他们可能有权访问远程状态文件中的这些值。

      来自https://blog.gruntwork.io/a-comprehensive-guide-to-managing-secrets-in-your-terraform-code-1d586955ace1

      这些秘密仍然会以纯文本形式出现在 terraform.tfstate 中! 6 年多来,这一直是一个悬而未决的问题,还没有明确的一流解决方案计划。有一些解决方法可以清除您的状态文件中的秘密,但这些方法很脆弱,并且可能会随着每个新的 Terraform 版本而中断,因此我不推荐它们。

      【讨论】:

        【解决方案3】:

        您好,我正在做类似的事情,这里有一些想法:

        1. 第二次运行 Terraform 时,秘密将以纯文本形式存储在 S3 中的状态文件中,S3 是否足够安全以存储这些敏感字符串?

        2. 我的工作是使用类似的方法:运行 terraform 创建一个空的秘密/虚拟字符串作为占位符 -> 手动更新为真实凭据 -> 再次运行 Terraform 以告诉资源使用更新的凭据。问题是,当我们在生产中部署时,我们希望流程尽可能自动化,这种方法并不理想,我还没有找到更好的方法。

        如果有人有更好的想法,请随时在下面发表评论。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-26
          • 1970-01-01
          • 2012-09-09
          • 2016-01-25
          • 1970-01-01
          • 2018-07-28
          • 2019-11-15
          • 1970-01-01
          相关资源
          最近更新 更多