DevOps - (3)使用SOPS 和Terraform来加密/解密敏感信息文件

文章介绍了如何使用Mozilla的SOPS工具来加密敏感数据,如数据库密码,支持YAML、JSON等多种格式。SOPS可通过AWSKMS、GCPKMS等服务进行加密。在Windows上,使用choco安装age和sops。文章还展示了如何在本地加密文件,以及如何在Terraform中集成SOPS来读取加密文件并将其作为变量使用。
摘要由CSDN通过智能技术生成

一:背景

每个人都想将自己的敏感数据以加密格式存储在一个安全的地方。例如我们的数据库的账号密码,不能以纯文本的方式来记录。让我们利用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Proficloud&Greenpro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值