차트 보안(Chart Security)

헬름 + 쿠버네티스 가이드북
이민석's avatar
May 25, 2024
차트 보안(Chart Security)

헬름 + 쿠버네티스 가이드북은 Bharath Thippireddy의 Helm Kubernetes Packaging Manager for Developers and DevOps을 보고 작성되었습니다.

가이드북의 전체 목차 및 인덱싱은 헬름 + 쿠버네티스 가이드북 문서를 참고해주세요.

개요

  1. 차트 생성과 사용자 그리고 보안 관점(PGP, Pretty Good Privacy)

  2. PGP 키 생성기 설치하기(Install PGP Key Generator)

  3. PGP 키 생성하기(Generate PGP Key)

  4. 서명하고 검증하기(Sign and Verify)

  5. 설치 중에 인증하기(Verify during Install)

  6. 차트 보안(Chart Security)

차트 생성자와 사용자 그리고 보안 관점(PGP, Pretty Good Privacy)

일반적으로 헬름 차트는 생성자(Provider)와 사용자(User)가 따로 구분됩니다. 따라서 헬름 차트 보안도 2가지 측면을 고려하여 구성해야 합니다.

  • 사용자(User) : Provenance, Integrity

  • 공급자(Provider) : PGP(Private Key, Public Key)

공급자(Provider)는 기존에는 <CHART>.tgz 패키지 파일만을 공급했습니다.
하지만 공급자가 PGP(Pretty Good Privacy)를 이용해서 <CHART>.tgz.prov 파일을 함께 생성하게 됩니다.

사용자(User)는 헬름 저장소(Helm Repository)에서 가져온 차트 관련 파일을 2개 가져옵니다.

  • <CHART>.tgz

  • <CHART>.tgz.prov

그리고 공급자에게 받아온 Public Key를 이용해서 검증 절차를 진행하게 됩니다.

  • Before : helm install

  • After : helm install --verify

PGP 키 생성기 설치하기(Install PGP Key Generator)

PGP 키를 생성하기 위한 가장 쉬운 방법은 오픈 소스를 사용하는 것입니다.

저는 chocolatey를 이용해서 설치를 진행했습니다.

choco install gnupg

이후 설치를 확인해주세요.

gpg --version

PGP 키 생성하기(Generate PGP Key)

아래의 명령어를 통해서 Interactive하게 gpg public / private key를 생성할 수 있습니다.

gpg --full-generate-key

생성하고 나면 아래와 같이 파일 경로를 안내해줍니다.

gpg: ~\\AppData\\Roaming\\gnupg\\trustdb.gpg: trustdb created
gpg: directory '~\\AppData\\Roaming\\gnupg\\openpgp-revocs.d' created
gpg: revocation certificate stored as '~\\AppData\\Roaming\\gnupg\\openpgp-revocs.d\\<CODE>.rev'
public and secret key created and signed.

pub   rsa3072 2024-05-25 [SC]
      <CODE>
uid                      <USERNAME>(this is sample public / priavet key) <USEREMAIL@EMAIL.com>
sub   rsa3072 2024-05-25 [E]

그리고 키를 이렇게 꺼낼 수 있습니다.

gpg --export-secret-keys > ~\\AppData\\Raoming\\gnupg\\seccring.gpg

서명하고 검증하기(Sign and Verify)

  1. 키 꺼내기

    gpg --export-secret-keys > ~\\AppData\\Roaming\\gnupg\\secring.gpg
  2. 헬름 서명하기

    1. 입력

      helm package --sign --key workstation19961002@gmail.com --keyring ~/.gnupg/secring.gpg firstchart -d chartsrepo
    2. 출력

      Successfully packaged chart and saved it to: chartsrepo/firstchart-0.1.0.tgz
  3. 핼름 검증하기

    1. 입력

      helm verify chartsrepo/firstchart-0.1.0.tgz --keyring ~/.gnupg/secring.gpg
    2. 출력

      Signed by: unchaptered (for testing) <workstaiton19961002@gmail.com>
      Using Key With Fingerprint: ****
      

설치 중에 인증하기(Verify during Install)

  1. 로컬 저장소 실행하기

    python3 -m http.server --bind 127.0.0.1 8080
  2. 헬름 저장소 인덱싱

    helm repo index chartrepo
  3. 헬름 저장소 보기

    cd chartrepo
  4. 헬름 릴리즈하기

    helm install --verify --keyring ~/.gnupg/secring.gpg temprelease localrepo

    만약 Verify 과정에서 실패하였다면, 에러가 발생할 것입니다.

과제

1. Install gnupg

choco install gnupg  # Windows11

brew install gnupg    # MacOS

apt install gnupg       # Ubuntu

2. Check gnupg

gpg --version

3. Generate Public & Private Key using gnupg

gpg --full-generate-key

4. Export secring key

gpg --export-secret-keys > ~/secring.gpg

5. Index

helm repo index chartrepo

6. Create helm package using Private Key

helm package --sign --key workstation19961002@gmail.com --keyring ~/.gnupg/secring.gpg firstchart -d chartsrepo

7. Index

helm repo index chartrepo

8. Run helm local repository

python3 -m http.server --bind 127.0.0.1:8080

9. Install

helm install --verify --keyring ~/.gnupg/secring.gpg temp-release localrepo

Share article

Unchaptered