SOPS對配置文件數據進行加密

SOPS 是由Mozilla 開發的一款開源的文本編輯工具,它支持對YAML, JSON, ENV, INI 和BINARY 文本格式的文件進行編輯,並利用AWS KMS, GCP KMS, Azure Key Vault 或PGP 等加密方式對編輯的文件進行加密和解密。
在當前它還可以與heml secret作用,爲Kubernetes的secret資源數據進行加密。
本篇主要介紹sops的基本用法,而helm secret的使用不做介紹。

GPG進行加密

  1. 生成GPG文件
$ gpg --generate-key # 根據引導生成gpg加密文件

或者自動生成

gpg --batch --generate-key <<EOF
%echo Generating a basic OpenPGP key for HELM Secret
Key-Type: RSA
Key-Length: 4096
Subkey-Type: RSA
Subkey-Length: 4096
Name-Real: Michael
Name-Comment: Personal PGP
Name-Email: [email protected]
Expire-Date: 0
%no-ask-passphrase
%no-protection
%commit
%echo done
EOF
  1. 查看GPG列表
$ gpg -k
/home/vagrant/.gnupg/pubring.kbx
--------------------------------
pub   rsa3072 2021-04-07 [SC] [expires: 2023-04-07]
      FA21E3EDC58BA05535435756543DF0088828FFCC
uid           [ultimate] Michael <[email protected]>
sub   rsa3072 2021-04-07 [E] [expires: 2023-04-07]
  1. 使用SOPS對文件a.yaml進行加密
$ echo "A: hello" > a.yaml
$ sops --gpg FA21E3EDC58BA05535435756543DF0088828FFCC -e file.yaml > file_encode.yaml
  1. 解密文件
$ sops -d file_encode.yaml 
$ #或者 使用sops file_encode.yaml對加密文件直接編輯
  1. 通過.sops.yaml來設置默認加密規則
$ cat <<EOF > .sops.yaml
creation_rules:
        - pgp: 'FA21E3EDC58BA05535435756543DF0088828FFCC'
EOF

公鑰用於加密,私鑰用於解密。它們的導入與導出對於文件的傳輸與交流很重要。

  1. 公鑰導入與導出
 $ gpg --export --armor "[email protected]" > personal_gpg.pub
$ gpg --import personal_gpg.pub
  1. 私鑰的導入與導出
gpg --export-secret-key -a "[email protected]" > personal_gpg
gpg --import  personal_gpg
  1. 刪除公鑰與私鑰
$ gpg --delete-keys FA21E3EDC58BA05535435756543DF0088828FFCC
$ gpg --delete-secret-keys FA21E3EDC58BA05535435756543DF0088828FFCC
  1. 保存gpg密鑰的網站(可選)
    KeyBase:https://keybase.io/
    KeysOpenPGPhttps://keys.openpgp.org/

KMS加密

  1. 在aws平臺的KMS服務創建一個密鑰,獲取它的arn ID
  2. 文件加密時使用--kms設置加密密鑰。前提是當前aws客戶端已經設置了認證私鑰,並賦予了訪問該kms密鑰的權限
$ sops --kms "arn:aws:kms:ap-east-1:982938942:key/f2232fa3-7678-8922-8778-f2232fa3" -e file.yaml > file_encode.yaml
  1. 解密文件方式一致
$ sops -d file_encode.yaml

錯誤處理

  1. 在解密時報如下錯誤
vagrant@ubuntu-focal:~$ sops a2.yaml
Failed to get the data key required to decrypt the SOPS file.

Group 0: FAILED
  FA21E3EDC58BA05535435756543DF0088828FFCC: FAILED
    - | could not decrypt data key with PGP key:
      | golang.org/x/crypto/openpgp error: Could not load secring:
      | open /home/vagrant/.gnupg/secring.gpg: no such file or
      | directory; GPG binary error: exit status 2

需要設置GPG_TTY環境變量

export GPG_TTY=$(tty)

參考文章

Helm 插件之 helm-secrets:利用 PGP 加密你的 Values 文件
Cannot decrypt with GPG 2.2.5 and SOPS 3.0.0 #304

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章