

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Proteger workloads com certificados do Kubernetes
<a name="cert-signing"></a>

A API Certificates do Kubernetes automatiza o provisionamento de credenciais [X.509](https://www.itu.int/rec/T-REC-X.509). Ela tem uma interface de linha de comandos para os clientes de APIs do Kubernetes solicitarem e receberem [certificados X.509](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/) de uma autoridade de certificação (CA). Você pode usa o recurso `CertificateSigningRequest` (CSR) para solicitar que um signatário indicado assine o certificado. Suas solicitações são aprovadas ou negadas antes de serem assinadas. O Kubernetes é compatível com signers incorporados e personalizados com comportamentos bem definidos. Dessa maneira, os clientes podem prever o que acontece com suas CSRs. Para saber mais sobre assinatura de certificados, consulte [solicitações de assinatura](https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/).

Um dos signatários integrados é `kubernetes.io/legacy-unknown`. A API `v1beta1` do recurso CSR respeitou esse signatário legacy-unknown. Porém, a API estável `v1` de CSR não permite que o `signerName` seja definido como `kubernetes.io/legacy-unknown`.

Se você desejar usar a CA do Amazon EKS para gerar certificados em seus clusters, deverá usar um signatário personalizado. Para usar a versão `v1` da API de CSR e gerar um novo certificado, você deverá migrar todos os manifestos e clientes de API existentes. Certificados existentes criados com a API `v1beta1` existente são válidos e funcionarão até o certificado expirar. Essa transmissão inclui o seguinte:
+ Distribuição de confiança: nada. Não há confiança ou distribuição padrão para esse signer em um cluster do Kubernetes.
+ Requerentes permitidos: qualquer
+ Extensões x509 permitidas: respeita subjectAltName e extensões de uso de chaves e descarta outras extensões
+ Usos de chaves permitidos: não deve incluir usos além de ["criptografia de chaves”, “assinatura digital”, “autenticação de servidor"]
**nota**  
A assinatura de certificados de clientes não é possível.
+ Vida útil de expiração/certificado: um ano (padrão e máximo)
+ Bit de CA permitido/proibido: não permitido

## Exemplo de geração de CSR com signerName
<a name="csr-example"></a>

Estas etapas mostram como gerar um certificado de serviço para o nome de DNS `myserver.default.svc` usando `signerName: beta.eks.amazonaws.com/app-serving`. Use isso como orientação para seu próprio ambiente.

1. Execute o comando `openssl genrsa -out myserver.key 2048` para gerar uma chave RSA privada.

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

1. Use o seguinte comando para gerar uma solicitação de certificado:

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

1. Gere um valor em `base64` para a solicitação de CSR e armazene-o em uma variável para uso em uma etapa posterior.

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

1. Execute o seguinte comando para criar um arquivo chamado `mycsr.yaml`. No exemplo a seguir, `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. Envie a CSR.

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

1. Aprove o certificado de serviço.

   ```
   kubectl certificate approve myserver
   ```

1. Confira se o certificado foi emitido.

   ```
   kubectl get csr myserver
   ```

   Veja um exemplo de saída abaixo.

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

1. Exporte o certificado emitido.

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