Protege tus datos con CMEK

En esta página se proporciona información adicional sobre cómo proteger los datos con claves de cifrado gestionadas por el cliente (CMEKs) para las funciones creadas con los comandos gcloud functions o la API Cloud Functions v2.

Para obtener una descripción detallada de las CMEK, incluida la configuración manual, el uso de Autokey y las pruebas de protección con CMEK, consulta la documentación de Cloud Run.

Los siguientes tipos de datos de funciones de Cloud Run se cifran cuando se usa una CMEK:

  • Código fuente de la función subido para la implementación y almacenado por Google en Cloud Storage, que se usa en el proceso de compilación.
  • Los resultados del proceso de compilación de funciones, entre los que se incluyen los siguientes:
    • La imagen de contenedor creada a partir del código fuente de tu función.
    • Cada instancia de la función que se ha implementado.

El proceso de compilación de la función está protegido por una clave efímera que se genera de forma única para cada compilación. Para obtener más información, consulta el artículo sobre el cumplimiento de CMEK en Cloud Build. Además, ten en cuenta lo siguiente:

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

  • Si una clave está inhabilitada, la imagen de contenedor no se puede implementar y no se pueden iniciar instancias nuevas.

  • La protección con CMEK de las funciones de Cloud Run solo se aplica a los recursos de funciones de Cloud Run gestionados por Google. Tú eres responsable de proteger los datos y los recursos que gestionas, como tus repositorios de código fuente, los canales de eventos que se encuentran en el proyecto del cliente o cualquier servicio que utilicen tus funciones.

Antes de empezar

  1. Crea una clave de una sola región para cifrar tus funciones. Para saber cómo crear una clave, consulta Crear claves de cifrado simétricas.

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

  3. En el caso de las funciones basadas en eventos, sigue los pasos de configuración adicionales que se indican en Habilitar claves de cifrado gestionadas por el cliente en un canal de Google.

Conceder acceso a la clave a cuentas de servicio

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

  • Agente de servicio de funciones de Cloud Run (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)

  • 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 conceder acceso a la clave a estas cuentas de servicio, añade cada cuenta de servicio como principal de la clave y, a continuación, asigna a la cuenta de servicio el rol Cloud KMS CryptoKey Encrypter/Decrypter:

Consola

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

  2. Haz clic en el nombre del conjunto de claves que contiene la clave elegida.

  3. Haga clic en el nombre de la clave para ver sus detalles.

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

  5. En el campo Principales nuevas, introduce las direcciones de correo de las tres cuentas de servicio que hemos mencionado anteriormente para asignar permisos a las tres cuentas a la vez.

  6. En el menú Selecciona un rol, elige Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.

  7. Haz clic en Guardar.

gcloud

Ejecuta el siguiente comando para cada cuenta de servicio que hemos mencionado anteriormente:

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

Haz los cambios siguientes:

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

  • KEY_RING: el nombre del conjunto de claves. Por ejemplo, my-keyring.

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

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

Habilitar las claves de cifrado gestionadas por el cliente en una función

Después de configurar un repositorio de Artifact Registry con CMEK habilitado y de conceder acceso a tu clave a las funciones de Cloud Run, podrás habilitar CMEK en tu función.

Para habilitar CMEK en una función, ejecuta el siguiente comando:

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

Haz los cambios siguientes:

  • FUNCTION: el nombre de la función para habilitar CMEK. Por ejemplo, cmek-function.

  • KEY: el nombre de clave completo, con el siguiente formato: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • REPOSITORY: el nombre de repositorio de Artifact Registry totalmente cualificado, con el siguiente formato: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

  • YOUR_SOURCE_LOCATION: Cuando habilites CMEK en una función que ya exista, asegúrate de que el código fuente que quieras se vuelva a implementar especificando este parámetro de forma explícita.

  • FLAGS...: marcas adicionales que pueden ser necesarias para implementar tu función, sobre todo en el caso de las implementaciones de creación. Para obtener más información, consulta el artículo Desplegar una función de Cloud Run.

CMEK está habilitada en la función. Si quieres, habilita las políticas de organización de CMEK para que todas las funciones nuevas cumplan los requisitos de CMEK.

Ten en cuenta que las funciones de Cloud Run siempre usan la versión principal de una clave para la protección con CMEK. No puedes especificar una versión de clave concreta para usarla al habilitar las claves de encriptado gestionadas por el cliente (CMEK) en tus funciones.

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