一:背景
每个人都想将自己的敏感数据以加密格式存储在一个安全的地方。例如我们的数据库的账号密码,不能以纯文本的方式来记录。让我们利用Mozilla SOPS以一种安全的方式实现它。SOPS支持将文件加密为二进制文件,除此之外,它还具有只加密配置文件值的特性,只要它们是正确的格式,如JSON、YAML、.env或.ini。
SOPS是一个加密文件编辑器,支持YAML, JSON, ENV, INI和BINARY格式,并可以通过AWS KMS, GCP KMS, Azure密钥库、PGP、age等加密。
sops官方github https://github.com/mozilla/sops
二:安装
确定以下的前提条件都以满足
1)安装terraform
Install | Terraform | HashiCorp Developer
2)安装age
你可以在这里GitHub - FiloSottile/age: A simple, modern and secure encryption tool (and Go library) with small explicit keys, no config options, and UNIX-style composability.的readme中找到适合您系统的安装方式。
我是通过choco在windons系统上进行安装的。
通过age-keygen -o key.txt 命令产生一个public key”SOPS_AGE_RECIPIENTS"和private key"SOPS_AGE_KEY", 你可以找到这两个值在你当前目录下的key.txt文件中。
3)安装sops
你可以在这里Releases · mozilla/sops · GitHub的readme中找到适合您系统的安装方式。
我在windons上还是使用的choco install sops进行的安装
sops/README.rst at master · mozilla/sops · GitHub 这里可以查看age加密方式的一些说明
二:本地加密及测试
以下流程描述了如何在本地local进行加密
export SOPS_AGE_RECIPIENTS=xxxx ##在key.txt中
export SOPS_AGE_KEY=xxxxx ##在key.txt中
例如我有一个examplefile-sensitive.yaml的文件内容如下
mysql_accout: root
mysql_password: adasdsewqweqwasd!@3
加密
sops --e examplefile-sensitive.yaml> examplefile-sensitive.enc.yaml
解密
sops -d examplefile-sensitive.enc.yaml >examplefile-sensitive.yaml
三:sops与terraform的集成
在terraform中引用sops,可以参照GitHub - carlpett/terraform-provider-sops: A Terraform provider for reading Mozilla sops files
terraform {
required_providers {
sops = {
source = "carlpett/sops"
version = "~> 0.7.0"
}
}
}
可以在terraform的官网看一下sops_file(即你的加密文件)的写法Terraform Registry
data "sops_file" "demo-secret" {
source_file = "demo-secret.enc.json"
}
您可以通过以下的方式来将敏感信息上传并存储到terraform 的variable中
resource "tfe_variable" "example" {
for_each = nonsensitive(toset([for k, v in data.sops_file.example_file.data : k]))
key = each.key
value = data.sops_file.example_file.data[each.key]
sensitive = true
category = "terraform"
variable_set_id = tfe_variable_set.example_workspace.id
}
当然我们需要在terraform的variable中手动先配置变量SOPS_AGE_KEY