Información acerca de CMEK en Copia de seguridad para GKE

De forma predeterminada, la Copia de seguridad para GKE encripta el contenido del cliente en reposo. Copia de seguridad para GKE controla la encriptación por ti sin que debas realizar ninguna acción adicional. Esta opción se denomina Encriptación predeterminada de Google.

Si deseas controlar tus claves de encriptación, puedes usar las claves de encriptación administradas por el cliente (CMEK) en Cloud KMS con servicios integrados en CMEK, incluida la Copia de seguridad para GKE. El uso de claves de Cloud KMS te permite controlar su nivel de protección, ubicación, programa de rotación, permisos de uso y acceso, y límites criptográficos. El uso de Cloud KMS también te permite ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google posea y administre las claves de encriptación de claves (KEK) simétricas que protegen tus datos, tú las controlas y administras en Cloud KMS.

Después de configurar tus recursos con CMEK, la experiencia de acceso a tus recursos de Copia de seguridad para GKE es similar a usar la encriptación predeterminada de Google. Para obtener más información sobre tus opciones de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).

Descripción general

Existen dos tipos de artefactos de datos del usuario que la Copia de seguridad para GKE produce y almacena:

  • Copia de seguridad de configuración: Un conjunto de descripciones de recursos de Kubernetes extraído del servidor de la API del clúster que se somete a una copia de seguridad y que captura el estado del clúster.
  • Copias de seguridad de volúmenes: Un conjunto de copias de seguridad de volúmenes que corresponden a los recursos PersistentVolumeClaim que se encuentran en la copia de seguridad de la configuración.

De forma predeterminada, todos los artefactos que produce la Copia de seguridad para GKE se encriptan en reposo con una clave proporcionada por Google.

Sin embargo, puedes elegir que estos artefactos se encripten a través de una clave de encriptación administrada por el cliente (CMEK) que se administra con Cloud Key Management Service.

Habilita la encriptación de CMEK

La habilitación de la encriptación de CMEK implica dos pasos:

  • Designa una clave para encriptar las copias de seguridad producidas para un BackupPlan.

  • Otorga acceso a las claves correspondientes mediante las cuentas de servicio adecuadas.

Para cualquier situación de copia de seguridad específica, puede haber tres claves CMEK involucradas:

  • bplan_key: Esta es la clave a la que haces referencia cuando creas o actualizas BackupPlan. Cuando sea posible, esta clave se usará para encriptar todos los artefactos de la copia de seguridad. Esta clave debe estar en la misma región que el BackupPlan (consulta Acerca de las ubicaciones de los recursos).

  • orig_disk_key: Si encriptaste los volúmenes de discos persistentes con una clave CMEK, las copias de seguridad de volumen que produce la Copia de seguridad para GKE para esos volúmenes se encriptarán con esta clave, incluso si se registra una clave diferente con el BackupPlan.

  • new_disk_key: Esta es la clave CMEK que deseas usar para encriptar volúmenes que restableciste desde la copia de seguridad. StorageClass hace referencia a esta en el clúster de destino del restablecimiento.

Hay cuatro cuentas de servicio diferentes que pueden requerir acceso a las claves CMEK:

  • agent_robot: Se le debe otorgar acceso a esta cuenta de servicio a bplan_key. Esta cuenta de servicio tendrá el siguiente formato: service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com, en el que PROJECT_NUMBER es el número de tu proyecto de Google Cloud .

  • non_cmek_service_agent: Cuando se crean copias de seguridad de volúmenes no encriptados con CMEK, esta cuenta de servicio debe tener acceso a bplan_key. Esta cuenta de servicio tendrá el siguiente formato: service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com, en el que PROJECT_NUMBER es el número de tu proyecto de Google Cloud .

  • cmek_service_agent: Cuando se crean copias de seguridad de volúmenes encriptados con CMEK, esta cuenta de servicio debe tener acceso a orig_disk_key. Esta cuenta de servicio tendrá el siguiente formato: service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, en el que TENANT_PROJECT_NUMBER es el número del proyecto de usuario asignado a tu BackupPlan.

  • compute_service_agent: Esta cuenta de servicio se usa cuando se crean nuevos volúmenes encriptados para un clúster y se le debe otorgar acceso a new_disk_key. Esta cuenta de servicio tendrá el siguiente formato: service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, en el que PROJECT_NUMBER es el número de tu proyecto de Google Cloud .

Si diskEncryptionKey.kmsKeyServiceAccount está configurado para los discos, deberás realizar los siguientes pasos antes de crear una copia de seguridad:

  • Inhabilita la política de la organización iam.disableCrossProjectServiceAccountUsage para habilitar el uso de la identidad temporal como cuenta de servicio en todos los proyectos:

      gcloud resource-manager org-policies disable-enforce \
          iam.disableCrossProjectServiceAccountUsage
          --project=PROJECT_ID
    
  • Otorga a cmek_service_agent el rol de roles/iam.serviceAccountTokenCreator para crear credenciales de corta duración:

      gcloud iam service-accounts add-iam-policy-binding \
        # Replace the email with the value from
        # `diskEncryptionKey.kmsKeyServiceAccount`
        your-kms-key-service-acount@PROJECT_ID.iam.gserviceaccount.com \
        --member=service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

Si realizas una operación de copia de seguridad o restablecimiento entre proyectos, se deben enumerar tres nombres de proyectos:

  • cluster_project: Es el proyecto que contiene el clúster del que deseas crear una copia de seguridad.

  • backup_project: Es el proyecto en el que deseas que se almacenen tus copias de seguridad.

  • restore_project: Es el proyecto que contiene el clúster de destino de la restauración.

En la siguiente tabla, se resume qué cuentas de servicio deben tener acceso a qué claves en varias situaciones:

Artefacto Cuenta de servicio Número del proyecto Clave
clúster de copia de seguridad de configuración agent_robot
  • cluster_project (durante la copia de seguridad)
  • restore_project (durante el restablecimiento)
bplan_key
copia de seguridad del volumen encriptado con CMEK cmek_service_agent backup_project orig_disk_key
copia de seguridad del volumen encriptado por Google non_cmek_service_agent backup_project bplan_key
Volumen nuevo encriptado con CMEK creado durante el restablecimiento compute_service_agent restore_project new_disk_key

Puedes optar por otorgar acceso a las claves a nivel de proyecto, lo que otorga acceso a todas las claves de ese proyecto o a la clave individual.

Otorga acceso a nivel del proyecto

Puedes otorgar acceso a las claves a nivel de proyecto, lo que otorga acceso a todas las claves de ese proyecto.

Sigue estas instrucciones para otorgar acceso a nivel del proyecto.

Console

  1. En la consola de Google Cloud , ve a la página IAM.

    Ir a IAM

  2. Haz clic en Otorgar acceso.

  3. En el campo Principales nuevas, ingresa la dirección de correo electrónico de la cuenta de servicio.

  4. En la lista Seleccionar un rol, selecciona el rol de Encriptador/desencriptador de CryptoKey de Cloud KMS.

  5. Haz clic en Guardar.

gcloud

  1. Otorga acceso a nivel del proyecto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto al que deseas otorgar acceso.
    • PROJECT_NUMBER: Es el número del proyecto al que deseas otorgar acceso.

Terraform

  1. Otorga acceso a nivel del proyecto.

    resource "google_project_iam_member" "example_iam_member" {
    project = "PROJECT_ID"
    role    = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member  = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto al que deseas otorgar acceso.
    • PROJECT_NUMBER: Es el número del proyecto al que deseas otorgar acceso.

Otorga acceso a nivel de la llave

Sigue estas instrucciones para otorgar acceso a nivel de la clave individual.

Console

  1. En la consola de Google Cloud , ve a la página Administración de claves.

    Ir a Administración de claves

  2. Haz clic en el nombre del llavero de claves.

  3. Haz clic en el nombre de la clave.

  4. Haz clic en la pestaña Permisos.

  5. Haz clic en Otorgar acceso.

  6. En el campo Principales nuevas, ingresa la dirección de correo electrónico de la cuenta de servicio.

  7. En la lista Seleccionar un rol, selecciona el rol de Encriptador/desencriptador de CryptoKey de Cloud KMS.

  8. Haz clic en Guardar.

gcloud

  1. Otorga acceso a nivel de la clave individual.

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Reemplaza lo siguiente:

    • KEY_NAME: el nombre de la clave.
    • KEY_RING: el nombre del llavero de claves que incluye la clave
    • LOCATION: la ubicación de Cloud KMS del llavero de claves.
    • PROJECT_NUMBER: Es el número del proyecto al que deseas otorgar acceso.

Terraform

  1. Otorga acceso a nivel de la clave individual.

    resource "google_kms_crypto_key_iam_member" "crypto_key_iam_member" {
    crypto_key_id = "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
    role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member        = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" 
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto al que deseas otorgar acceso.
    • LOCATION: la ubicación de Cloud KMS del llavero de claves.
    • KEY_RING: el nombre del llavero de claves que incluye la clave
    • KEY_NAME: el nombre de la clave.
    • PROJECT_NUMBER: Es el número del proyecto al que deseas otorgar acceso.

Limitaciones y consideraciones de uso

  • Si deseas crear una copia de seguridad de un volumen encriptado con CMEK, debes otorgar acceso a la clave de ese disco, incluso si no habilitas la encriptación de CMEK en el BackupPlan.

  • Las claves CMEK deben estar en la misma región que BackupPlan para garantizar que una interrupción regional no quite el acceso a la clave mientras las copias de seguridad aún son accesibles. Sin embargo, esta restricción no se puede aplicar para las claves compartidas con volúmenes encriptados. Cuando se usan volúmenes encriptados, es posible que una restauración falle, incluso cuando hay una copia de seguridad disponible, porque la clave de encriptación del disco puede no estar almacenada en la misma región que la copia de seguridad.

Usa y administra claves externas

Puedes usar Cloud External Key Manager (Cloud EKM) para crear y administrar claves externas. Las claves externas son punteros a claves que residen fuera de Google Cloud. Estas claves residen en un socio de administración de claves externas compatible. Para obtener más información, consulta Cloud External Key Manager.

Después de crear una clave externa con Cloud EKM, puedes aplicarla a un plan de copia de seguridad nuevo. Para ello, proporciona el ID de esa clave cuando crees un plan de copia de seguridad nuevo. Este procedimiento es el mismo que el de aplicar una clave de Cloud KMS a un plan de copias de seguridad nuevo.

Puedes usar Key Access Justifications (KAJ) como parte de Cloud EKM. Key Access Justifications te permite ver el motivo de cada solicitud de Cloud EKM. Además, según la justificación proporcionada, puedes aprobar o rechazar una solicitud de forma automática. Para obtener más información, consulta la Descripción general.