Mozilla SOPS를 사용하여 파일 암호화

9189 단어

SOPS: 비밀 작전



sops is an editor of encrypted files that supports YAML, JSON, ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault, age, and PGP.



설치 중


  • stable releases
  • brew install sops

  • PGP를 사용한 암호화



    1. 키 생성




    export GPG_NAME="my-key"
    export GPG_COMMENT="sops secrets"
    
    gpg --batch --full-generate-key <<EOF
    %no-protection
    Key-Type: 1
    Key-Length: 4096
    Subkey-Type: 1
    Subkey-Length: 4096
    Expire-Date: 0
    Name-Comment: ${GPG_COMMENT}
    Name-Real: ${GPG_NAME}
    EOF
    


  • 키 이름 검색

  • gpg --list-secret-keys "${GPG_NAME}"
    sec   rsa4096 2022-09-15 [SCEA]
          0076DA32A6523CABC384933A8C755EF5C4FB4CC5
    uid           [ultimate] my-key (sops secrets)
    ssb   rsa4096 2022-09-15 [SEA]
    


  • GPG 키 지문을 환경 변수로 저장

  • export GPG_ID=0076DA32A6523CABC384933A8C755EF5C4FB4CC5
    


    팀에서 SOPS를 사용하여 비밀을 로컬에서 암호화하거나 해독해야 하는 경우

    public key using for encrypt
    private key using for decrypt


  • 키를 내보내려면

  • gpg --export -a "${GPG_ID}" > public.key
    gpg --export-secret-key -a "${GPG_ID}" > private.key
    


  • 키를 가져오려면

  • gpg --import public.key
    gpg --import private.key
    


    2 더미 kube 비밀을 암호화하자



    secret.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: MWYyZDFlMmU2N2Rm
    


    암호화




    sops -e secrets.yaml > secrets.enc.yaml
    


    GPG 키가 여러 개인 경우 there are 3 ways
  • SOPS_PGP_FP env 변수 사용

  • export SOPS_PGP_FP=0076DA32A6523CABC384933A8C755EF5C4FB4CC5
    


  • .sops.yaml(프로젝트 디렉토리의 루트 수준)을 설정합니다.

  • creation_rules:
            - pgp: '0076DA32A6523CABC384933A8C755EF5C4FB4CC5'
    


  • 암호화할 GPG 키 ID 지정

  • sops -e -p 0076DA32A6523CABC384933A8C755EF5C4FB4CC5 secrets.yaml > secrets.enc.yaml
    


    복호화




    sops -d secrets.enc.yaml > secrets.yaml
    


    AWS KMS를 사용하여 암호화



    이에 대한 전제 조건은 다음과 같습니다.
  • KMS 키를 사용할 준비가 되었습니다.



  • Correctly configured AWS credentials 예:

  • [default]
    aws_access_key_id = <access-key-id>
    aws_secret_access_key = <access-key>
    
    [kmsuser]
    aws_access_key_id = <kmsuser-access-key-id>
    aws_secret_access_key = <kmsuer-access-key>
    


    sops 구성 설정



    There are 3 ways sops 구성을 설정합니다. 즉, sops에게 사용할 키, 사용할 프로필 및 역할을 알려줍니다.
  • SOPS_KMS_ARN env 변수 사용

  • export SOPS_KMS_ARN="arn:aws:kms:us-east-2:270179619257:key/d8bf4685-590e-49b6-8c05-abfabff7aa96"
    


  • .sops.yaml(프로젝트 디렉토리의 루트 수준)을 설정합니다.

  • creation_rules:
            - kms: 'arn:aws:kms:us-east-2:270179619257:key/d8bf4685-590e-49b6-8c05-abfabff7aa96'
    


  • 암호화할 kms arn 지정

  • sops -e --kms "arn:aws:kms:us-east-2:270179619257:key/d8bf4685-590e-49b6-8c05-abfabff7aa96" secrets.yaml > secrets.enc.yaml
    


    암호화




    sops -e secrets.yaml > secrets.enc.yaml
    


    복호화




    sops -d secrets.enc.yaml > secrets.yaml
    


    CI



    CI 워크플로에서 sops 암호화된 비밀을 사용하는 방법에는 여러 가지가 있습니다.

    가장 기본적인 방법은 sops를 설치하고 복호화한 파일을 클러스터에 적용하는 것입니다.

    Github 작업




    - name: Sops Binary Installer
      uses: mdgreenwald/[email protected]
      with:
        version: '<version>' # default is latest stable
      id: install
    


    그 다음에

    run: |
      sops -d secrets.enc.yaml | kubectl apply -f -
    


    그러나 일종의 매니페스트 관리 도구를 사용하고 해당 생태계 내에서 비밀이 작동하기를 원하는 것과 가장 비슷합니다. 이를 달성하기 위해 sops용 래퍼가 있습니다.
  • helm-secrets
  • ksops

  • Argo CD 통합


  • helm-secrets
  • ksops

  • 참조


  • SOPS https://github.com/mozilla/sops#sops-secrets-operations
  • SOPS의 비밀
  • KSOPS https://github.com/viaduct-ai/kustomize-sops#ksops---a-flexible-kustomize-plugin-for-sops-encrypted-resource
  • 좋은 웹페이지 즐겨찾기