

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# Kubernetes 인증서로 워크로드 보안
<a name="cert-signing"></a>

Kubernetes Certificates API를 통해 [X.509](https://www.itu.int/rec/T-REC-X.509) 자격 증명 프로비저닝이 자동화됩니다. API는 Kubernetes API 클라이언트가 인증 기관(CA)에서 [X.509 인증서](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/)를 요청하고 받을 수 있는 명령줄 인터페이스를 제공합니다. 표시된 서명자가 인증서에 서명하도록 요청하는 데 `CertificateSigningRequest`(CSR) 리소스를 사용할 수 있습니다. 요청은 서명되기 전에 승인되거나 거부됩니다. Kubernetes는 잘 정의된 동작을 통해 기본 제공 서명자와 사용자 지정 서명자를 모두 지원합니다. 이렇게 하면 클라이언트는 CSR에 어떤 일이 일어나는지 예측할 수 있습니다. 인증서 서명에 대한 자세한 내용을 알아보려면 [서명 요청](https://kubernetes.io/docs/reference/access-authn-authz/certificate-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를 사용하여 생성된 기존 인증서는 유효하며 인증서가 만료될 때까지 기능합니다. 다음 내용이 포함됩니다:
+ 신뢰 배포: 없음. Kubernetes 클러스터에는 이 서명자에 대한 표준 트러스트나 배포가 없습니다.
+ 허용된 과목: 모두
+ 허용된 x509 확장 기능: subjectAltName 및 키 사용 확장 기능을 준수하고 다른 확장 기능을 폐기합니다.
+ 허용된 키 사용: ["키 암호화”, “디지털 서명”, “서버 인증"] 이외의 용도는 포함하지 않아야 합니다.
**참고**  
클라이언트 인증서 서명은 지원되지 않습니다.
+ 만료/인증서 수명: 45일(기본 및 최대)
+ CA 비트 허용됨/허용되지 않음: 허용되지 않음

## signerName을 사용한 CSR 생성 예
<a name="csr-example"></a>

다음 단계에서는 `signerName: beta.eks.amazonaws.com/app-serving`을 사용하여 `myserver.default.svc` DNS 이름에 대한 서빙 인증서를 생성하는 방법을 보여줍니다. 이 정보를 사용자 환경에 대한 가이드로 사용합니다.

1. `openssl genrsa -out myserver.key 2048` 명령을 실행하여 RSA 프라이빗 키를 생성합니다.

   ```
   openssl genrsa -out myserver.key 2048
   ```

1. 다음 명령을 실행하여 인증 요청을 생성합니다.

   ```
   openssl req -new -key myserver.key -out myserver.csr -subj "/CN=myserver.default.svc"
   ```

1. CSR 요청에 대한 `base64` 값을 생성하고 이후 단계에서 사용할 수 있도록 변수에 저장합니다.

   ```
   base_64=$(cat myserver.csr | base64 -w 0 | tr -d "
   ")
   ```

1. 다음 명령을 실행하여 `mycsr.yaml`이라는 파일을 생성합니다. 다음 예에서 `beta.eks.amazonaws.com/app-serving`은 `signerName`입니다.

   ```
   cat >mycsr.yaml <<EOF
   apiVersion: certificates.k8s.io/v1
   kind: CertificateSigningRequest
   metadata:
     name: myserver
   spec:
     request: $base_64
     signerName: beta.eks.amazonaws.com/app-serving
     usages:
       - digital signature
       - key encipherment
       - server auth
   EOF
   ```

1. CSR을 제출합니다.

   ```
   kubectl apply -f mycsr.yaml
   ```

1. 서빙 인증서를 승인합니다.

   ```
   kubectl certificate approve myserver
   ```

1. 인증서가 발급되었는지 확인합니다.

   ```
   kubectl get csr myserver
   ```

   예제 출력은 다음과 같습니다.

   ```
   NAME       AGE     SIGNERNAME                           REQUESTOR          CONDITION
   myserver   3m20s   beta.eks.amazonaws.com/app-serving   kubernetes-admin   Approved,Issued
   ```

1. 발급된 인증서를 내보냅니다.

   ```
   kubectl get csr myserver -o jsonpath='{.status.certificate}'| base64 -d > myserver.crt
   ```