봉인된 비밀 - 자체 키 가져오기 및 다중 클러스터 시나리오

Bitnami 봉인된 비밀에는 기본적으로 30일마다 키 순환이 수행되며 모든 봉인된 비밀 컨트롤러는 자체 개인 키를 생성합니다. 이로 인해 다중 클러스터 시나리오에 채택하기가 어렵습니다. 여러 클러스터에서 암호화/암호 해독을 위해 자신의 키 쌍을 사용하여 완화할 수 있습니다.


자체 키 쌍 사용
  • 준비

  • ❯ kubectl create ns sealed-secrets
    ❯ export PRIVATEKEY="acmetls.key"export PUBLICKEY="acmetls.crt"export NAMESPACE="sealed-secrets"export SECRETNAME="acme-keys"
    
    # Create key pair
    ❯ openssl req -x509 -nodes -newkey rsa:4096 -keyout "$PRIVATEKEY" -out "$PUBLICKEY" -subj "/CN=sealed-secret/O=sealed-secret"
    Generating a 4096 bit RSA private key
    .....++
    ......++
    writing new private key to 'acmetls.key'
    -----ls acme*
    acmetls.crt acmetls.key
    


  • 컨트롤러에 새 키를 준비하고 업데이트합니다.

  • ❯ kubectl create ns sealed-secrets
    namespace/sealed-secrets created
    
    # Create secret and label it as "active"
    ❯ kubectl -n "$NAMESPACE" create secret tls "$SECRETNAME" --cert="$PUBLICKEY" --key="$PRIVATEKEY"
    kubectl -n "$NAMESPACE" label secret "$SECRETNAME" sealedsecrets.bitnami.com/sealed-secrets-key=active
    secret/acme-keys created
    secret/acme-keys labeled
    
    # Install the controller
    ❯ helm upgrade --install ss-app sealed-secrets/sealed-secrets --namespace=sealed-secrets
    
    # delete existing key
    ❯ kubectl get pods -n sealed-secrets
    NAME                                     READY   STATUS    RESTARTS   AGE
    ss-app-sealed-secrets-556c68c858-qq5k6   1/1     Running   0          3m47s
    ❯ kubectl delete pod ss-app-sealed-secrets-556c68c858-qq5k6 -n sealed-secrets
    pod "ss-app-sealed-secrets-556c68c858-qq5k6" deleted
    
    # another instance of the pod will come up with the new "acme-keys"
    ❯ kubectl logs ss-app-sealed-secrets-556c68c858-gqpwf -n sealed-secrets
    2022/04/25 13:02:01 Starting sealed-secrets controller version: 0.17.4
    controller version: 0.17.4
    2022/04/25 13:02:01 Searching for existing private keys
    2022/04/25 13:02:02 ----- sealed-secrets-key5nhjv
    2022/04/25 13:02:02 ----- sealed-secrets-key98m56
    2022/04/25 13:02:02 ----- sealed-secrets-keyztj4v
    2022/04/25 13:02:02 ----- acme-keys
    2022/04/25 13:02:02 HTTP server serving on :8080
    


  • 새 키로 암호화

  • ❯ kubectl create secret generic secret-name --dry-run=client --from-literal=foo=bar -o yaml | kubeseal --controller-name=ss-app-sealed-secrets --controller-namespace=sealed-secrets -o yaml --cert=$PUBLICKEY | kubectl apply -f -
    sealedsecret.bitnami.com/secret-name created
    


  • 암호 해독 확인

  • ❯ kubectl logs ss-app-sealed-secrets-556c68c858-gqpwf -n sealed-secrets | tail -2
    2022/04/25 13:08:07 Updating default/secret-name
    2022/04/25 13:08:07 Event(v1.ObjectReference{Kind:"SealedSecret", Namespace:"default", Name:"secret-name", UID:"c9ee00ac-c974-43f7-9b7d-16cda1b516ff", APIVersion:"bitnami.com/v1alpha1", ResourceVersion:"57973", FieldPath:""}): type: 'Normal' reason: 'Unsealed' SealedSecret unsealed successfully
    
    ❯ kubectl get sealedsecrets.bitnami.com
    NAME          AGE
    secret-name   47s
    
    ❯ kubectl get secrets secret-name
    NAME          TYPE     DATA   AGE
    secret-name   Opaque   1      57s
    
    




    봉인된 비밀 컨트롤러를 생성하는 동안 비밀 회전 간격을 가지고 놀기
  • 컨트롤러에 대한 명령줄 인수에서 편집--key-renew-period=<value>(배포의 경우)
  • Helm
  • 을 통해 설치하는 동안 --set=keyrenewperiod=<value> 사용

    참고: keyrenewperiod=0는 키 회전을 중지합니다. 보기에는 쉬운 솔루션이지만 프로덕션 사용 사례에서는 권장되지 않습니다.

    좋은 웹페이지 즐겨찾기