目前,我正在使用Terraform和Aws秘密管理器来存储和检索秘密,我想了解一下我的实现是否安全,如果不是,我如何使它更安全。让我用我尝试过的东西来说明一下。
在secrets.tf
中,我创建了一个类似的秘密(这需要通过目标实现):
resource "aws_secretsmanager_secret" "secrets_of_life" {
name = "top-secret"
}
然后,我转到控制台,在AWS秘密管理器中手动设置秘密。
然后,我在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
。我的实现安全吗?如果没有,我怎样才能使它更安全?
发布于 2020-12-25 19:52:54
是的,我可以确认它是安全的,因为您完成了以下工作:
从代码中提取
我唯一想知道的是使用Terraform后端,它支持像s3这样的加密,并避免将状态文件与您的源代码管理相混淆。
发布于 2020-12-25 20:17:05
看起来不错,就像@asri建议的那样,它是一个很好的安全实现。
暴露的风险将处于偏远的状态。有可能这个秘密将以纯文本形式储存在那里。假设您使用的是S3,请确保存储桶是加密的。如果您与其他开发人员共享tf状态访问,他们可能可以访问远程状态文件中的这些值。
这些秘密仍将以纯文本形式出现在terraform.tfstate中!这是一个开放的问题已经有6年多了,没有一个明确的计划,以一流的解决方案。有一些解决办法可以从您的状态文件中删除机密,但是这些方法很脆弱,很可能会破坏每一个新的Terraform版本,所以我不推荐它们。
发布于 2021-03-18 11:06:09
嗨,我在做类似的事情,这里有一些想法:
如果有人有更好的想法,请在下面留下评论。
https://stackoverflow.com/questions/65450899
复制相似问题