Rota las claves de encriptación del disco de arranque del plano de control y de etcd

En esta página, se muestra cómo rotar las claves de encriptación del disco de arranque de etcd y del plano de control que configuraste para GKE control plane authority. Este documento está dirigido a administradores de clústeres y a ingenieros de seguridad.

Antes de leer este documento, familiarízate con los siguientes conceptos de GKE control plane authority:

Planifica rotaciones de claves

En este documento, se muestra cómo rotar los siguientes componentes de credenciales en tu plano de control:

  • La clave de encriptación para etcd y los discos de arranque del plano de control.
  • Es la clave de encriptación de la copia de seguridad interna de etcd que usa Google Cloud para la recuperación ante desastres.

También puedes rotar las autoridades certificadoras (AC) administradas por el cliente y las claves de firma de la cuenta de servicio que configuras con GKE control plane authority. Para obtener más información, consulta Rota las AC y las claves de firma del plano de control administrado por el cliente.

Las claves de Cloud Key Management Service (Cloud KMS) no vencen. Si tu organización tiene un requisito de seguridad para la rotación de claves, rota las claves de forma manual. Para minimizar las interrupciones en las cargas de trabajo en ejecución, no configures la rotación automática de claves para estas claves.

Cuando rotas las claves de encriptación para los discos de arranque del plano de control y etcd, GKE crea un disco nuevo que se encripta con la clave nueva. En el caso de los clústeres regionales, esta operación no tiene tiempo de inactividad debido al plano de control replicado. En el caso de los clústeres zonales, el plano de control deja de estar disponible hasta que el disco nuevo esté disponible.

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
  • Para usar Google Cloud CLI en esta tarea, instala y, luego, inicializa la gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos de este documento.
  • Tener un clúster existente que use encriptación de etcd y del disco de arranque del plano de control y ejecute la versión 1.35.2-gke.1842000 o posterior de GKE.

  • Identifica los IDs de los siguientes proyectos de Google Cloud :

    • Proyecto de claves: Es el proyecto que contiene tus recursos de Cloud KMS.
    • Proyecto del clúster: Es el proyecto que contiene tu clúster de GKE.
  • Para realizar las tareas de validación de este documento, verifica que el registro de auditoría de acceso a los datos de DATA_READ esté habilitado para la API de Cloud Key Management Service (KMS). Para obtener más información, consulta Habilita los registros de auditoría de acceso a los datos.

Roles y permisos requeridos

Para obtener los permisos que necesitas para rotar tus AC y claves administradas por el cliente, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Limitaciones

Puedes actualizar tus clústeres a versiones nuevas de claves existentes, pero no puedes actualizarlos para que usen claves completamente nuevas para estas operaciones de encriptación.

Otorga roles de IAM al agente de servicio de GKE

Para rotar tus claves de encriptación de los discos de arranque y etcd, otorga el rol de usuario de claves de criptografía de KMS de Kubernetes Engine (roles/container.cloudKmsKeyUser) en las claves de encriptación de tu proyecto de claves al agente de servicio de GKE en tu proyecto de clúster:

gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
    --keyring=KEYRING_NAME \
    --location=LOCATION \
    --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role=roles/container.cloudKmsKeyUser \
    --project=KEY_PROJECT_ID

Reemplaza lo siguiente:

  • KCP_DISK_KEY_NAME: Es el nombre de la clave de encriptación para los discos de arranque del plano de control y los discos etcd.
  • KEYRING_NAME: el nombre del llavero de claves que contiene la clave.
  • LOCATION: Es la ubicación de Google Cloud del llavero de claves. Debe ser la misma que la ubicación de tu clúster. Para obtener una lista de regiones, filtra por "Región" en la tabla de ubicaciones de Cloud KMS.
  • CLUSTER_PROJECT_NUMBER: Es el número de proyecto numérico del proyecto del clúster.
  • KEY_PROJECT_ID: Es el ID del proyecto de tu proyecto de claves.

Rota la clave para etcd y los discos de arranque del plano de control

  1. Crea una nueva versión de clave primaria para el disco de arranque y la clave de encriptación de etcd:

    gcloud kms keys versions create \
        --key=KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    Los cambios pueden tardar hasta 10 minutos en propagarse en el proyecto.

  2. Busca la versión actual del parche del plano de control del clúster:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format='value(currentMasterVersion)'
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre del clúster de GKE.
    • LOCATION: Es la ubicación del plano de control del clúster de GKE, como us-central1.
  3. Actualiza el plano de control del clúster a la misma versión que ya usa.

    gcloud container clusters upgrade CLUSTER_NAME \
        --master \
        --location=LOCATION \
        --cluster-version=CONTROL_PLANE_VERSION \
        --project=CLUSTER_PROJECT_ID
    

    Reemplaza lo siguiente:

    • CONTROL_PLANE_VERSION: Es la versión del plano de control del clúster del resultado del paso anterior.
    • CLUSTER_PROJECT_ID: Es el ID del proyecto de tu proyecto de clúster.

Una vez que se completa la operación de actualización del plano de control, el clúster usa la versión de clave nueva para encriptar los discos de arranque del plano de control y los discos etcd.

Rota la clave de encriptación de la copia de seguridad interna de etcd

En esta sección, se muestra cómo rotar la clave de encriptación de la copia de seguridad interna de etcd, que Google Cloud usa para la recuperación ante desastres. Puedes configurar la rotación automática para esta clave, pero te recomendamos que realices la rotación manual. Después de rotar la clave, el clúster usa la nueva versión de la clave para encriptar las copias de seguridad internas de etcd nuevas.

Las copias de seguridad internas de etcd usan la versión de clave primaria y se realizan en los siguientes intervalos:

  • Cada 30 minutos para los clústeres zonales
  • Cada 10 minutos para los clústeres de Autopilot y los clústeres estándar regionales.

Después de rotar la clave, no inhabilites ni destruyas de inmediato la versión anterior de la clave. Espera hasta que haya pasado suficiente tiempo para que GKE cree nuevas copias de seguridad internas de etcd que usen la nueva versión de la clave.

  • Crea una nueva versión de clave primaria para la clave de encriptación de la copia de seguridad interna de etcd:

    gcloud kms keys versions create \
        --key=ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --primary
    

    Reemplaza lo siguiente:

    • ETCD_BACKUP_KEY_NAME: Es el nombre de la clave de encriptación de la copia de seguridad interna de etcd.
    • KEYRING_NAME: el nombre del llavero de claves que contiene la clave.
    • LOCATION: Es la ubicación de Google Cloud del llavero de claves. Debe ser la misma que la ubicación de tu clúster. Para obtener una lista de regiones, filtra por "Región" en la tabla de ubicaciones de Cloud KMS.
    • KEY_PROJECT_ID: Es el ID del proyecto de tu proyecto de claves.

¿Qué sigue?