SOPS对配置文件数据进行加密

作者: 潘晓华Michael | 来源:发表于2021-04-07 14:03 被阅读0次
    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: 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进行加密
    $ 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 "mpan@sample.com" > personal_gpg.pub
    $ gpg --import personal_gpg.pub
    
    1. 私钥的导入与导出
    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密钥的网站(可选)
      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
    

    使用Age加密

    Age 是一个简单,现代和安全的文件加密工具。

    1. 安装
    $ brew tap filippo.io/age https://filippo.io/age
    $ brew install age
    
    1. 生成密钥对
    $ age-keygen -o key.txt
    Public key: age1st0m5a72gtlk3pz3fnvy08huq8d9llut2vnjwxzkeudejkc0fs9s6dj9ev
    
    1. 使用公钥对数据进行加密
    $ 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
    

    需要设置GPG_TTY环境变量

    export GPG_TTY=$(tty)
    

    参考文章

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

    相关文章

      网友评论

        本文标题:SOPS对配置文件数据进行加密

        本文链接:https://www.haomeiwen.com/subject/oafukltx.html