Encripta los discos de arranque de etcd y del plano de control


En esta página, se muestra cómo encriptar los datos almacenados en tu plano de control de Google Kubernetes Engine (GKE) con claves que administras en Cloud Key Management Service (Cloud KMS). Ya deberías conocer conceptos como etcd, la arquitectura del clúster de GKE y Cloud KMS.

En esta página, se describe una parte de un conjunto de funciones opcionales del plano de control en GKE que te permiten realizar tareas como verificar la postura de seguridad del plano de control o configurar la encriptación y la firma de credenciales en el plano de control con claves que administras. Para obtener más detalles, consulta Acerca de la autoridad del plano de control de GKE.

De forma predeterminada, Trusted Cloud aplica varias medidas de seguridad al plano de control administrado. En esta página, se describen las capacidades opcionales que te brindan más visibilidad o control sobre el plano de control de GKE.

Información sobre la encriptación del disco de arranque y de etcd del plano de control

De forma predeterminada, GKE encripta el disco de arranque de un nodo del plano de control, el disco que almacena datos en etcd y la copia de seguridad operativa interna de Trusted Cloud by S3NS etcd con claves de encriptación que Trusted Cloudadministra. Para obtener detalles sobre esta encriptación predeterminada, consulta Encriptación en reposo predeterminada. Opcionalmente, puedes usar tus propias claves de encriptación que administras con Cloud KMS para encriptar estos recursos. Para obtener más información, consulta Encriptación del disco de arranque y de etcd del plano de control.

Creas claves en Cloud KMS que GKE usa para encriptar los recursos del plano de control. Ten en cuenta lo siguiente cuando crees estos recursos:

  • Puedes usar un llavero de claves para todas las claves de un clúster, independientemente del propósito de cada clave. Si tienes un llavero de claves existente que usaste para un propósito diferente, como configurar tus propias autoridades certificadoras, puedes usar ese llavero de claves para esta guía.
  • Debes crear las claves en la misma ubicación Trusted Cloud que tu clúster para obtener una mejor latencia.
  • En la mayoría de los casos de uso, puedes usar el nivel de protección de claves de Cloud KMS software. También puedes usar claves de hardware con Cloud HSM.
  • Debes especificar la marca --purpose con el valor encryption porque estas claves se usan para la encriptación simétrica.
  • No debes modificar la duración predeterminada para la destrucción de claves.

Uso con otras funciones de la autoridad del plano de control de GKE

La autoridad del plano de control de GKE proporciona las siguientes funciones relacionadas con las claves autoadministradas que debes habilitar al mismo tiempo cuando creas un clúster:

Solo puedes habilitar estas funciones cuando creas un clúster de GKE nuevo. No puedes actualizar los clústeres existentes para usar estas funciones. Para usar ambas funciones en el mismo clúster, realiza todos los procedimientos de configuración de claves y de la CA en ambas guías y, luego, ejecuta el comando de creación del clúster que habilita ambos conjuntos de funciones, como se describe en la sección Crea un clúster.

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.
  • Asegúrate de que tu proyecto de claves tenga un llavero de claves de Cloud KMS para tu clúster. Puedes usar cualquier llavero de claves existente en la ubicación de tu clúster. Para crear un llavero de claves nuevo, consulta Crea un llavero de claves.
  • Enable the Cloud Key Management Service API.

    Enable the API

Identifica proyectos

Te recomendamos que uses proyectos Trusted Cloud separados de la siguiente manera:

  • Proyecto de claves: Contiene todas las claves.
  • Proyecto del clúster: Contiene tus clústeres de GKE.

De manera opcional, puedes usar el mismo proyecto para tus claves y clústeres de GKE, pero te recomendamos que uses proyectos separados para que los equipos que administran tus claves y operaciones criptográficas estén separados de los equipos que administran tus clústeres.

Roles y permisos requeridos

Para obtener los permisos que necesitas para ejecutar tus propias claves de encriptación, 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.

Requisitos

Tu clúster debe ejecutar la versión 1.31.1-gke.1846000 de GKE o una posterior.

Limitaciones

  • Solo puedes configurar las claves de encriptación del disco de arranque y de etcd durante la creación del clúster.
  • En el caso de los clústeres regionales en modo Estándar y los clústeres de Autopilot, la región en la que crees un clúster debe tener capacidad para el modo confidencial de Hyperdisk Balanced en al menos tres zonas de esa región.

    En el caso de los clústeres zonales en modo Standard, la zona del clúster debe tener capacidad de Hyperdisk Balanced. Si necesitas ayuda con la capacidad, comunícate con Atención al cliente de Cloud.

  • GKE solo admite claves de Cloud KMS. No puedes usar otro proveedor de KMS de Kubernetes ni otro proveedor de encriptación.

  • No se admiten las claves de Cloud External Key Manager (Cloud EKM).

  • No puedes acceder a las copias de seguridad operativas internas de etcd ni interactuar con ellas, ya que solo se utilizan para la recuperación ante desastres. Trusted Cloud

  • No se admiten los llaveros multirregionales. Debes usar un llavero de claves regional.

  • Las regiones y zonas en las que puedes usar la autoridad del plano de control de GKE dependen de si también deseas usar funciones específicas, como se indica a continuación:

    • Para encriptar los discos de arranque del plano de control con una clave de encriptación administrada por el cliente, tu clúster debe estar en una de las siguientes regiones:
      • asia-east1
      • asia-northeast1
      • asia-southeast1
      • europe-west1
      • europe-west4
      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-south1
      • us-west1
      • us-west3
      • us-west4
    • Para usar Confidential GKE Nodes con la autoridad del plano de control de GKE, tu clúster debe estar en una región que admita el modo confidencial para Hyperdisk Balanced.

    Si no usas estas funciones, puedes usar la autoridad del plano de control de GKE en cualquier ubicación de Trusted Cloud .

Crea claves

En esta sección, crearás una clave de encriptación para los discos de arranque y los discos de etcd en tu plano de control, y una clave de encriptación independiente para la copia de seguridad operativa interna de etcd Trusted Cloud. Puedes usar un llavero de claves para guardar todas estas claves y cualquier otra clave del clúster.

  1. Crea la clave de encriptación para los discos de arranque y los discos de etcd del plano de control:

    gcloud kms keys create KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --purpose="encryption" \
        --protection-level=PROTECTION_LEVEL \
        --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 y los discos de etcd del plano de control.
    • KEYRING_NAME: Es el nombre del llavero de claves que contendrá las claves de encriptación del clúster.
    • LOCATION: Es la ubicación Trusted Cloud del llavero de claves. Debe ser la misma que la ubicación del clúster. Para obtener una lista de regiones, filtra por "Región" en la tabla de ubicaciones de Cloud KMS.
    • PROTECTION_LEVEL: Es el nivel de protección de la clave, como software o hsm.
    • KEY_PROJECT_ID: Es el ID del proyecto de tu proyecto de claves.
  2. Crea la clave de encriptación de la copia de seguridad interna de etcd:

    gcloud kms keys create ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --purpose="encryption" \
        --protection-level=PROTECTION_LEVEL \
        --project=KEY_PROJECT_ID
    

    Reemplaza ETCD_BACKUP_KEY_NAME por un nombre para la clave de encriptación de la copia de seguridad interna de etcd.

Otorga roles de IAM al agente de servicio de GKE

En esta sección, otorgarás roles de IAM en las claves que creaste al agente de servicio de GKE en el proyecto del clúster. El agente de servicio de GKE requiere estos roles para usar estas claves y encriptar los recursos correspondientes del plano de control.

  1. Busca el número de tu proyecto de clúster:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    Reemplaza CLUSTER_PROJECT_ID por el ID del proyecto de tu clúster de GKE.

    El resultado es similar a este:

    1234567890
    
  2. Otorga el rol de encriptador/desencriptador de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en la clave de encriptación para los discos de arranque y los discos de etcd al agente de servicio de GKE en el proyecto del clúster:

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

    Reemplaza lo siguiente:

    • KCP_DISK_KEY_NAME: Es el nombre de la clave de encriptación del disco.
    • LOCATION: Es la Trusted Cloud ubicación de la clave.
    • KEYRING_NAME: Es el nombre del llavero de claves que contiene la clave de encriptación.
    • CLUSTER_PROJECT_NUMBER: Es el número de proyecto numérico del proyecto del clúster, que encontraste en el paso anterior.
    • KEY_PROJECT_ID: Es el ID del proyecto de tu proyecto de claves.
  3. Otorga el rol de Encriptador/Desencriptador de CryptoKey de Cloud KMS a través de la delegación (roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation) en la clave de encriptación para los discos de arranque y los discos de etcd al agente de servicio de GKE en el proyecto del clúster:

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \
        --project=KEY_PROJECT_ID
    
  4. Otorga el rol de Usuario de claves de Cloud KMS en las claves de encriptación para los discos de arranque y los discos de etcd al agente de servicio de GKE en el proyecto del clúster para la rotación de claves:

    gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \
        --location=LOCATION \
        --keyring=KEYRING_NAME \
        --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com" \
        --role=roles/container.cloudKmsKeyUser \
        --project=KEY_PROJECT_ID
    
  5. Otorga el rol de Encriptador de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyEncrypter) en la clave de encriptación de la copia de seguridad interna de etcd al agente de servicio de GKE en el proyecto del clúster:

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

    Reemplaza ETCD_BACKUP_KEY_NAME por el nombre de la clave de encriptación de la copia de seguridad operativa de etcd.

    Otorgar el rol de roles/cloudkms.cryptoKeyEncrypter impide que GKE realice restauraciones de bases de datos en tu nombre y aumenta significativamente el tiempo necesario para restablecer la funcionalidad cuando se produce un problema en la base de datos. Para permitir que GKE realice restablecimientos por ti, otorga el rol roles/cloudkms.cryptoKeyEncrypterDecrypter.

Usa claves de encriptación en un clúster

En esta sección, se muestra cómo identificar las rutas de acceso a tus claves de encriptación.

  1. Identifica la ruta de acceso a la clave de encriptación del disco:

    gcloud kms keys describe KCP_DISK_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --format="value(name)"
    

    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 de etcd.
    • KEYRING_NAME: Es el nombre del llavero de claves que contiene la clave.
    • LOCATION: Es la Trusted Cloud ubicación de la clave.
    • KEY_PROJECT_ID: Es el ID del proyecto de tu proyecto de claves.

    El resultado es similar a este:

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
    
  2. Identifica la ruta de acceso a la clave de encriptación de la copia de seguridad interna de etcd:

    gcloud kms keys describe ETCD_BACKUP_KEY_NAME \
        --keyring=KEYRING_NAME \
        --location=LOCATION \
        --project=KEY_PROJECT_ID \
        --format="value(name)"
    

    Reemplaza ETCD_BACKUP_KEY_NAME por el nombre de la clave de encriptación de la copia de seguridad operativa de etcd.

    El resultado es similar a este:

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
    

Crea un clúster

En esta sección, crearás un clúster con diferentes opciones especificadas según las funciones de la autoridad del plano de control de GKE que desees configurar. Solo puedes configurar estas funciones en un clúster durante la creación del clúster. Los siguientes comandos crean clústeres en modo estándar. Para crear clústeres en modo Autopilot, usa las mismas marcas con el comando gcloud container clusters create-auto.

  • Para crear un clúster que configure la encriptación de disco y ejecute tus propias entidades certificadoras y claves de firma de cuentas de servicio, haz lo siguiente:

    1. Realiza todos los pasos de configuración de la clave y la CA en Ejecuta tus propias autoridades certificadoras y claves.
    2. Para encontrar las rutas de acceso a cada una de las claves de la cuenta de servicio y las AC, sigue las instrucciones que se indican en Configura AC y claves en un clúster nuevo.
    3. Crea un clúster:

      gcloud container clusters create CLUSTER_NAME \
          --location=LOCATION \
          --project=CLUSTER_PROJECT_ID \
          --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
          --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \
          --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \
          --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \
          --cluster-ca=PATH_TO_CLUSTER_CA \
          --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \
          --etcd-api-ca=PATH_TO_ETCD_API_CA \
          --aggregation-ca=PATH_TO_AGGREGATION_CA
      

      Reemplaza lo siguiente:

      • CLUSTER_NAME: Es el nombre del clúster nuevo.
      • LOCATION: Es la ubicación del clúster nuevo.
      • CLUSTER_PROJECT_ID: Es el ID del proyecto de tu proyecto de clúster.
      • PATH_TO_DISK_KEY: Es la ruta de acceso a la clave de encriptación del disco de los pasos anteriores de esta página.
      • PATH_TO_ETCD_BACKUP_KEY: Es la ruta de acceso a la clave de encriptación de la copia de seguridad interna de etcd de los pasos anteriores de esta página.
      • PATH_TO_SIGNING_KEY_VERSION: Es la ruta de acceso a la versión de la clave de firma de la cuenta de servicio de Kubernetes en Cloud KMS.
      • PATH_TO_VERIFICATION_KEY_VERSION: Es la ruta de acceso a la versión de la clave de verificación de la cuenta de servicio de Kubernetes en Cloud KMS.
      • PATH_TO_CLUSTER_CA: Es la ruta de acceso al grupo de AC del clúster.
      • PATH_TO_ETCD_PEER_CA: Es la ruta de acceso al grupo de ACs de pares de etcd.
      • PATH_TO_ETCD_API_CA: Es la ruta de acceso al grupo de AC de la API de etcd.
      • PATH_TO_AGGREGATION_CA: Es la ruta de acceso al grupo de AC de agregación.
  • Para crear un clúster que solo configure la encriptación de disco con las claves que creaste en esta guía, ejecuta el siguiente comando:

    gcloud container clusters create CLUSTER_NAME \
        --location=LOCATION \
        --project=CLUSTER_PROJECT_ID \
        --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \
        --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre del clúster nuevo.
    • LOCATION: Es la ubicación del clúster nuevo.
    • CLUSTER_PROJECT_ID: Es el ID del proyecto de tu proyecto de clúster.
    • PATH_TO_DISK_KEY: Es la ruta de acceso a la clave de encriptación del disco de los pasos anteriores.
    • PATH_TO_ETCD_BACKUP_KEY: Es la ruta de acceso a la clave de encriptación de la copia de seguridad interna de etcd de los pasos anteriores.

También puedes especificar todas estas marcas cuando creas un clúster nuevo en modo estándar.

Verifica el estado de la clave de encriptación

En esta sección, se muestra cómo verificar la clave de encriptación que se usó durante la creación del clúster. Puedes realizar esta verificación con Cloud Logging o con Google Cloud CLI.

Usa Logging para verificar las claves

Para verificar las claves con Logging, haz lo siguiente:

  1. En la consola de Trusted Cloud , ve a la página Explorador de registros.

    Ir al Explorador de registros

  2. Para obtener el registro de creación del clúster, especifica la siguiente consulta:

    resource.type="gke_cluster"
    resource.labels.cluster_name="CLUSTER_NAME"
    resource.labels.location="CLUSTER_LOCATION"
    protoPayload.serviceName="container.googleapis.com"
    protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster"
    protoPayload.request.cluster.userManagedKeysConfig:*
    
  3. Haz clic en Ejecutar consulta.

En el resultado, verifica que los parámetros de creación del clúster incluyan una ruta de acceso a la clave que corresponda a la clave que configuraste en Cloud KMS, como en el siguiente ejemplo:

# lines omitted for clarity
userManagedKeysConfig: {
  controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
  gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}

Usa gcloud CLI para verificar las claves

Para usar gcloud CLI y verificar la clave de encriptación, haz lo siguiente:

  1. Para la clave de encriptación de disco, ejecuta el siguiente comando:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
    
  2. Para la clave de encriptación de la copia de seguridad interna de etcd, ejecuta el siguiente comando:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
    

¿Qué sigue?