Encripta los datos en uso de cargas de trabajo con Confidential GKE Nodes


En esta página, se muestra cómo aplicar la encriptación de datos en uso en tus nodos y cargas de trabajo mediante Confidential Google Kubernetes Engine Nodes. La aplicación forzosa de la encriptación puede ayudar a aumentar la seguridad de tus cargas de trabajo.

Esta página está dirigida a especialistas en seguridad que implementan medidas de seguridad en GKE. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Tareas y roles comunes de los usuarios de GKE Enterprise.

Antes de leer esta página, asegúrate de estar familiarizado con el concepto de datos en uso.

Puedes encriptar tus cargas de trabajo con Confidential GKE Nodes o el modo confidencial de Hyperdisk Balanced.

Confidential GKE Nodes

Los Confidential GKE Nodes están creados sobre las Confidential VMs de Compute Engine y usa la Secure Encrypted Virtualization (SEV) de AMD, la cual se encarga de encriptar los contenidos de las memorias en uso de las VM. La encriptación en uso es uno de los tres estados de la encriptación de extremo a extremo.

Confidential GKE Nodes no cambia las medidas de seguridad que GKE aplica a los planos de control de los clústeres. Para obtener información sobre estas medidas, consulta Seguridad del plano de control. Para obtener visibilidad sobre quién accede a los planos de control en tus Google Cloud proyectos, usa Transparencia de acceso.

Para habilitar Confidential GKE Nodes, puedes hacer lo siguiente:

  • Crea un clúster nuevo
  • Implementa una carga de trabajo con el aprovisionamiento automático de nodos
  • Crea un grupo de nodos
  • Actualiza un grupo de nodos existente

No puedes actualizar un clúster existente para cambiar la configuración de Confidential GKE Nodes a nivel de clúster.

En la siguiente tabla, se muestra el comportamiento de GKE que se aplica cuando habilitas Confidential GKE Nodes:

Configura Confidential GKE Nodes Cómo configurar Comportamiento
Nivel de clúster Crea un clúster nuevo en modo Autopilot o Standard

Todos los nodos usan Confidential GKE Nodes. Esta operación es irreversible. No puedes anular la configuración de nodos individuales.

En los clústeres de GKE Autopilot, todos los nodos usan automáticamente la serie de máquinas predeterminada para la clase de procesamiento equilibrada, que es N2D.

Nivel de grupo de nodos
  • Crea un grupo de nodos estándar nuevo
  • Actualiza un grupo de nodos Standard existente
GKE encripta el contenido de la memoria de los nodos en ese grupo de nodos. Esto solo es posible si Confidential GKE Nodes está inhabilitado a nivel del clúster.

Modo confidencial para Hyperdisk Balanced

También puedes habilitar el modo confidencial para Hyperdisk Balanced en el almacenamiento del disco de arranque, que encripta tus datos en enclaves adicionales respaldados por hardware.

Puedes habilitar el modo confidencial para Hyperdisk Balanced cuando realices una de las siguientes acciones:

  • Crea un clúster nuevo
  • Crear un grupo de nodos nuevo

No puedes actualizar un clúster o un grupo de nodos existentes para cambiar la configuración de modo confidencial de Hyperdisk Balanced.

En la siguiente tabla, se muestra el comportamiento de GKE que se aplica cuando habilitas el modo confidencial para el parámetro de configuración Hyperdisk Balanced a nivel del clúster o del grupo de nodos:

Configuración del modo confidencial para Hyperdisk Balanced Cómo configurar Comportamiento
Nivel de clúster Crea un clúster nuevo Solo el grupo de nodos predeterminado del clúster usará el modo confidencial para la configuración de Hyperdisk Balanced. No puedes hacer lo siguiente:
  • Inhabilitar el modo confidencial para el parámetro de configuración de Hyperdisk Balanced en un grupo de nodos existente en el clúster
  • Habilita el modo confidencial para el parámetro de configuración Hyperdisk Balanced en clústeres existentes
Nivel de grupo de nodos Crear un grupo de nodos nuevo Puedes configurar el modo confidencial para el parámetro de configuración de Hyperdisk Balanced para cualquier grupo de nodos nuevo en el momento de la creación. No puedes actualizar los grupos de nodos existentes para usar el modo confidencial de Hyperdisk Balanced.

Precios

Se aplican los siguientes precios:

  • Autopilot:

    1. Generas costos según los precios de la clase de procesamiento balanceada porque, cuando habilitas Confidential GKE Nodes, se cambia la serie de máquinas predeterminada del clúster a N2D. Para obtener detalles sobre los precios, consulta Precios de Autopilot.
    2. Incurre en costos por Confidential GKE Nodes, además de los precios de GKE Autopilot. Para obtener más información, consulta la sección "Precios de Confidential GKE Nodes en GKE Autopilot" en Precios de VMs confidenciales.
  • Estándar: No se aplican costos adicionales por implementar Confidential GKE Nodes, excepto el costo de la Confidential VM de Compute Engine. Sin embargo, los Confidential GKE Nodes pueden generar un poco más de datos de registro en el inicio que los nodos estándar. Para obtener información sobre el precio de los registros, consulta Precios de Google Cloud Observability.

Disponibilidad

Confidential GKE Nodes tiene los siguientes requisitos de disponibilidad:

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Usa Confidential GKE Nodes en Autopilot

Puedes habilitar Confidential GKE Nodes para un clúster de Autopilot completo, lo que hace que cada nodo sea un nodo confidencial. Todas tus cargas de trabajo se ejecutan en nodos confidenciales sin necesidad de realizar cambios en los manifiestos de cargas de trabajo. Si habilitas Confidential GKE Nodes, la serie de máquinas predeterminada del clúster cambiará a N2D.

Habilita Confidential GKE Nodes en un clúster de Autopilot nuevo

Ejecuta el siguiente comando:

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --enable-confidential-nodes

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre del clúster de Autopilot.
  • LOCATION: La ubicación de Compute Engine del clúster.

El clúster debe ejecutar la versión 1.30.2 o una posterior. Para configurar una versión específica cuando creas un clúster, consulta Configura la versión y el canal de versiones de un nuevo clúster de Autopilot.

Usa Confidential GKE Nodes en el modo estándar

Puedes habilitar Confidential GKE Nodes a nivel del clúster o del grupo de nodos en el modo estándar.

Habilita Confidential GKE Nodes en clústeres Standard

Puedes crear un clúster nuevo con Confidential GKE Nodes habilitados mediante gcloud CLI o la consola de Google Cloud. Si habilitas Confidential GKE Node a nivel de clúster, todos los nodos del clúster son Confidential VM.

También puedes usar Confidential GKE Nodes en clústeres que usan el aprovisionamiento automático de nodos para escalar grupos de nodos de forma automática.

Al crear un clúster nuevo, especifica la opción --enable-confidential-nodes en la CLI de gcloud:

gcloud container clusters create CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --enable-confidential-nodes

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre del clúster nuevo.
  • MACHINE_TYPE: Es el tipo de máquina para el grupo de nodos predeterminado del clúster, que debe ser el tipo de máquina N2D, C2D o C3D.
  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. En la sección Estándar, haz clic en Configurar.

  4. En el panel de navegación, en Clúster, haz clic en Seguridad.

  5. Selecciona la casilla de verificación Habilitar Confidential GKE Node.

  6. Configura tu clúster según sea necesario.

  7. Haga clic en Crear.

Consulta Crea un clúster regional para obtener más detalles sobre la creación de clústeres.

Después de crear un clúster con Confidential GKE Node, cualquier grupo de nodos creado en este clúster solo puede usar nodos confidenciales. No puedes crear grupos de nodos normales en clústeres con Confidential GKE Nodes habilitado. Tampoco puedes inhabilitar Confidential GKE Nodes en grupos de nodos individuales cuando habilitas Confidential GKE Nodes a nivel de clúster.

En el caso de cualquier grupo de nodos creado con el modo confidencial para la configuración de Hyperdisk Balanced, solo los nodos del grupo de nodos están restringidos a la configuración de configuración. Para los grupos de nodos nuevos que se creen en el clúster, debes configurar el modo confidencial en el momento de la creación.

Habilita Confidential GKE Node en grupos de nodos

Puedes habilitar Confidential GKE Node en grupos de nodos específicos si Confidential GKE Node está inhabilitado a nivel de clúster.

El parámetro de configuración de modo confidencial para Hyperdisk Balanced se debe especificar durante la solicitud de creación del grupo de nodos.

Crear un grupo de nodos nuevo

Para crear un grupo de nodos nuevo con Confidential GKE Node habilitado, ejecuta el siguiente comando:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --enable-confidential-nodes
.

Reemplaza lo siguiente:

  • NODE_POOL_NAME: es el nombre de tu grupo de nodos nuevo.
  • CLUSTER_NAME: El nombre de tu clúster.
  • MACHINE_TYPE: Es el tipo de máquina para tu grupo de nodos, que debe ser un tipo de máquina N2D, C2D o C3D.

Actualiza un grupo de nodos existente

Puedes habilitar los Confidential GKE Node en grupos de nodos existentes que usen los tipos de máquinas N2D, C2D o C3D. Ejecuta el siguiente comando:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-confidential-nodes

Reemplaza lo siguiente:

  • NODE_POOL_NAME: es el nombre de tu grupo de nodos.
  • CLUSTER_NAME: El nombre de tu clúster.

Este cambio requiere que se vuelvan a crear los nodos, lo que puede causar interrupciones en tus cargas de trabajo en ejecución. Para obtener detalles sobre este cambio específico, busca la fila correspondiente en la tabla Cambios manuales que vuelven a crear los nodos con una estrategia de actualización de nodos sin respetar las políticas de mantenimiento. Para obtener más información sobre las actualizaciones de nodos, consulta Planifica las interrupciones de actualización de nodos.

Coloca las cargas de trabajo solo en grupos de nodos de Confidential GKE Node

Si habilitas Confidential GKE Node a nivel del clúster, todas tus cargas de trabajo se ejecutan en nodos confidenciales. No es necesario que realices cambios en tus manifiestos. Sin embargo, si solo habilitas Confidential GKE Node para grupos de nodos específicos, debes expresar de forma declarativa que tus cargas de trabajo solo deben ejecutarse en grupos de nodos con Confidential GKE Node. Usa el selector de nodos cloud.google.com/gke-confidential-nodes, como en el siguiente ejemplo:

apiVersion: v1
kind: Pod
spec:
  containers:
  - name: my-confidential-app
    image: us-docker.pkg.dev/myproject/myrepo/my-confidential-app
  nodeSelector:
    cloud.google.com/gke-confidential-nodes: "true"

Verifica que Confidential GKE Nodes estén habilitados

Puedes verificar si tus clústeres o nodos usan Confidential GKE Node inspeccionándolos.

En clústeres de modo Autopilot o Standard

Puedes verificar que tu clúster de Autopilot o Standard esté utilizando Confidential GKE Nodes con gcloud CLI o la consola de Google Cloud.

Describe el clúster:

gcloud container clusters describe CLUSTER_NAME

Si Confidential GKE Nodes están habilitados, se incluyen las siguientes líneas en el resultado del comando:

confidentialNodes:
  enabled: true
  1. Ve a la página de Google Kubernetes Engine en la consola de Google Cloud.

    Ir a Google Kubernetes Engine

  2. Haz clic en el nombre del clúster que deseas inspeccionar.

  3. Debajo de Seguridad, en el campo Confidential GKE Nodes, verifica si los Confidential GKE Node están Habilitados.

En nodos del modo Autopilot o Standard

Para verificar si nodos específicos de Autopilot o Standard usan Confidential GKE Node, haz lo siguiente:

  1. Busca el nombre del nodo:

    kubectl get nodes
    
  2. Describe el nodo:

    kubectl describe NODE_NAME
    

    Reemplaza NODE_NAME por el nombre de un nodo que deseas inspeccionar.

Si Confidential GKE Nodes está habilitado, el resultado incluye lo siguiente:

# lines omitted for clarity
cloud.google.com/gke-confidential-nodes=true

En grupos de nodos de modo Standard

Para verificar que tu grupo de nodos use Confidential GKE Node, ejecuta el siguiente comando:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME

Si Confidential GKE Node están habilitado, el resultado es similar al siguiente:

confidentialNodes:
  enabled: true

Si el parámetro de configuración de modo confidencial para Hyperdisk Balanced está habilitado, el resultado es similar al siguiente:

enableConfidentialStorage: true

En nodos individuales del modo estándar

Para validar la confidencialidad de los nodos específicos en los clústeres estándar, puedes hacer lo siguiente:

  1. La validación de la SEV de AMD está habilitada, o
  2. Validar Confidential VM mediante Cloud Monitoring.

Establece restricciones de políticas de la organización

Puedes definir una restricción de política de la organización para garantizar que todos los recursos de VM creados en tu organización sean instancias de Confidential VMs. Para GKE, puedes personalizar la restricción Restringir el procesamiento no confidencial para exigir que todos los clústeres nuevos se creen con Confidential GKE Nodes habilitados. Agrega el nombre del Service de la API container.googleapis.com a la lista de denegación cuando apliques restricciones de políticas de la organización, por ejemplo:

gcloud resource-manager org-policies deny \
    constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
    --project=PROJECT_ID

Reemplaza PROJECT_ID con el ID del proyecto.

Crea un PersistentVolume para el modo confidencial de Hyperdisk Balanced

Para obtener orientación sobre los valores permitidos de capacidad de procesamiento o IOPS, consulta Planifica el nivel de rendimiento del volumen de Hyperdisk.

En los siguientes ejemplos, se muestra cómo puedes crear un modo confidencial para la StorageClass de Hyperdisk Balanced para cada tipo de Hyperdisk:

  1. Guarda el siguiente manifiesto como un archivo llamado confidential-hdb-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
      enable-confidential-storage: true
      disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
    

    Reemplaza lo siguiente:

    • KMS_PROJECT_ID: Es el proyecto que posee la clave de Cloud KMS
    • REGION: Es la región en la que se encuentra el disco.
    • KEY_RING: es el nombre del llavero de claves que incluye la clave.
    • HSM_KEY_NAME: Es el nombre de la clave de HSM que se usa para encriptar el disco.
  2. Crea la StorageClass:

    kubectl create -f hdb-example-class.yaml
    
  3. Crea un derecho de volumen persistente de Hyperdisk para GKE que use el modo confidencial para el volumen de Hyperdisk Balanced.

Para encontrar el nombre de la StorageClass disponible en tu clúster, ejecuta el siguiente comando:

kubectl get sc

Limitaciones

Confidential GKE Nodes tienen las siguientes limitaciones:

Inhabilitar Confidential GKE Node

Solo puedes inhabilitar Confidential GKE Nodes en grupos de nodos de modo estándar. Si el grupo de nodos está en un clúster que usa Confidential GKE Nodes a nivel del clúster, no puedes inhabilitar la función a nivel del grupo de nodos.

  • Consulta la sección Limitaciones para obtener más información sobre el modo confidencial de Hyperdisk Balanced.
  • El modo confidencial para Hyperdisk Balanced solo es compatible con Confidential GKE Node.

Limitaciones de la migración en vivo

Ciertos tipos de máquinas de Confidential VM de Compute Engine admiten la migración en vivo lo que minimiza la posible interrupción de la carga de trabajo a causa del evento de mantenimiento del host. La migración en vivo se produce en las siguientes versiones de GKE:

  • 1.27.10-gke.1218000 y versiones posteriores
  • 1.28.6-gke.1393000 y versiones posteriores
  • 1.29.1-gke.1621000 y versiones posteriores

Si tus grupos de nodos ya ejecutaban una versión compatible cuando se agregó la migración activa, actualiza los grupos de nodos de forma manual a la misma versión compatible o a una diferente. La actualización de los nodos activa la recreación de nodos, y los nodos nuevos tienen habilitada la migración en vivo.

Para obtener detalles sobre qué tipos de máquinas de Compute Engine admiten la migración, consulta Parámetros de configuración compatibles.

Si se trata de un evento de mantenimiento del host, en un nodo que no admite la migración en vivo, el nodo ingresa en un estado de NotReady. Los Pods en ejecución experimentarán interrupciones hasta que el nodo vuelva a estar listo. Si el mantenimiento lleva más de cinco minutos, GKE podría intentar volver a crear los Pods en otros nodos.

Inhabilitar Confidential GKE Nodes

La inhabilitación de Confidential GKE Node solo funciona para los grupos de nodos que habilitaron Confidential GKE Node. Si el clúster se crea con Confidential GKE Node, no puedes inhabilitar la función. Ejecuta el siguiente comando para inhabilitar los Confidential GKE Nodes en un grupo de nodos:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --no-enable-confidential-nodes

Este cambio requiere que se vuelvan a crear los nodos, lo que puede causar interrupciones en tus cargas de trabajo en ejecución. Para obtener detalles sobre este cambio específico, busca la fila correspondiente en la tabla Cambios manuales que vuelven a crear los nodos con una estrategia de actualización de nodos sin respetar las políticas de mantenimiento. Para obtener más información sobre las actualizaciones de nodos, consulta Planifica las interrupciones de actualización de nodos.

¿Qué sigue?