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

一:背景

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

DevOps - (3)使用SOPS 和Terraform来加密/解密敏感信息文件_第1张图片

通过age-keygen -o key.txt 命令产生一个public key”SOPS_AGE_RECIPIENTS"和private key"SOPS_AGE_KEY", 你可以找到这两个值在你当前目录下的key.txt文件中。

DevOps - (3)使用SOPS 和Terraform来加密/解密敏感信息文件_第2张图片

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

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

解密

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

你可能感兴趣的:(DevOps,terraform,云原生)