Usar claves de encriptación administradas por el cliente (CMEK)

En este tema, se describe cómo usar las claves de encriptación administradas por el cliente (CMEK) en Google Kubernetes Engine (GKE). Si necesitas controlar la administración de tus claves, puedes usar el servicio de administración de claves y CMEK para proteger discos persistentes en tu clúster de GKE.

Descripción general

De forma predeterminada, Google Cloud encripta el contenido del cliente en reposo y GKE administra la encriptación sin que tengas que realizar ninguna acción.

Si deseas controlar y administrar el cambio de clave de encriptación, puedes usar las Claves de encriptación administradas por el cliente (CMEK). Estas claves se usan para encriptar las claves de encriptación de datos que encriptan tus datos. Para obtener más información, consulta Administración de claves.

Los discos encriptados con CMEK están disponibles en GKE como PersistentVolume aprovisionados de manera dinámica.

En GKE, CMEK puede proteger los datos de los discos persistentes adjuntos a los nodos del clúster. No se pueden proteger con CMEK, los discos de arranque y los discos del plano de control.

Antes de comenzar

Completa estas instrucciones para encriptar los discos persistentes recién creados. Puedes habilitar CMEK en un clúster nuevo o existente con una clave de KMS nueva o existente.

Estas instrucciones deben completarse una vez por clúster de GKE. Estas instrucciones crean:

  1. Si es necesario, crea un clúster de GKE.
  2. Implementa el controlador CSI del disco persistente de Compute Engine en tu clúster.
  3. Habilita la API de KMS y crea una clave. Para ello, completa la sección “Antes de comenzar” de Protege recursos con las claves de Cloud KMS mediante estos pasos:

    1. Crea un llavero de claves en la misma región que tu clúster de GKE.
    2. Asigna la función de Encriptador/Desencriptador de CriptoKey de KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) al agente de servicio de Compute Engine (service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com). Esto permite que GKE acceda a la clave.

Crea una StorageClass que haga referencia a la clave de KMS nueva

  1. Copia el siguiente contenido en un archivo YAML. Al resto de esta página, la llamaremos gcepd-sc.yaml. Esta configuración permite el aprovisionamiento dinámico de volúmenes encriptados.

    apiVersion: storage.k8s.io/v1beta1
    kind: StorageClass
    metadata:
      name: csi-gce-pd
    provisioner: pd.csi.storage.gke.io
    parameters:
      type: pd-standard
      disk-encryption-kms-key: projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]
    
    • disk-encryption-kms-key debe ser el identificador de recursos completamente calificado de la clave que se usará para encriptar discos nuevos. Reemplaza los elementos dentro de corchetes según corresponda para hacer referencia a tu clave KMS.
    • Los valores en disk-encryption-kms-key (por ejemplo: keyRings y cryptoKeys) distinguen entre mayúsculas y minúsculas. Cuando se aprovisiona un volumen nuevo con valores incorrectos genera un error invalidResourceUsage.
    • Puedes configurar StorageClass como opción predeterminada.
  2. Implementa StorageClass en tu clúster de GKE con kubectl:

    kubectl apply -f gcepd-sc.yaml
  3. Por último, verifica que tu StorageClass haya usado el controlador de CSI del disco persistente de Compute Engine y se incluya el ID de tu clave.

En el resultado del comando, verifica que se cumplan las siguientes condiciones:

  • El aprovisionador debe estar configurado como pd.csi.storage.gke.io.
  • El ID de tu clave debe seguir disk-encryption-kms-key.

    kubectl describe storageclass csi-gce-pd
    Name:                  csi-gce-pd
    IsDefaultClass:        No
    Annotations:           None
    Provisioner:           pd.csi.storage.gke.io
    Parameters:
    **disk-encryption-kms-key=projects/my-project/locations/my-location/keyRings/my-keyring/cryptoKeys/my-key,type=pd-standard**
    AllowVolumeExpansion:  unset
    MountOptions:          none
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                none
    

Crea un disco persistente encriptado en GKE

En esta sección, aprovisionarás de forma dinámica los volúmenes de almacenamiento encriptados de Kubernetes con StorageClass y la clave de KMS nueva.

Aprovisiona de forma dinámica un disco persistente de Compute Engine encriptado

  1. Copia el contenido que aparece a continuación en un archivo nuevo llamado pvc.yaml y actualiza storageClassName con el nombre de tu StorageClass recién creada.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-gce-pd
  resources:
    requests:
      storage: 6Gi
  1. Aplica el PersistentVolumeClaim (PVC) en tu clúster de GKE con kubectl:

    kubectl apply -f pvc.yaml
  2. Verifica que el PVC se haya creado y vinculado a un PersistentVolume recién aprovisionado. Para ello, obtén el estado del PersistentVolumeClaim de tu clúster.

    kubectl get pvc
    NAME      STATUS    VOLUME
    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    podpvc     Bound     pvc-e36abf50-84f3-11e8-8538-42010a800002   10Gi
        RWO            csi-gce-pd     9s
    

Ahora puedes usar tu disco persistente protegido por CMEK con el clúster de GKE.

Quita la protección con CMEK de un disco persistente

Si deseas quitar la protección con CMEK de un disco persistente, sigue las instrucciones de la documentación de Compute Engine.

Próximos pasos

Para obtener más información sobre CMEK, consulta los siguientes vínculos: