

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Cifrado de los secretos de Kubernetes con KMS en los clústeres existentes
<a name="enable-kms"></a>

**importante**  
Este procedimiento se aplica únicamente a clústeres de EKS que ejecutan la versión 1.27 de Kubernetes o una inferior. Si se ejecuta Kubernetes versión 1.28 o superior, los secretos de Kubernetes están protegidos con cifrado de sobre de forma predeterminada. Para obtener más información, consulte [Cifrado de sobre predeterminado para todos los datos de la API de Kubernetes](envelope-encryption.md).

Si habilita el [cifrado de secretos](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/), los secretos de Kubernetes se cifran con la clave de AWS KMS que seleccione. La clave de KMS debe cumplir las siguientes condiciones:
+ Simétrica
+ Debe poder cifrar y descifrar datos
+ Creada en la misma región de AWS que el clúster
+ Si la clave de KMS se creó en una cuenta diferente, la [entidad principal de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) debe tener acceso a la clave de KMS.

Para obtener más información, consulte [Permitir que las entidades principales de IAM de otras cuentas utilicen una clave de KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html) en la *[Guía para desarrolladores de AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)*.

**aviso**  
No puede desactivar el cifrado de secretos después de habilitarlo. Esta acción es irreversible.

eksctl   
Este procedimiento se aplica únicamente a clústeres de EKS que ejecutan la versión 1.27 de Kubernetes o una inferior. Para obtener más información, consulte [Cifrado de sobre predeterminado para todos los datos de la API de Kubernetes](envelope-encryption.md).

Puede habilitar el cifrado de dos formas:
+ Agregue cifrado a su clúster con un solo comando.

  Para volver a cifrar los secretos de forma automática, ejecute el siguiente comando.

  ```
  eksctl utils enable-secrets-encryption \
      --cluster my-cluster \
      --key-arn arn:aws:kms:region-code:account:key/key
  ```

  Para optar por no volver a cifrar los secretos de forma automática, ejecute el siguiente comando.

  ```
  eksctl utils enable-secrets-encryption
      --cluster my-cluster \
      --key-arn arn:aws:kms:region-code:account:key/key \
      --encrypt-existing-secrets=false
  ```
+ Agregue cifrado al clúster con un archivo `kms-cluster.yaml`.

  ```
  apiVersion: eksctl.io/v1alpha5
  kind: ClusterConfig
  
  metadata:
    name: my-cluster
    region: region-code
  
  secretsEncryption:
    keyARN: arn:aws:kms:region-code:account:key/key
  ```

  Para que los secretos se vuelvan a cifrar automáticamente, ejecute el siguiente comando.

  ```
  eksctl utils enable-secrets-encryption -f kms-cluster.yaml
  ```

  Para optar por no volver a cifrar los secretos de forma automática, ejecute el siguiente comando.

  ```
  eksctl utils enable-secrets-encryption -f kms-cluster.yaml --encrypt-existing-secrets=false
  ```  
 Consola de administración de AWS   

  1. Este procedimiento se aplica únicamente a clústeres de EKS que ejecutan la versión 1.27 de Kubernetes o una inferior. Para obtener más información, consulte [Cifrado de sobre predeterminado para todos los datos de la API de Kubernetes](envelope-encryption.md).

  1. Abra la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

  1. Elija el clúster al que desea agregar el cifrado de KMS.

  1. Elija la pestaña **Overview** (Resumen) (está seleccionada de manera predeterminada).

  1. Desplácese hasta la sección **Secrets encryption** (Cifrado de secretos) y elija **Enable** (Habilitar).

  1. Seleccione una clave en el menú desplegable y elija el botón **Enable** (Habilitar). Si no aparece ninguna clave, primero debe crear una. Para obtener más información, consulte [Creación de claves](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html). 

  1. Elija el botón **Confirm** (Confirmar) para utilizar la clave elegida.  
 AWS CLI  

  1. Este procedimiento se aplica únicamente a clústeres de EKS que ejecutan la versión 1.27 de Kubernetes o una inferior. Para obtener más información, consulte [Cifrado de sobre predeterminado para todos los datos de la API de Kubernetes](envelope-encryption.md).

  1. Asocie la configuración del [cifrado de secretos](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) con el clúster mediante el siguiente comando de la AWS CLI. Sustituya los valores de ejemplo por sus propios valores.

     ```
     aws eks associate-encryption-config \
         --cluster-name my-cluster \
         --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"arn:aws:kms:region-code:account:key/key"}}]'
     ```

     Un ejemplo de salida sería el siguiente.

     ```
     {
       "update": {
         "id": "3141b835-8103-423a-8e68-12c2521ffa4d",
         "status": "InProgress",
         "type": "AssociateEncryptionConfig",
         "params": [
           {
             "type": "EncryptionConfig",
             "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"
           }
         ],
         "createdAt": 1613754188.734,
         "errors": []
       }
     }
     ```

  1. Puede monitorear el estado de la actualización de cifrado con el siguiente comando. Utilice la especificación `cluster name` y `update ID` que se devolvió en la salida anterior. Cuando se muestra el estado `Successful`, la actualización se ha completado.

     ```
     aws eks describe-update \
         --region region-code \
         --name my-cluster \
         --update-id 3141b835-8103-423a-8e68-12c2521ffa4d
     ```

     Un ejemplo de salida sería el siguiente.

     ```
     {
       "update": {
         "id": "3141b835-8103-423a-8e68-12c2521ffa4d",
         "status": "Successful",
         "type": "AssociateEncryptionConfig",
         "params": [
           {
             "type": "EncryptionConfig",
             "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"
           }
         ],
         "createdAt": 1613754188.734>,
         "errors": []
       }
     }
     ```

  1. Para verificar que el cifrado se encuentra habilitado en el clúster, ejecute el comando `describe-cluster`. La respuesta contiene una cadena de `EncryptionConfig`.

     ```
     aws eks describe-cluster --region region-code --name my-cluster
     ```

Después de habilitar el cifrado en el clúster, deberá cifrar todos los secretos existentes con la clave nueva:

**nota**  
Si usa `eksctl`, solo es necesario ejecutar el siguiente comando si opta por no volver a cifrar sus secretos automáticamente.

```
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - kms-encryption-timestamp="time value"
```

**aviso**  
Si habilita el [cifrado de secretos](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) para un clúster existente y, en algún momento, se elimina la clave de KMS que utiliza, no habrá forma de recuperar el clúster. Si elimina la clave de KMS, coloca el clúster permanentemente en un estado degradado. Para obtener más información, consulte [Eliminación de claves de AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html).

**nota**  
De forma predeterminada, el comando `create-key` crea una [clave KMS de cifrado simétrica](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html) con una política de claves que da al administrador raíz de la cuenta acceso a las acciones y los recursos de AWS KMS. Si desea reducir los permisos, asegúrese de que las acciones `kms:DescribeKey` y `kms:CreateGrant` estén permitidas en la política para la entidad principal que llama a la API `create-cluster`.  
Para clústeres que utilizan cifrado de sobres KMS, se requieren permisos `kms:CreateGrant`. La condición `kms:GrantIsForAWSResource` no es compatible con la acción CreateCluster y no debe utilizarse en las políticas de KMS para controlar permisos `kms:CreateGrant` para los usuarios que realizan CreateCluster.