중국시가넷 - 개인 서명 - K8s 의 서비스 계정 토큰
K8s 의 서비스 계정 토큰
우선 이 토큰을 JWT(json web token) 라고 부르는데, 홈페이지에서 소개할 수 있는 것은 RFC 표준입니다.
JWT 는 서버에서 클라이언트로 보내는 암호화된 인증서 (RSA 또는 암호로 암호화됨) 입니다. 클라이언트가 서버에 액세스할 때 (인증서를 발급한 서버가 아닐 수도 있음) 서버는 인증서를 해독하고 인증 후 클라이언트가 액세스할 수 있도록 합니다.
K8s 에서 RSA 개인/공개 키는 암호화 및 인증에 사용되고 kube-controller-manager 는 다음 매개 변수를 사용하여 개인 키를 지정하고 토큰에 서명합니다.
Kube-apiserver 는 다음 매개변수를 사용하여 토큰을 인증하는 공개 키를 지정합니다.
JWT 는 헤더, 페이로드 및 서명의 세 부분으로 구성되며 "."로 구분되므로 일반적인 형식은 xxx.yyy.zzz 입니다.
머리글
일반적으로 두 부분이 있습니다. 유형 지정 유형, 고정 "JWT", alg 는 서명 알고리즘 (예: HMAC SHA256 또는 RSA) 을 지정합니다.
페이로드
사용자 데이터는 정의되며 잘 알려진 정의 필드가 있으며 사용자 정의 필드를 가질 수 있습니다.
페이로드는 JWT 의 두 번째 부분으로 Base64Url 로 암호화해야 합니다.
서명
서명에는 Base64Url 암호화의 헤더, paload, Base64Url 암호화의 secret (암호 또는 RSA 의 개인 키), 헤더에 지정된 암호화 알고리즘의 네 가지 조건이 필요합니다. 예를 들어 RSASHA256 알고리즘을 사용하여 서명을 계산하는 공식은 다음과 같습니다.
위의 공식을 실행할 때 대략 두 단계로 나뉩니다.
마지막으로 "."를 사용하여 이 세 부분 (모두 base64 로 암호화) 을 결합하는 것이 마지막 토큰입니다.
이것은 원리와 프로세스에 대한 간단한 설명일 뿐이다. 여기서는 JWT 를 생성하는 방법과 JWT 를 검증하는 방법을 연습합니다.
JWT 를 생성/검증하는 방법에는 두 가지가 있습니다.
A. jwt.io 에서 제공하는 공식 그래픽 인터페이스 사용
B. python jwt 의 jwt 와 같은 타사 라이브러리를 사용합니다 jwt (pip install python-jwt 는 이 명령으로 설치됨).
JWT 생성
헤더, 페이로드 및 검증 서명의 개인 키로 아래 오른쪽에 디코딩된 세 개의 상자 (k8s 의 경우 개인 키는 /etc/kubernetes/pkt/sa.key) 를 채웁니다. Top 알고리즘에서 서명 알고리즘을 선택합니다. 여기서 rs256 을 선택하면 결과 JWT 가 아래 그림과 같이 왼쪽의 인코딩 상자에 자동으로 표시됩니다.
JWT 복호화
왼쪽 인코딩 상자에 JWT 를 입력하면 헤더 및 페이로드가 자동으로 인식됩니다. base64 암호화로 인해 직접 암호를 해독할 수 있지만 서명 부분은 인증을 위해 공개 키를 제공해야 합니다. 그렇지 않으면 인코딩 상자 아래에 빨간색 "유효하지 않은 서명" 이 표시되며 공개 키 (k8s 의 경우 공개 키는/ETC/KUBEE) 만 넣으면 됩니다
공개 키가 채워지지 않은 경우
정확한 공개 키를 기입한 후
다음은 JWT 라이브러리를 사용하여 jwt 를 생성하고 검증하는 파이썬 스크립트입니다.
Python3 을 사용하여 스크립트 실행 (python3 인 이유는 무엇입니까? 그 이유는 아래), 결과를 확인하십시오.
파이썬 라이브러리를 사용할 때 주의해야 할 두 가지가 있습니다.
다음은 파이썬 디버그 내용이며 무시할 수 있습니다.
Sha256 에서 생성된 해시 값
(Pdb) p 데이터
B'\x9e, \ x86 \ xd2g74 \ xed \ xdbo \ x14 \ xaa \ x02b \ xd6 \ x0/kr
(Pdb) len (데이터)
32
(Pdb) 인쇄 (data.hex ())
9e2a2c86d2673734eddb6f14aa0262d60161a6defb82d02ce01
(Pdb) 인쇄 (데이터)
B'\x9e, \ x86 \ xd2g74 \ xed \ xdbo \ x14 \ xaa \ x02b \ xd6 \ x0/kr
/usr/lib/python3/dist-packages/jwt/API _ jws.py
Alg_obj = self 입니다. _ 알고리즘 [알고리즘]
키 key = alg_obj.prepare_key(key (키)
Signature = alg _ obj.sign (signing _ input, 키)
- 관련 기사
- 성공에 관한 나만의 시그니처 아름다운 시
- 재무 회계 보고서는 기업 및 기타 기관이 외부 세계에 재무 정보를 제공하는 가장 기본적인 방법입니다. 누가 서명하고 도장을 찍을까요? 어떤 것을 고르시겠습니까?
- 위챗 8.0 업데이트: 표정이 움직이고, 새로운 상태를 보여주며, 떠 있는 창이 더 보기 좋다.
- 농상들이 채용에 가서 답장 문자 메시지에 전송 지시가 잘못되었다는 것을 보여 주었다.
- 한 사람의 슬픔을 싫어하고, 기분어구를 말하고, 기대가 가득하고, 실의에 찬 것으로 바뀐다. (윌리엄 셰익스피어, 햄릿, 행복명언)
- 물푸른색과 눈물을 가진 연인의 이름.
- 2022 타일 판매용 떨림명
- Oppo r 15 그라데이션 서명은 누구의 것입니까?
- "송효유 애흥자기" 를 티베트어 시로 짜다
- 공군곤산대학교는 어떤 학교인가요?