Protege tus datos con CMEK
En esta página, se brinda información complementaria para proteger los datos con
claves de encriptación administradas por el cliente (CMEK) en las funciones que se crean con
los comandos de gcloud functions o la
API de Cloud Functions v2.
Para obtener una descripción detallada de las CMEK, incluida la configuración manual, el uso de Autokey y la prueba de la protección de las CMEK, consulta la documentación de Cloud Run.
Los siguientes tipos de datos de Cloud Run Functions se encriptan cuando se usa una CMEK:
- El código fuente de la función que Google subió para la implementación y almacenó en Cloud Storage para usarlo en el proceso de compilación.
- Los resultados del proceso de compilación de funciones, incluidos los siguientes:
- La imagen de contenedor creada a partir del código fuente de la función
- Cada instancia de la función que se implementa
El proceso de compilación de funciones se protege con una clave efímera generada de manera inequívoca para cada compilación. Consulta Cumplimiento de CMEK en Cloud Build para obtener más información. Además, ten en cuenta las consideraciones siguientes:
Los metadatos de archivos, como las rutas de acceso del sistema de archivos o las marcas de tiempo de las modificaciones, no se encriptan.
Si se inhabilita una clave, la imagen de contenedor no se podrá implementar y las instancias nuevas no podrán iniciarse.
La protección de Cloud Run Functions a través de CMEK solo se aplica a los recursos de Cloud Run Functions administrados por Google. Tú debes encargarte de proteger los datos y recursos que administras, como los repositorios de código fuente, los canales de eventos del proyecto del cliente o cualquier servicio que tus funciones usen.
Antes de comenzar
Crea una clave de una sola región para encriptar las funciones. Para aprender a crear una clave, consulta Crea claves de encriptación simétricas.
Crea un repositorio de Artifact Registry que tenga una CMEK habilitada. Debes usar la misma clave para el repositorio de Artifact Registry que la que usas para habilitar la CMEK en una función.
En el caso de las funciones basadas en eventos, sigue los pasos de configuración adicionales que se describen en Habilita la CMEK para un canal de Google.
Otorga a la clave acceso a las cuentas de servicio
Para cada función, debes otorgar a la clave los siguientes accesos a las cuentas de servicio:
Agente de servicio de Cloud Run 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)Agente de servicios 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 a la clave estos accesos a las cuentas de servicio, agrega cada cuenta de
servicio como principal de la clave y, luego, otorga a la cuenta de servicio el
rol Cloud KMS CryptoKey Encrypter/Decrypter.
Consola
Accede a la página de Cloud Key Management Service en la consola de Google Cloud :
Acceder a la página de Cloud KMS.Haz clic en el nombre del llavero de claves que contiene la clave elegida.
Haz clic en el nombre de la clave para ver sus detalles.
En la pestaña Permisos, haz clic en Otorgar acceso.
En el campo Principales nuevas, ingresa las direcciones de correo electrónico de las tres cuentas de servicio analizadas más arriba para asignar permisos a las tres cuentas a la vez.
En el menú Seleccionar un rol, elige Encriptador/desencriptador de CryptoKey de Cloud KMS.
Haz clic en Guardar.
gcloud
Para cada cuenta de servicio analizada más arriba, ejecuta el comando siguiente:
gcloud kms keys add-iam-policy-binding KEY \ --keyring KEY_RING \ --location LOCATION \ --member serviceAccount:SERVICE_AGENT_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Reemplaza los parámetros siguientes:
KEY: es el nombre de la clave. Por ejemplo,my-key.KEY_RING: es el nombre del llavero de claves. Por ejemplo,my-keyring.LOCATION: es 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 la CMEK para una función
Después de configurar un repositorio de Artifact Registry con una CMEK habilitada y otorgar a tu clave acceso a Cloud Run Functions, estará todo listo para habilitar la CMEK en la función.
Para habilitar la CMEK en una función, ejecuta el comando siguiente:
gcloud functions deploy FUNCTION \ --kms-key=KEY \ --docker-repository=REPOSITORY \ --source=YOUR_SOURCE_LOCATION FLAGS...
Reemplaza los parámetros siguientes:
FUNCTION: es el nombre de la función en la que se habilitará la CMEK. Por ejemplo,cmek-function.KEY: es el nombre completamente calificado de la clave, que tiene el formato siguiente:projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.REPOSITORY: es el nombre completamente calificado del repositorio de Artifact Registry, que tiene el formato siguiente:projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.YOUR_SOURCE_LOCATION: Cuando habilites la CMEK para una función preexistente, asegúrate de que el código fuente previsto se vuelva a implementar. Para ello, especifica este parámetro de forma explícita.FLAGS...: son marcas adicionales que se pueden requerir para implementar la función, en especial a la hora de crear implementaciones. Para obtener más detalles, consulta Implementa una función de Cloud Run.
La CMEK está habilitada para la función. De manera opcional, habilita las políticas de la organización de CMEK para aplicar todas las funciones nuevas con el objetivo de que las CMEK cumplan los requisitos.
Ten en cuenta que Cloud Run Functions siempre usa la versión principal de una clave para la protección con CMEK. No se puede especificar una versión de clave en particular para usarla cuando se habilite la CMEK de las funciones.
Si una clave se destruye o se inhabilita, o sus permisos necesarios se revocan, no se cierran las instancias activas de funciones protegidas por esa clave. Las ejecuciones de funciones que ya están en curso seguirán llevándose adelante, pero las nuevas fallarán siempre que Cloud Run Functions no tenga acceso a la clave.