InfoGrab DocsInfoGrab Docs

복구 키 관리

요약

복구 키는 OpenBao의 비상 자격 증명입니다. 복구 키는 시크릿 조회나 네임스페이스 프로비저닝 같은 일반적인 운영 작업에는 사용되지 않습니다. 복구 키로는 OpenBao 데이터베이스에 저장된 데이터를 복호화할 수 없습니다.

복구 키는 OpenBao의 비상 자격 증명입니다. 기본 JWT 인증 방식을 사용할 수 없게 되었을 때 임시 루트 토큰을 생성하는 데 사용합니다.

복구 키는 시크릿 조회나 네임스페이스 프로비저닝 같은 일반적인 운영 작업에는 사용되지 않습니다. 높은 권한을 가진 자격 증명으로 취급하고 안전하게 보관하세요.

복구 키로는 OpenBao 데이터베이스에 저장된 데이터를 복호화할 수 없습니다. OpenBao의 모든 데이터는 구성된 언실(unseal) 메커니즘, 즉 gitlab-openbao-unseal 쿠버네티스 시크릿에 저장된 정적 키 또는 외부 KMS에 의해 보호됩니다. 언실 메커니즘은 복구 키와 별도로 백업하세요.

이 페이지의 명령을 실행하려면 toolbox pod의 이름이 필요합니다. 확인하려면 다음을 실행하세요:

kubectl get pods -n gitlab -lapp=toolbox

이후 명령에서 <toolbox-pod-name> 자리에 해당 pod 이름을 사용하세요.

복구 키 저장#

인시던트 발생 전, 초기 설정 단계에서 이 명령을 한 번 실행하세요:

kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
  gitlab-rake "gitlab:secrets_management:openbao:recovery_key:store"

이 명령은 OpenBao에서 복구 키를 생성하고 GitLab 데이터베이스에 암호화하여 저장합니다.

복구 키는 한 번만 생성할 수 있습니다. recovery_key:store를 두 번 실행하거나 recovery_key:fetch를 실행한 후에는 다시 실행할 수 없습니다.

이 명령을 실행하기 전까지, OpenBao는 pod를 재시작할 때마다 다음 경고를 로그에 기록합니다: [WARN] core: post-unseal upgrade seal keys failed: error="no recovery key found". 키를 저장하면 경고가 사라집니다.

저장된 복구 키 조회#

GitLab 데이터베이스에서 복구 키를 가져와 확인하려면 다음을 실행하세요:

kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
  gitlab-rake "gitlab:secrets_management:openbao:recovery_key:show"

이 명령은 키를 평문으로 표시하기 전에 확인을 요청합니다. 출력 결과를 안전하게 보관하세요. 로그에 기록하거나 보안 채널 외부에서 공유하지 마세요.

복구 키를 저장하지 않고 가져오기#

recovery_key:fetch를 사용하면 복구 키를 생성하여 GitLab 데이터베이스에 저장하지 않고 터미널에 표시합니다. 비밀번호 관리자나 하드웨어 보안 모듈 같은 외부 시스템에 키를 저장할 때 이 작업을 사용하세요.

복구 키는 한 번만 생성할 수 있습니다. recovery_key:fetch를 두 번 실행하거나 recovery_key:store를 실행한 후에는 다시 실행할 수 없습니다.

kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
  gitlab-rake "gitlab:secrets_management:openbao:recovery_key:fetch"

이 작업은 키를 생성하여 표시하기 전에 확인을 요청합니다. 키는 평문으로 표시됩니다.

복구 키로 루트 토큰 생성#

JWT 인증 재구성이나 언실 마이그레이션 같은 권한 있는 OpenBao 작업을 수행해야 할 때 복구 키를 사용하여 임시 루트 토큰을 생성하세요.

필요한 작업을 완료한 즉시 루트 토큰을 폐기하세요. 루트 토큰은 모든 OpenBao 작업 및 네임스페이스에 대한 무제한 접근 권한을 가집니다.

bao 바이너리는 OpenBao pod 내부에서 사용할 수 있습니다. 모든 명령은 kubectl exec로 실행하세요. 포트 포워딩은 필요하지 않습니다.

  • 복구 키를 가져오세요:

    kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
      gitlab-rake "gitlab:secrets_management:openbao:recovery_key:show"
    

    recovery_key:fetch를 사용하여 키를 외부에 저장한 경우, 해당 위치에서 키를 가져오세요.

  • OpenBao pod 이름을 확인하세요:

    kubectl get pods -n gitlab -l app.kubernetes.io/name=openbao -o name
    

    이후 단계에서 <openbao-pod-name>을 이 명령의 출력으로 교체하세요. 예: pod/gitlab-openbao-0.

  • OTP를 생성하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -generate-otp"
    

    이후 명령에서 <otp>를 이 출력으로 교체하세요.

  • 루트 생성을 초기화하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -init -otp=<otp>"
    

    성공적인 응답에는 Started: trueNonce 값이 포함됩니다. 이후 단계에서 <nonce>를 이 Nonce 값으로 교체하세요.

  • 복구 키를 제출하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "echo '<recovery_key>' | BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -nonce=<nonce>"
    

    OpenBao는 단일 복구 키 공유로 구성되어 있으므로 작업이 즉시 완료됩니다. 성공적인 응답에는 Complete: trueEncoded Token 값이 포함됩니다. 다음 단계에서 <encoded_token>을 이 토큰 값으로 교체하세요.

  • 루트 토큰을 디코딩하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -decode=<encoded_token> -otp=<otp>"
    

    이후 단계에서 <root_token>을 디코딩된 루트 토큰으로 교체하세요.

  • 루트 토큰이 작동하는지 확인하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=<root_token> bao token lookup"
    

    성공적인 응답에는 policies [root]가 포함됩니다.

  • 필요한 권한 작업을 수행하세요.

  • 루트 토큰을 폐기하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=<root_token> bao token revoke -self"
    

복구 키 관리

GitLab v19.1
원문 보기
요약

복구 키는 OpenBao의 비상 자격 증명입니다. 복구 키는 시크릿 조회나 네임스페이스 프로비저닝 같은 일반적인 운영 작업에는 사용되지 않습니다. 복구 키로는 OpenBao 데이터베이스에 저장된 데이터를 복호화할 수 없습니다.

복구 키는 OpenBao의 비상 자격 증명입니다. 기본 JWT 인증 방식을 사용할 수 없게 되었을 때 임시 루트 토큰을 생성하는 데 사용합니다.

복구 키는 시크릿 조회나 네임스페이스 프로비저닝 같은 일반적인 운영 작업에는 사용되지 않습니다. 높은 권한을 가진 자격 증명으로 취급하고 안전하게 보관하세요.

복구 키로는 OpenBao 데이터베이스에 저장된 데이터를 복호화할 수 없습니다. OpenBao의 모든 데이터는 구성된 언실(unseal) 메커니즘, 즉 gitlab-openbao-unseal 쿠버네티스 시크릿에 저장된 정적 키 또는 외부 KMS에 의해 보호됩니다. 언실 메커니즘은 복구 키와 별도로 백업하세요.

이 페이지의 명령을 실행하려면 toolbox pod의 이름이 필요합니다. 확인하려면 다음을 실행하세요:

kubectl get pods -n gitlab -lapp=toolbox

이후 명령에서 <toolbox-pod-name> 자리에 해당 pod 이름을 사용하세요.

복구 키 저장#

인시던트 발생 전, 초기 설정 단계에서 이 명령을 한 번 실행하세요:

kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
  gitlab-rake "gitlab:secrets_management:openbao:recovery_key:store"

이 명령은 OpenBao에서 복구 키를 생성하고 GitLab 데이터베이스에 암호화하여 저장합니다.

복구 키는 한 번만 생성할 수 있습니다. recovery_key:store를 두 번 실행하거나 recovery_key:fetch를 실행한 후에는 다시 실행할 수 없습니다.

이 명령을 실행하기 전까지, OpenBao는 pod를 재시작할 때마다 다음 경고를 로그에 기록합니다: [WARN] core: post-unseal upgrade seal keys failed: error="no recovery key found". 키를 저장하면 경고가 사라집니다.

저장된 복구 키 조회#

GitLab 데이터베이스에서 복구 키를 가져와 확인하려면 다음을 실행하세요:

kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
  gitlab-rake "gitlab:secrets_management:openbao:recovery_key:show"

이 명령은 키를 평문으로 표시하기 전에 확인을 요청합니다. 출력 결과를 안전하게 보관하세요. 로그에 기록하거나 보안 채널 외부에서 공유하지 마세요.

복구 키를 저장하지 않고 가져오기#

recovery_key:fetch를 사용하면 복구 키를 생성하여 GitLab 데이터베이스에 저장하지 않고 터미널에 표시합니다. 비밀번호 관리자나 하드웨어 보안 모듈 같은 외부 시스템에 키를 저장할 때 이 작업을 사용하세요.

복구 키는 한 번만 생성할 수 있습니다. recovery_key:fetch를 두 번 실행하거나 recovery_key:store를 실행한 후에는 다시 실행할 수 없습니다.

kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
  gitlab-rake "gitlab:secrets_management:openbao:recovery_key:fetch"

이 작업은 키를 생성하여 표시하기 전에 확인을 요청합니다. 키는 평문으로 표시됩니다.

복구 키로 루트 토큰 생성#

JWT 인증 재구성이나 언실 마이그레이션 같은 권한 있는 OpenBao 작업을 수행해야 할 때 복구 키를 사용하여 임시 루트 토큰을 생성하세요.

필요한 작업을 완료한 즉시 루트 토큰을 폐기하세요. 루트 토큰은 모든 OpenBao 작업 및 네임스페이스에 대한 무제한 접근 권한을 가집니다.

bao 바이너리는 OpenBao pod 내부에서 사용할 수 있습니다. 모든 명령은 kubectl exec로 실행하세요. 포트 포워딩은 필요하지 않습니다.

  • 복구 키를 가져오세요:

    kubectl exec -n gitlab -it -c toolbox <toolbox-pod-name> -- \
      gitlab-rake "gitlab:secrets_management:openbao:recovery_key:show"
    

    recovery_key:fetch를 사용하여 키를 외부에 저장한 경우, 해당 위치에서 키를 가져오세요.

  • OpenBao pod 이름을 확인하세요:

    kubectl get pods -n gitlab -l app.kubernetes.io/name=openbao -o name
    

    이후 단계에서 <openbao-pod-name>을 이 명령의 출력으로 교체하세요. 예: pod/gitlab-openbao-0.

  • OTP를 생성하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -generate-otp"
    

    이후 명령에서 <otp>를 이 출력으로 교체하세요.

  • 루트 생성을 초기화하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -init -otp=<otp>"
    

    성공적인 응답에는 Started: trueNonce 값이 포함됩니다. 이후 단계에서 <nonce>를 이 Nonce 값으로 교체하세요.

  • 복구 키를 제출하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "echo '<recovery_key>' | BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -nonce=<nonce>"
    

    OpenBao는 단일 복구 키 공유로 구성되어 있으므로 작업이 즉시 완료됩니다. 성공적인 응답에는 Complete: trueEncoded Token 값이 포함됩니다. 다음 단계에서 <encoded_token>을 이 토큰 값으로 교체하세요.

  • 루트 토큰을 디코딩하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 bao operator generate-root -decode=<encoded_token> -otp=<otp>"
    

    이후 단계에서 <root_token>을 디코딩된 루트 토큰으로 교체하세요.

  • 루트 토큰이 작동하는지 확인하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=<root_token> bao token lookup"
    

    성공적인 응답에는 policies [root]가 포함됩니다.

  • 필요한 권한 작업을 수행하세요.

  • 루트 토큰을 폐기하세요:

    kubectl exec -n gitlab <openbao-pod-name> -- \
      sh -c "BAO_ADDR=http://127.0.0.1:8200 BAO_TOKEN=<root_token> bao token revoke -self"