De forma predeterminada, Cloud Run encripta el contenido de los clientes en reposo. Cloud Run se encarga del cifrado sin que tengas que hacer nada más. Esta opción se llama Cifrado predeterminado de Google.
Si quieres controlar tus claves de cifrado, puedes usar claves de cifrado gestionadas por el cliente (CMEKs) en Cloud KMS con servicios integrados con CMEKs, como Cloud Run. Si usas claves de Cloud KMS, tendrás control sobre su nivel de protección, ubicación, calendario de rotación, permisos de uso y acceso, y límites criptográficos. Además, Cloud KMS te permite ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y gestione las claves de cifrado de claves (KEKs) simétricas que protegen tus datos, tú controlas y gestionas estas claves en Cloud KMS.
Una vez que hayas configurado tus recursos con CMEKs, la experiencia de acceder a tus recursos de Cloud Run será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta Claves de encriptado gestionadas por el cliente (CMEK).
Para obtener información sobre cómo proteger tus datos con CMEK en funciones creadas con los comandos gcloud functions
o la API Cloud Functions v2, consulta el artículo Protege tus datos con CMEK.
Debes tener en cuenta lo siguiente:
- Los metadatos de los archivos, como la ruta, no se cifran.
- Los metadatos del servicio de Cloud Run, como el nombre o las variables de entorno, no se encriptan con la clave proporcionada, sino con una Google-owned and Google-managed encryption key.
- En tiempo de ejecución, la memoria y el contenido de los archivos no se cifran.
- Si una CMEK está inhabilitada, no se iniciarán las nuevas instancias de las revisiones de Cloud Run que usen la clave.
- Si una CMEK está inhabilitada, no se podrá desplegar una nueva revisión de Cloud Run a menos que se use una clave válida.
CMEK con Autokey de Cloud KMS
Puedes crear CMEKs manualmente para proteger tus recursos de Cloud Run o usar Autokey de Cloud KMS. Con Autokey, los llaveros y las claves se generan a petición como parte de la creación de recursos en Cloud Run. Los agentes de servicio que usan las claves para las operaciones de cifrado y descifrado se crean si aún no existen y se les asignan los roles de gestión de identidades y accesos (IAM) necesarios. Para obtener más información, consulta la descripción general de Autokey.
Para configurar CMEK manualmente, consulta Configurar CMEK para un servicio de Cloud Run.
Para configurar CMEK con Autokey, consulta Usar Autokey.
Autokey no está disponible para las funciones creadas con los comandos gcloud functions
o la API Cloud Functions v2.
Cuotas de Cloud KMS y Cloud Run
Puedes definir tu CMEK en uno de los niveles de protección disponibles para indicar cómo se llevan a cabo las operaciones criptográficas. Cuando usas CMEK en Cloud Run, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS. Por ejemplo, los repositorios cifrados con CMEK pueden consumir estas cuotas por cada subida o descarga.
Las operaciones de encriptado y desencriptado con claves CMEK afectan a las cuotas de Cloud KMS de las siguientes formas:
- En el caso de las claves de CMEK de software generadas en Cloud KMS, no se consume ninguna cuota de Cloud KMS.
- En el caso de las claves CMEK de hardware (a veces denominadas claves de Cloud HSM), las operaciones de cifrado y descifrado se contabilizan en las cuotas de Cloud HSM del proyecto que contiene la clave.
- En el caso de las claves CMEK externas (a veces denominadas claves de Cloud EKM), las operaciones de encriptado y desencriptado se contabilizan en las cuotas de Cloud EKM del proyecto que contiene la clave.
Para obtener más información, consulta las cuotas de Cloud KMS.
Comportamiento del autoescalado afectado por CMEK
El autoescalado previsto de tu servicio de Cloud Run puede verse afectado si usas claves de encriptado gestionadas por el cliente. Por ejemplo, la latencia para iniciar nuevas instancias puede aumentar debido a los retrasos en el contacto con sistemas de gestión de claves externos durante las operaciones con claves.
En la siguiente tabla se muestran los posibles cambios en el comportamiento debido al uso de CMEK:
Operación relacionada con CMEK | Comportamiento del autoescalado |
---|---|
Clave inhabilitada, destruida o revocada | No se iniciarán instancias nuevas. |
No se puede contactar con el gestor de claves externo | Si se puede volver a intentar la solicitud de clave, no se apaga ninguna instancia durante los reintentos y no se iniciará ninguna instancia nueva. El escalado horizontal puede parecer más lento de lo esperado. Si no se puede volver a intentar la solicitud de clave, no se iniciará ninguna instancia nueva y las instancias en ejecución se cerrarán tras un periodo de espera. |
Se ha superado la cuota de KMS | Si se supera esta cuota, se registran errores de RESOURCE_EXHAUSTED y no se inician instancias nuevas. Para solucionar este problema, puedes solicitar más cuota. |
Antes de empezar
Permitir que Cloud Run acceda a una clave
Para usar CMEK en Cloud Run, sigue estos pasos:
Configura Artifact Registry para usar CMEK.
Usa la guía de inicio rápido de Docker de Artifact Registry como referencia para crear un repositorio de Docker y enviar una imagen a él.
Usa una clave simétrica de Cloud KMS que ya tengas o crea una nueva.
Para permitir que Cloud Run acceda a la clave, concede al agente de servicio de Cloud Run el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS:
Consola
Ve a la página Claves criptográficas.
Haz clic en el conjunto de claves de tu clave para abrir su página de lista de claves.
Selecciona la clave y, en la pestaña Permisos de la derecha, haz clic en Añadir principal.
En el campo Nuevos principales, copia el correo del agente de servicio de Cloud Run. Tiene el siguiente sufijo:
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.
En el campo Selecciona un rol, elige Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.
Haz clic en Guardar.
gcloud
Usa el siguiente comando
gcloud kms
:gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring=KEYRING \ --location=LOCATION \ --member serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \ --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'
Haz los cambios siguientes:
- KEY_NAME: el nombre de tu clave.
- KEYRING: el nombre del conjunto de claves.
- LOCATION: el nombre de tu región.
- PROJECT_NUMBER: el número de proyecto en el que quieres desplegar el servicio de Cloud Run.
Necesitas permiso para administrar los recursos de Cloud KMS en elGoogle Cloud proyecto para asignar el rol de gestión de identidades y accesos
roles/cloudkms.cryptoKeyEncrypterDecrypter
. Solo los miembros de IAM con los roles Propietario (roles/owner
) o Administrador de Cloud KMS (roles/cloudkms.admin
) pueden conceder o revocar el acceso a los recursos de Cloud KMS.
Configurar CMEK para un servicio de Cloud Run
Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.
Consola
En la Google Cloud consola, ve a Cloud Run:
Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.
Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.
Haz clic en la pestaña Seguridad.
- En Cifrado:
- Selecciona Clave de Cloud KMS.
- En Tipo de clave, selecciona Cloud KMS.
- En el menú Seleccionar una clave de Cloud KMS, elige una de las siguientes opciones:
Selecciona Cambiar de proyecto si necesitas usar una clave de otro proyecto. Puedes hacer referencia a una clave de otro proyecto si la cuenta de servicio de tu proyecto puede acceder a la clave para realizar operaciones de cifrado y descifrado.
Selecciona Introducir clave manualmente para introducir el secreto de un proyecto con el siguiente formato:
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
.- Ve a la página Claves criptográficas.
- Haz clic en el conjunto de claves.
- Selecciona el nombre del llavero elegido y haz clic en Acciones.
- Selecciona Copiar nombre de recurso en el menú y pégalo en el campo Nombre de recurso de clave del paso anterior.
- En el menú Acción de revocación de clave, elige una de las siguientes opciones:
Evitar que se creen instancias de contenedor: no se iniciarán instancias nuevas después de revocar la clave de CMEK.
Apagar lo antes posible: no se iniciarán instancias nuevas y las instancias que ya estén en funcionamiento se apagarán después de revocar la clave CMEK.
Retraso de apagado personalizado: especifica el número de horas que deben transcurrir antes de que se apague el servicio.
Para copiar y pegar el nombre de recurso de otro proyecto al que tengas acceso, sigue estos pasos:
- En Cifrado:
Haz clic en Crear o en Implementar.
gcloud
Para definir una clave en un servicio, usa uno de los siguientes comandos:
gcloud run deploy SERVICE \ --image IMAGE_URL \ --key KEY \ --post-key-revocation-action-type KEY_REVOCATION_ACTION --encryption-key-shutdown-hours SHUTDOWN_HOURS
gcloud run services update SERVICE --key KEY --post-key-revocation-action-type KEY_REVOCATION_ACTION --encryption-key-shutdown-hours SHUTDOWN_HOURS
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio.
- IMAGE_URL: una referencia a la imagen del contenedor, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Si usas Artifact Registry, el repositorio REPO_NAME ya debe estar creado. La URL sigue el formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - KEY: el nombre de clave completo con el siguiente formato:
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
. - KEY_REVOCATION_ACTION:
shut-down
oprevent-new
, en función de tus preferencias de revocación de claves. - SHUTDOWN_HOURS: el número de horas que se debe posponer antes de que el servicio se cierre tras la revocación.
YAML
Si va a crear un servicio, puede saltarse este paso. Si va a actualizar un servicio, descargue su configuración YAML:
gcloud run services describe SERVICE --format export > service.yaml
Actualiza las siguientes anotaciones de CMEK con los valores que quieras:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/encryption-key: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME run.googleapis.com/post-key-revocation-action-type: KEY_REVOCATION_ACTION run.googleapis.com/encryption-key-shutdown-hours: SHUTDOWN_HOURS name: REVISION
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio de Cloud Run.
- PROJECT_NAME: el nombre del proyecto en el que se creó la clave.
- LOCATION: la ubicación en la que se creó la clave. Debe coincidir con la ubicación del servicio de Cloud Run.
- KEYRING_NAME: el nombre del conjunto de claves.
- KEY_NAME: el nombre de la clave.
- KEY_REVOCATION_ACTION:
shut-down
oprevent-new
, en función de tus preferencias de revocación de claves. - SHUTDOWN_HOURS: el número de horas que se debe posponer antes de que el servicio se cierre tras la revocación.
- REVISION con un nuevo nombre de revisión o elimínelo (si está presente). Si proporcionas un nuevo nombre de revisión, debe cumplir los siguientes criterios:
- Empieza por
SERVICE-
- Contiene solo letras minúsculas, números y
-
- No termina con
-
- No supera los 63 caracteres
- Empieza por
Sustituye el servicio por su nueva configuración con el siguiente comando:
gcloud run services replace service.yaml
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Añade lo siguiente a un recurso google_cloud_run_v2_service
en tu configuración de Terraform.
resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "europe-west1"
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
encryption_key = "projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME"
}
}
Haz los cambios siguientes:
- SERVICE: el nombre de tu servicio de Cloud Run.
- PROJECT_NAME: el nombre del proyecto en el que se creó la clave.
- LOCATION: la ubicación en la que se creó la clave. Debe coincidir con la ubicación del servicio de Cloud Run.
- KEYRING_NAME: el nombre del conjunto de claves.
- KEY_NAME: el nombre de la clave.
Usar Autokey
Si aún no lo has hecho, habilita Autokey de Cloud KMS.
Cualquier cambio en la configuración conlleva la creación de una nueva revisión. Las revisiones posteriores también recibirán automáticamente este ajuste de configuración, a menos que hagas cambios explícitos para modificarlo.
Consola
En la Google Cloud consola, ve a Cloud Run:
Seleccione Servicios en el menú y haga clic en Implementar contenedor para configurar un nuevo servicio. Si vas a configurar un servicio que ya tienes, haz clic en él y, a continuación, en Editar y desplegar nueva revisión.
Si vas a configurar un servicio nuevo, rellena la página de configuración inicial del servicio y, a continuación, haz clic en Contenedores, volúmenes, redes y seguridad para desplegar la página de configuración del servicio.
Haz clic en la pestaña Seguridad.
- En Cifrado:
- En el menú Tipo de clave, selecciona Cloud KMS con Autokey.
- Haz clic en Solicitar una clave.
- Haz clic en Crear.
Los detalles de la clave se muestran después de crear el recurso.
- En el menú Acción de revocación de clave, elige una de las siguientes opciones:
Evitar nuevas instancias de contenedor: no se inicia ninguna instancia nueva después de revocar la CMEK.
Cierre lo antes posible: no se iniciarán instancias nuevas y las instancias que ya existan se cerrarán después de revocar la CMEK.
Retraso de apagado personalizado: especifica el número de horas que deben transcurrir antes de que se apague el servicio.
- En Cifrado:
Haz clic en Crear o en Implementar.
Ver configuración de seguridad
Para ver los ajustes de seguridad actuales de tu servicio de Cloud Run, sigue estos pasos:
Consola
En la Google Cloud consola, ve a Cloud Run:
Haz clic en el servicio que te interese para abrir la página Detalles del servicio.
Haz clic en la pestaña Revisiones.
En el panel de detalles de la derecha, el ajuste de seguridad se muestra en la pestaña Seguridad.
gcloud
Usa el siguiente comando:
gcloud run services describe SERVICE
Busca el ajuste de seguridad en la configuración devuelta.
Configuración adicional para las implementaciones basadas en fuentes
Los despliegues de origen de Cloud Run y las funciones implican un paso de compilación adicional. Para asegurarte de que este paso cumple los requisitos de las CMEK, debes hacer lo siguiente:
Crea tu propio segmento de Cloud Storage cifrado con CMEK. Para obtener más información, consulta la documentación de CMEK de Cloud Storage.
Sube el código fuente al segmento de almacenamiento cifrado con CMEK como archivo ZIP.
Crea tu propio repositorio de Artifact Registry cifrado con CMEK. Para obtener más información, consulta la documentación de CMEK de Artifact Registry. Este repositorio almacena los artefactos producidos por el proceso de compilación.
Despliega la función y transfiere los recursos de compilación mediante las marcas
--source
y--image
.
gcloud run deploy FUNCTION \
--key KEY \
--source CUSTOM_BUCKET_WITH_SOURCE_CODE \
--image CUSTOM_AR_REPOSITORY \
--function FUNCTION_ENTRYPOINT \
--base-image BASE_IMAGE \
--region REGION
Haz los cambios siguientes:
FUNCTION: el nombre de la función que vas a implementar. Puedes omitir este parámetro por completo, pero se te pedirá el nombre si lo haces.
KEY: el nombre de clave completo con el siguiente formato:
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
.CUSTOM_BUCKET_WITH_SOURCE_CODE: el URI de una ubicación de Cloud Storage donde se almacena el código fuente. Utiliza el siguiente formato:
gs://BUCKET_NAME/PATH_TO_SOURCE
.CUSTOM_AR_REPOSITORY: el URI de un repositorio de Artifact Registry en el formato
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME
.FUNCTION_ENTRYPOINT: el punto de entrada de tu función en el código fuente. Este es el código que ejecuta Cloud Run cuando se ejecuta tu función. El valor de esta marca debe ser un nombre de función o un nombre de clase completo que exista en el código fuente.
BASE_IMAGE: el entorno de imagen base de tu función. Para obtener más información sobre las imágenes base y los paquetes incluidos en cada imagen, consulta Imágenes base de los entornos de ejecución.
REGION: la Google Cloud región en la que quieres implementar tu función. Por ejemplo,
europe-west1
.
Además, si usas Eventarc para activar tus funciones, familiarízate con la configuración de CMEK para Eventarc. En concreto, para cumplir los requisitos en estos casos, es necesario cifrar los canales correspondientes a los tipos de eventos que se utilicen.
Probar la revocación de CMEK
Para verificar que la protección con CMEK funciona, puedes inhabilitar la clave que has usado para habilitar la CMEK en un servicio y, a continuación, intentar invocar el servicio:
Ejecuta el siguiente comando para confirmar que se puede acceder al servicio:
curl SERVICE_URL
Sustituye SERVICE_URL por la URL del servicio. Puedes encontrarla en la interfaz de usuario de la consola después de la implementación: la URL del contenedor se muestra junto al texto URL:.
Espera el número de SHUTDOWN_HOURS que hayas especificado. Si no has especificado el número de horas de apagado, vuelve a habilitar la clave y edita o vuelve a implementar el servicio con el valor mínimo de una hora. Si has desplegado el código fuente, intenta verlo. El intento debería fallar.
Después de esperar el tiempo SHUTDOWN_HOURS que hayas definido, vuelve a ejecutar el siguiente comando y confirma que ya no se puede acceder al servicio:
curl SERVICE_URL
Una vez que hayas verificado que la versión de clave está inhabilitada, habilita la clave.
Interpretar los registros de auditoría y los mensajes de error
Si eres responsable de monitorizar los registros de auditoría, una de tus tareas puede ser verificar las operaciones de CMEK en tu servicio de Cloud Run. En este caso, debes consultar los registros de auditoría relacionados.
Si eres responsable de solucionar los errores de tiempo de ejecución de tu servicio de Cloud Run, puede que tengas que solucionar los errores relacionados con CMEK que se registren durante el funcionamiento del servicio de Cloud Run.
En las siguientes secciones se proporciona la información necesaria para llevar a cabo las tareas anteriores.
Registros de auditoría
Los registros de auditoría de KMS proporcionan un registro de auditoría de cada operación realizada con una clave. En el caso de los servicios de Cloud Run habilitados para CMEK, Cloud Run añade un contexto de llamada específico de Cloud Run que detalla por qué el sistema ha accedido a la clave del cliente. En la siguiente tabla se indican los contextos que pueden aparecer en los registros de auditoría:
Motivo del acceso a la clave | Descripción |
---|---|
Decrypting CMEK-encrypted layer during container clone start. |
Se registra cada vez que se inicia una instancia nueva. |
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. |
Se registra durante la implementación de un servicio habilitado para CMEK, donde la clave de cifrado de datos se envolverá con la CMEK. |
Decrypting an existing encrypted data-encryption-key, under the same customer-managed-encryption-key, to be used to encrypt container contents. |
Se registra cuando se inicia una instancia nueva, lo que requiere descifrar la imagen. |
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. |
Se registra cuando se realiza una comprobación de validación en la clave, lo que se hace periódicamente. |
Performing a decrypt operation on dummy data to check the customer-managed-encryption-key status and access. |
Se registra cuando se realiza una comprobación de validación en la clave, lo que se hace periódicamente. |
Para obtener información específica sobre el formato y el contenido de los registros de auditoría, consulta la página Registro de auditoría de KMS.
Mensajes de error
Ten en cuenta que los mensajes de error proporcionados por un gestor de claves externo se transfieren directamente a los registros de Cloud Run de tu servicio.
En la siguiente tabla se indican los mensajes de error relacionados con CMEK que pueden aparecer, así como sus descripciones y posibles soluciones.
Mensaje | Descripción |
---|---|
User's service account does not have CMEK decrypter permission. Service account: %s |
Solución: Permitir que el servicio acceda a la clave |
User's KMS operation quota has been exceeded. CMEK key: %s |
El servicio habilitado para CMEK ha superado las cuotas de KMS. Solución: Solicitar más cuota de KMS |
User's CMEK key has been disabled. CMEK key: %s |
Se ha revocado la CMEK. Solución: cambia la CMEK del servicio y vuelve a desplegarlo. |
User's CMEK key has been destroyed. CMEK key: %s |
Se ha eliminado la CMEK. Solución: cambia la CMEK del servicio y vuelve a desplegarlo. |
User's CMEK key has been scheduled for deletion. CMEK Key: %s |
Se ha programado la eliminación de la CMEK. Solución: cambia la CMEK del servicio y vuelve a desplegarlo. |
Siguientes pasos
- Más información sobre las claves de cifrado gestionadas por el cliente
- Consulta más información sobre los permisos y roles de Cloud KMS.
- Más información sobre el cifrado predeterminado de Google
- Crea una clave.
- Consulta cómo rotar tus claves.
- Registros de auditoría