Habilitación del cifrado de secretos en un clúster existente - Amazon EKS

Habilitación del cifrado de secretos en un clúster existente

Si habilita el cifrado de secretos, los secretos de Kubernetes se cifran con la clave de AWS KMS key que seleccione. La clave KMS debe cumplir las siguientes condiciones:

  • Simétrica

  • Debe poder cifrar y descifrar datos

  • Debe estar 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 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 en la Guía para desarrolladores de AWS Key Management Service.

aviso

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

eksctl

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
AWS Management Console
  1. Abra la consola de Amazon EKS en https://console.aws.amazon.com/eks/home#/clusters.

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

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

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

  5. 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.

  6. Elija el botón Confirm (Confirmar) para utilizar la clave elegida.

AWS CLI
  1. Asocie la configuración del cifrado de secretos con el clúster mediante el siguiente comando de la AWS CLI. Reemplace los example values por los de su propiedad.

    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": []   } }
  2. 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": []   } }
  3. 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 para un clúster existente y alguna vez la clave de KMS que utiliza se elimina, no hay una ruta de recuperación para 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.

nota

De forma predeterminada, el comando create-key crea una clave KMS de cifrado simétrico con una política de clave que da al administrador raíz de la cuenta acceso en acciones y 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.