Kubernetes 비밀 해독
Kubernetes/Docker 셋업을 물려받았는데 실수로 DB password와 관련된 것을 변경하여 pod를 다운시켰습니다.
저는 이 문제를 해결하려고 합니다.
저는 쿠버네티스나 도커 경험이 많지 않아서 아직도 일을 배우는 중입니다.
값은 불투명 유형의 비밀인 db-user-pass 자격 증명 내부에 포함되어 있습니다.
제가 설명하는 겁니다
kubectl describe secrets/db-user-pass
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 16 bytes
username: 13 bytes
저는 이 비밀에서 어떻게 자료를 얻을 수 있는지 전혀 모릅니다.Kubernetes 사이트의 예는 제가 base64 인코딩된 문자열을 가질 것이라고 가정하는 것 같지만, 저는 그것조차 이해할 수 없는 것 같습니다.이것에 대한 값을 어떻게 구합니까?
합니다.kubectl get secrets/db-user-pass -o yaml
아니면-o json
가 보이는username
그리고.password
하고 와 수 .echo <ENCODED_VALUE> | base64 -D
(Mac OS X).
이를 위한 보다 콤팩트한 원-라이너:
kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -D
사용자 이름에 대해서도 마찬가지입니다.
kubectl get secrets/db-user-pass --template={{.data.username}} | base64 -D
: GNU/ 64입니다.-d
,것은 아니다.-D
.
이 편리한 명령어를 사용하는 것을 제안합니다.이것은 고 템플릿의 힘을 사용합니다.모든 값을 반복하고 해독하며 키와 함께 인쇄합니다.또한 설정되지 않은 값도 처리합니다.
kubectl get secret name-of-secret -o go-template='
{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
## In your case it would output
# password: decoded_password
# username: decoded_username
에 들지 와 다른 할 수 .yaml
아니면json
, 하지만 그건 64번 베이스에 의해 암호화된 비밀을 출력할 겁니다
jq(json 쿼리)가 있는 경우 다음을 수행합니다.
kubectl get secret db-user-pass -o json | jq '.data | map_values(@base64d)'
참고:
db-user-pass
입니다의 입니다..data
는) 비밀 값입니다를 하는 내의 입니다.
이는 모든 플랫폼에서 작동하며, kubectl 1.11+를 사용합니다.
kubectl get secrets/db-user-pass --template='{{.data.password | base64decode}}'
암호에 "-"가 있으면 다음이 작동합니다.
kubectl get secrets/db-user-pass --template='{{ index .data "sql-password" | base64decode}}'
그리고 모든 키를 얻고 싶다면, 값들은
kubectl get secrets/db-user-pass --template='{{ range $key, $value := .data }}{{ printf "%s: %s\n" $key ($value | base64decode) }}{{ end }}'
되어 있는 경우 ()-
점 ().
):
kubectl get secret db-user-pass -o=go-template='{{index .data "password"}}' | base64 -d
이 jsonpath variation은 OSX에서 제게 적합합니다.
kubectl get secrets/db-user-pass -o jsonpath="{.data.username}" | base64 -d
이름에 점을 찍어 비밀을 얻는 것.
kubectl get secrets/tls -o jsonpath="{.data['tls\.crt']}" | base64 -d
이것이 당신이 찾고 있는 링크입니다.
Kubernetes 비밀은 기본 64 인코딩 형식으로 제공되어야 하며, 리눅스 배포의 경우 기본 64 바이너리를 사용하여 만들 수 있습니다.
예:
echo "hello" | base64
aGVsbG8K
Kubernetes는 우리가 비밀키를 환경 변수로 전달하거나 볼륨으로 장착할 때 base64 인코딩을 디코딩합니다.
우선 api 서버를 kubectl을 이용하여 query하여 etcd에서 비밀을 얻습니다.
kubectl get secret db-user-pass -o yaml
이것은 yaml 형식의 base64 인코딩된 비밀을 알려줄 것입니다.
일단 yaml 파일이 그것들을 해독하게 되면,
"base64 --decode"
최종 명령은 다음과 같습니다.잊지 마세요.-n
flag in echo 명령어
echo -n "jdddjdkkdkdmdl" | base64 --decode
더 쉬운 디코딩을 위해 ksd와 같은 base64 디코딩을 수행하는 도구를 사용할 수 있습니다.
kubectl get secrets/db-user-pass -o yaml | ksd
또는 https://github.com/elsesiy/kubectl-view-secret 을 사용합니다.
kubectl view-secret secrets/db-user-pass
우분투 18+에서
kubectl get secrets/db-user-pass --template={{.data.password}} | base64 -d
또 다른 접근법입니다.이 제품은 쿠벡틀 플러그인, 쿠벡틀 뷰 시크릿과 관련이 있습니다. 좋은 점은 선택한 모든 비밀만 인쇄하지 않기 때문에 때때로 도움이 될 수 있다는 것입니다.
이렇게 작동합니다.
세우다
#suppose you have krew installed
❯ kubectl krew install view-secret
작업 예시
❯ kubectl get secrets
NAME TYPE DATA AGE
cert-manager-webhook-ca Opaque 3 30d
harbor-global-docker-pull kubernetes.io/dockerconfigjson 1 30d
❯ kubectl view-secret cert-manager-webhook-ca
Multiple sub keys found. Specify another argument, one of:
-> ca.crt
-> tls.crt
-> tls.key
❯ kubectl view-secret cert-manager-webhook-ca ca.crt
-----BEGIN CERTIFICATE-----
MIIBwj.......
쿠버네티스 1.11+
kubectl get secrets/db-user-pass --template='{{.data.password | base64decode }}'
이 하나의 라이너는 암호화된 kubeconfig 파일을 암호화된 kubeconfig 파일을 암호화된 kubeconfig 파일을 가져오는 데 사용됩니다. 예를 들어 ci 작업에서 동적으로 사용할 파일을 생성합니다.
kubectl get secret YOUR_SECRET -o json | grep -oP '(?<=\"YOUR_SECRET_KEY\": \")[^\"]*' | base64 --decode > ./YOUR_KUBECONFIG_FILE_NAME
$kubectl get secret grafana -n monitoring -o jsonpath='{.data}'
출력은 인코딩된 문자열입니다.
아래 echo 명령에서 String을 사용합니다.
$echo "string" | base64 --decode
@B řetislav Hájek 솔루션 확장(그것에 대해 매우 감사합니다).라벨로 받아야 할 경우에는 추가로 추가해야 합니다.range
반환된 항목에 대해 반복하는 명령입니다.
$ LABEL_FILTER="app.kubernetes.io/name=mysql-chart"
$ kubectl get secret -l "$LABEL_FILTER" -o go-template='
{{range $i := .items}}{{range $k,$v := $i.data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}{{end}}'
mysql_password: ...
mysql_root_password: ...
mysql_user: ...
바쉬로.이것은 ubuntu 18.04를 실행하고 있고, Kubernetes 1.18.5를 실행하고 있습니다.
kubectl -n metallb-system get secrets memberlist -o json | grep secretkey | grep -v f:s | awk -F '"' '{print$4}' |base64 --decode; echo
최소 nodejs CLI 도구(gitub)
npm i -g kusd
kubectl get secret your-secret -o yaml | kusd
k8s 비밀에 대한 yaml 파일이 있다면 도움이 될 것입니다.이 intellij 플러그인을 사용하여 yaml 파일의 모든 base64 인코딩 값을 디코딩할 수 있습니다.https://plugins.jetbrains.com/plugin/19099-yaml-base64-decoder
(어떤 이유에서든) 오프라인에서만 암호를 사용할 수 있는 사용자는 yq를 사용할 수 있으며 여기서 값을 앞뒤로 해독하는 것이 별칭 스니펫입니다.
elif [[ ($1 == "secret") && ($2 == "decode") ]]; then
yq -i '.data[] |= @base64d' $3
elif [[ ($1 == "secret") && ($2 == "encode") ]]; then
yq -i '.data[] |= @base64' $3
3달러는 문제의 비밀로 가는 길입니다.
언급URL : https://stackoverflow.com/questions/56909180/decoding-kubernetes-secret
'programing' 카테고리의 다른 글
올바른 폴더 경로로 pom.xml의 mainClass를 추가할 수 있습니다. (0) | 2023.10.06 |
---|---|
"전제조건"과 "주장"의 차이점은? (0) | 2023.10.06 |
GitLab에서 사용자 지정 Composer 패키지 설치 (0) | 2023.10.06 |
jQuery: 선택한 라디오 버튼에 대해 부모 tr 가져오기 (0) | 2023.10.06 |
CSS 역할 스타일 지정 방법 (0) | 2023.10.06 |