Kubernetes 인증서로 워크로드 보호하기
Kubernetes 인증서로 워크로드 보호하기
Kubernetes Certificates API는 X.509 자격 증명 프로비저닝을 자동화해요. 이 API는 Kubernetes API 클라이언트가 CA(Certificate Authority)에서 X.509 인증서를 요청하고 얻을 수 있는 명령줄 인터페이스를 제공해요. CertificateSigningRequest(CSR) 리소스를 사용해 지정된 서명자(signer)가 인증서에 서명하도록 요청할 수 있어요. 요청은 서명되기 전에 승인되거나 거부돼요. Kubernetes는 잘 정의된 동작을 가진 내장 서명자와 사용자 지정 서명자를 모두 지원해요. 덕분에 클라이언트는 자신의 CSR에 어떤 일이 일어날지 예측할 수 있어요. 인증서 서명에 대해 더 알아보려면 Kubernetes 문서의 signing requests를 참고하세요.
내장 서명자 중 하나는 kubernetes.io/legacy-unknown이에요. CSR 리소스의 v1beta1 API는 이 legacy-unknown 서명자를 지원했어요. 하지만 안정화된 CSR v1 API는 signerName을 kubernetes.io/legacy-unknown으로 설정하는 것을 허용하지 않아요.
클러스터에서 인증서를 생성할 때 Amazon EKS CA를 사용하려면 사용자 지정 서명자를 사용해야 해요. CSR v1 API 버전을 사용하고 새 인증서를 생성하려면 기존 매니페스트와 API 클라이언트를 마이그레이션해야 해요. 기존 v1beta1 API로 만든 기존 인증서는 인증서가 만료될 때까지 유효하며 정상 동작해요. 여기에는 다음이 포함돼요.
- 신뢰 배포(Trust distribution): 없음. Kubernetes 클러스터에서 이 서명자에 대한 표준적인 신뢰 또는 배포 메커니즘이 없어요.
- 허용 주체(Permitted subjects): 모든 주체 허용
- 허용 X.509 확장(Permitted x509 extensions): subjectAltName과 키 사용 확장을 존중하고 다른 확장은 무시해요.
- 허용 키 사용(Permitted key usages): ["key encipherment", "digital signature", "server auth"]를 넘어서는 사용은 포함하면 안 돼요.
참고
클라이언트 인증서 서명은 지원되지 않아요.
- 만료/인증서 수명: 45일(기본값 및 최대값)
- CA 비트 허용 여부: 허용되지 않음
signerName을 사용한 CSR 생성 예시
다음 단계는 signerName: beta.eks.amazonaws.com/app-serving을 사용해 DNS 이름 myserver.default.svc용 서빙 인증서를 생성하는 방법을 보여줘요. 자신의 환경에 맞게 이 가이드를 활용하세요.
- RSA 개인 키를 생성하려면
openssl genrsa -out myserver.key 2048명령을 실행합니다.
openssl genrsa -out myserver.key 2048
- 다음 명령을 실행해 인증서 요청을 생성합니다.
openssl req -new -key myserver.key -out myserver.csr -subj "/CN=myserver.default.svc"
- CSR 요청의
base64값을 생성해 이후 단계에서 사용할 변수에 저장합니다.
base_64=$(cat myserver.csr | base64 -w 0 | tr -d "\n")
- 다음 명령을 실행해
mycsr.yaml파일을 생성합니다. 다음 예시에서beta.eks.amazonaws.com/app-serving이signerName이에요.
cat >mycsr.yaml <<EOF
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: mycsr
spec:
signerName: beta.eks.amazonaws.com/app-serving
request: $(base_64)
usages:
- digital signature
- key encipherment
- server auth
EOF
- CSR 리소스를 생성합니다.
kubectl create -f mycsr.yaml
- CSR이 Approved 상태가 될 때까지 기다렸다가 서명된 인증서를 다운로드합니다.
kubectl get csr mycsr -o jsonpath='{.status.certificate}' | base64 --decode > myserver.crt
더 알아보기 (Learn more)
출처: 문서