파일 업로드
  1. base64hub
  2. 웹·토큰 도구
  3. .dockerconfigjson 디코더

이미지 pull secret용 .dockerconfigjson 디코더

kubernetes.io/dockerconfigjson Secret이나 그 Base64 값, 또는 ~/.docker/config.json을 붙여넣으면 어떤 레지스트리에 어떤 계정으로 로그인하는지 볼 수 있습니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 두 겹 Secret의 Base64와 auth 필드를 모두 디코딩 업데이트 2026. 10. 27.

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

pull secret을 디코딩하는 방법

  1. 다음 중 하나를 입력란에 붙여넣으세요.
    • kubectl get secret regcred -o yaml 출력
    • .dockerconfigjson의 Base64 값만
    • JSON 자체, 예를 들어 ~/.docker/config.json
  2. 레지스트리 자격 증명이 맨 먼저 나옵니다. 레지스트리, 사용자 이름, 비밀번호, 그리고 사용자 이름과 비밀번호로 나눈 auth 값입니다.
  3. 반대로 Secret을 만들려면 pull secret 생성을 열고 레지스트리, 사용자 이름, 비밀번호, 필요하면 이메일 (선택 사항) 칸도 채우세요. 결과는 kubectl create secret docker-registry가 만드는 Secret과 같습니다.

pull secret 속 이중 Base64

pull secret은 Base64 안에 Base64를 감싸고 있어서 손으로 디코딩하려면 두 단계가 필요합니다.

apiVersion: v1
kind: Secret
metadata:
  name: regcred
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImNpLWJvdCIsInBhc3N3b3JkIjoicHVsbC1vbmx5LXRva2VuIiwiYXV0aCI6Ilkya3RZbTkwT25CMWJHd3RiMjVzZVMxMGIydGxiZz09In19fQ==

첫 번째 층인 Secret 값은 Docker 설정 JSON으로 디코딩됩니다.

{"auths":{"registry.example.com":{"username":"ci-bot","password":"pull-only-token","auth":"Y2ktYm90OnB1bGwtb25seS10b2tlbg=="}}}

두 번째 층인 auth는 ci-bot:pull-only-token으로 디코딩됩니다. kubectl create secret docker-registry로 만든 .dockerconfigjson 값은 {"auths":의 Base64인 eyJhdXRocyI6로 시작하므로 로그와 매니페스트에서 쉽게 알아볼 수 있습니다.

만날 수 있는 형식

형태출처
{"auths": {"host": {...}}}.dockerconfigjson, 현재의 ~/.docker/config.json
{"host": {"auth": "...", "email": "..."}}레거시 .dockercfg Secret(kubernetes.io/dockercfg)
호스트가 "https://index.docker.io/v1/"Docker Hub
비밀번호 대신 identitytokendocker login 후 OAuth 리프레시 토큰을 발급하는 레지스트리

두 Secret 유형 모두 여기서 디코딩됩니다. 레거시 .dockercfg에는 auths 래퍼가 없으므로, 한 형식에 맞춰 작성한 스크립트는 다른 형식에서 조용히 아무것도 찾지 못합니다.

셸에서 디코딩하기

kubectl get secret regcred -o jsonpath='{.data.\.dockerconfigjson}' | base64 --decode | jq .
kubectl get secret regcred -o jsonpath='{.data.\.dockerconfigjson}' | base64 --decode \
  | jq -r '.auths | to_entries[] | "\(.key) \(.value.auth | @base64d)"'

두 번째 명령은 레지스트리마다 registry user:password 한 줄씩을 출력합니다. auth 값은 Basic Auth 헤더와 형식이 같으므로 Basic Auth 디코더로도 읽을 수 있습니다.

pull secret이 실패하는 이유

  • 잘못된 레지스트리 키. auths의 호스트는 이미지 참조와 일치해야 합니다. ghcr.io/org/app에는 ghcr.io가, Docker Hub 이미지에는 https://index.docker.io/v1/이 필요합니다.
  • 다른 네임스페이스의 Secret. imagePullSecrets는 Pod와 같은 네임스페이스의 Secret만 찾습니다.
  • 만료된 토큰. 일부 레지스트리는 수명이 짧은 비밀번호를 발급합니다. 예를 들어 Amazon ECR 토큰은 12시간 동안 유효합니다. 그러면 어제 작동하던 Secret이 오늘은 ImagePullBackOff를 냅니다.
  • 손으로 만든 JSON. 끝에 줄 바꿈이나 공백이 딸려 복사된 비밀번호, 잘못된 문자열로 인코딩한 auth 값은 조용히 실패합니다. 디코딩한 auth를 사용자 이름, 비밀번호 필드와 비교하거나 kubectl create secret docker-registry로 Secret을 다시 만드세요.

Base64는 아무것도 숨기지 않으므로 Secret을 읽을 수 있는 사람은 누구나 그 계정을 쓸 수 있습니다. pull secret에는 읽기 전용 레지스트리 토큰을 쓰세요.

자주 묻는 질문

imagePullSecret은 어떻게 디코딩하나요?

위에 kubectl get secret regcred -o yaml의 출력을 붙여넣으세요. 셸에서는 kubectl get secret regcred -o jsonpath='{.data.\.dockerconfigjson}' | base64 --decode가 JSON을 출력하며, 그 안의 auth 필드가 한 번 더 Base64로 되어 있습니다.

config.json의 auth 필드는 무엇인가요?

username:password를 Base64로 나타낸 것으로, HTTP Basic Authorization 헤더와 같은 형식입니다. Y2ktYm90OnB1bGwtb25seS10b2tlbg==는 ci-bot:pull-only-token으로 디코딩됩니다.

~/.docker/config.json의 auths 항목이 비어 있는 이유는 무엇인가요?

credsStore나 credHelpers가 설정되어 있으면 Docker는 시스템 키체인 같은 자격 증명 도우미에 비밀번호를 저장합니다. 그러면 파일에는 레지스트리마다 {}만 남아 디코딩할 것이 없습니다.