Protege tus datos con CMEK

Puedes usar las claves de encriptación administradas por el cliente (CMEK) de Cloud Key Management Service para proteger Cloud Functions y los datos en reposo relacionados. Estas claves se crean y administran a través de Cloud KMS y se almacenan como claves de software, en un clúster de HSM o de forma externa.

La implementación de una función con una CMEK protege los datos asociados con ella mediante una clave de encriptación que está en tu control total. Este tipo de encriptación te permite cumplir con los requisitos de cumplimiento en ciertos sectores, como los servicios financieros. Debido a que la clave es de tu propiedad y no es controlada por Google, nadie (ni siquiera tú) puede acceder a los datos protegidos por estas claves de encriptación cuando se inhabilitan o destruyen las claves.

Los siguientes tipos de datos de Cloud Functions se encriptan cuando se usa una CMEK:

  • Código fuente de la función subido para la implementación y almacenado por Google en Cloud Storage, y usado en el proceso de compilación
  • Los resultados del proceso de compilación de funciones, incluidos los siguientes:
    • La imagen de contenedor compilada a partir del código fuente de tu función
    • Cada instancia de la función que se implementa
  • Datos en reposo para canales de transporte de eventos internos (solo 1ª gen.).

El proceso de compilación de la función está protegido por una clave efímera generada de forma única para cada compilación. Consulta Cumplimiento de CMEK en Cloud Build para obtener más información. Además, ten en cuenta lo siguiente:

  • Los metadatos de archivo, como las rutas de acceso del sistema de archivos o las marcas de tiempo de modificación, no se encriptan.

  • Si se inhabilita una clave, la imagen de contenedor no se puede implementar ni las instancias nuevas pueden iniciarse.

  • La protección con CMEK de Cloud Functions solo se aplica a los recursos de Cloud Functions administrados por Google. Eres responsable de proteger los datos y recursos que administres, como los repositorios de código fuente, los canales de eventos que residen en el proyecto del cliente (solo 2ª gen.) o cualquier servicio que usen tus funciones.

La configuración de CMEK para Cloud Functions implica lo siguiente:

  • Otorga acceso a la clave a las cuentas de servicio necesarias:

    • Para todas las funciones, debes otorgar a las cuentas de servicio de Cloud Functions, Artifact Registry y Cloud Storage acceso a la clave.

    • Solo para las funciones controladas por eventos en Cloud Functions (2nd gen), también debes completar la configuración de CMEK para Cloud Run y Eventarc.

  • Crea un repositorio de Artifact Registry protegido por CMEK para almacenar las imágenes de la función.

  • Habilita CMEK en la función.

  • De manera opcional, habilita las políticas de la organización de CMEK para aplicar todas las funciones nuevas a fin de que cumplan con CMEK.

Estos archivos se describen con más detalle a continuación.

Antes de comenzar

  1. Crea una clave de una sola región para encriptar tus funciones. Para aprender a crear una clave, consulta Crea claves de encriptación simétricas.

  2. Crea un repositorio de Artifact Registry que tenga CMEK habilitadas. Debes usar la misma clave para el repositorio de Artifact Registry que usas cuando habilitas CMEK en una función.

  3. Para las funciones de 2ª gen. controladas por eventos, sigue los pasos de configuración adicionales que se describen en Habilita CMEK para un canal de Google.

Otorga a las cuentas de servicio acceso a la clave

Para todas las funciones, debes otorgar acceso a la clave a las siguientes cuentas de servicio:

  • Agente de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

  • Agente de servicio de Artifact Registry (service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com)

  • Agente de servicio de Cloud Storage (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

Solo para la 2ª gen., debes otorgar a las siguientes cuentas de servicio acceso a la clave:

  • Agente de servicio de Cloud Run (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com)

  • Agente de servicio de Eventarc (service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com)

Para otorgar acceso a la clave a estas cuentas de servicio, agrega cada una como principal de la clave y, luego, otorga a la cuenta de servicio el rol Cloud KMS CryptoKey Encrypter/Decrypter:

Consola

  1. Ve a la página de Cloud Key Management Service en la consola de Google Cloud:
    Ir a la página de Cloud KMS

  2. Haz clic en el nombre del llavero de claves que contiene la clave que desees.

  3. Haz clic en el nombre de la clave para ver los detalles.

  4. En la pestaña Permisos, haz clic en Otorgar acceso.

  5. En el campo Nuevos principales, ingresa las direcciones de correo electrónico de las tres cuentas de servicio anteriores para asignar permisos a las tres cuentas a la vez.

  6. En el menú desplegable Seleccionar una función, selecciona Encriptador y desencriptador de CryptoKey de Cloud KMS.

  7. Haz clic en Guardar.

gcloud

Para cada cuenta de servicio anterior, ejecuta el siguiente comando:

gcloud kms keys add-iam-policy-binding KEY \
--keyring KEY_RING \
--location LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

Reemplaza lo siguiente:

  • KEY: El nombre de la clave. Por ejemplo, my-key

  • KEY_RING: El nombre del llavero de claves. Por ejemplo, my-keyring

  • LOCATION: La ubicación de la clave. Por ejemplo, us-central1

  • SERVICE_AGENT_EMAIL: Es la dirección de correo electrónico de la cuenta de servicio.

.

Habilita CMEK para una función

Después de configurar un repositorio de Artifact Registry con CMEK habilitadas y otorgar a Cloud Functions acceso a tu clave, estarás listo para habilitar CMEK en tu función.

A fin de habilitar CMEK para una función, haz lo siguiente:

Consola

  1. Ve a la página de Cloud Functions en la consola de Google Cloud:
    Ir a la página de Cloud Functions

  2. Haz clic en el nombre de la función en la que deseas habilitar CMEK.

  3. Haz clic en Editar.

  4. Haz clic en Entorno de ejecución, compilación… para expandir las opciones de configuración avanzada.

  5. Selecciona la pestaña Seguridad y repositorio de imágenes.

  6. En la sección Encriptación, selecciona Clave de encriptación administrada por el cliente (CMEK).

  7. Selecciona la clave elegida en el menú desplegable.

  8. En Ubicación del contenedor, selecciona Artifact Registry administrado por el cliente.

  9. En el menú desplegable Artifact Registry, selecciona el repositorio protegido por CMEK.

  10. Haga clic en Next.

  11. Haga clic en Implementar.

gcloud

Ejecuta el siguiente comando.

gcloud functions deploy FUNCTION \
[--gen2] \
--kms-key=KEY \
--docker-repository=REPOSITORY \
--source=YOUR_SOURCE_LOCATION
FLAGS...

Reemplaza lo siguiente:

  • FUNCTION: El nombre de la función en la que se habilitará CMEK. Por ejemplo, cmek-function

  • KEY: El nombre de la clave completamente calificado, en el siguiente formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • REPOSITORY: El nombre del repositorio de Artifact Registry completamente calificado, en el siguiente formato: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

  • YOUR_SOURCE_LOCATION: Cuando habilites las CMEK para una función preexistente, asegúrate de que el código fuente deseado se vuelva a implementar mediante la especificación explícita de este parámetro.

  • FLAGS...: Son marcas adicionales que se pueden requerir para implementar la función, en especial a fin de crear implementaciones. Para obtener más detalles, consulta Implementa una Cloud Function.

La CMEK está habilitada para la función.

Ten en cuenta que Cloud Functions siempre usa la versión principal de una clave para la protección con CMEK. No puedes especificar una versión de clave en particular que se usará cuando habilites CMEK para tus funciones.

Si una clave se destruye o se inhabilita, o se revocan los permisos necesarios relacionados con ella, no se cierran las instancias activas de funciones protegidas por esa clave. Las ejecuciones de funciones que ya están en curso seguirán ejecutándose, pero las ejecuciones nuevas fallarán siempre que Cloud Functions no tenga acceso a la clave.

Prueba la protección de CMEK

A fin de verificar que la protección de CMEK funcione, puedes inhabilitar la clave que usaste para habilitar las CMEK en una función y, luego, intentar activar tu función:

  1. Inhabilita la clave que se usa para proteger tu función.

  2. Intenta ver el código fuente asociado con esta función. El intento debería fallar.

  3. Intenta activar la función protegida por CMEK. El intento debería fallar.

  4. Después de verificar que la protección con CMEK funcione, habilita la clave.

Ahora se confirma la protección de CMEK de la función.

¿Qué sigue?