SOPS對配置文件數(shù)據(jù)進(jìn)行加密

SOPS對數(shù)據(jù)進(jìn)行加密

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

GPG進(jìn)行加密

  1. 生成GPG文件
$ gpg --generate-key # 根據(jù)引導(dǎo)生成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: mpan@sample.com
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 <mpan@nvidia.com>
sub   rsa3072 2021-04-07 [E] [expires: 2023-04-07]
  1. 使用SOPS對文件a.yaml進(jìn)行加密
$ 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來設(shè)置默認(rèn)加密規(guī)則
$ cat <<EOF > .sops.yaml
creation_rules:
        - pgp: 'FA21E3EDC58BA05535435756543DF0088828FFCC'
EOF

公鑰用于加密,私鑰用于解密。它們的導(dǎo)入與導(dǎo)出對于文件的傳輸與交流很重要。

  1. 公鑰導(dǎo)入與導(dǎo)出
 $ gpg --export --armor "mpan@sample.com" > personal_gpg.pub
$ gpg --import personal_gpg.pub
  1. 私鑰的導(dǎo)入與導(dǎo)出
gpg --export-secret-key -a "mpan@sample.com" > personal_gpg
gpg --import  personal_gpg
  1. 刪除公鑰與私鑰
$ gpg --delete-keys FA21E3EDC58BA05535435756543DF0088828FFCC
$ gpg --delete-secret-keys FA21E3EDC58BA05535435756543DF0088828FFCC
  1. 保存gpg密鑰的網(wǎng)站(可選)
    KeyBase:https://keybase.io/
    KeysOpenPGPhttps://keys.openpgp.org/

KMS加密

  1. 在aws平臺的KMS服務(wù)創(chuàng)建一個密鑰,獲取它的arn ID
  2. 文件加密時使用--kms設(shè)置加密密鑰。前提是當(dāng)前aws客戶端已經(jīng)設(shè)置了認(rèn)證私鑰,并賦予了訪問該kms密鑰的權(quán)限
$ 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

使用Age加密

Age 是一個簡單,現(xiàn)代和安全的文件加密工具。

  1. 安裝
$ brew tap filippo.io/age https://filippo.io/age
$ brew install age
  1. 生成密鑰對
$ age-keygen -o key.txt
Public key: age1st0m5a72gtlk3pz3fnvy08huq8d9llut2vnjwxzkeudejkc0fs9s6dj9ev
  1. 使用公鑰對數(shù)據(jù)進(jìn)行加密
$ sops -a age1st0m5a72gtlk3pz3fnvy08huq8d9llut2vnjwxzkeudejkc0fs9s6dj9ev -e secrets.yaml > secrets_enc.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

需要設(shè)置GPG_TTY環(huán)境變量

export GPG_TTY=$(tty)

參考文章

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容