Usa claves de encriptación administradas por el cliente

En este tema, se muestra cómo proteger los servicios y datos de Cloud Run relacionados con esos servicios mediante claves de encriptación administradas por el cliente (CMEK) de Cloud KMS. Esta función permite que los contenedores se implementen con una clave CMEK para proteger el contenido de la imagen del contenedor.

Debes tener en cuenta lo siguiente:

  • Los metadatos de archivos, como la ruta de acceso del archivo, no están encriptados.
  • Si se inhabilita una clave CMEK, la imagen de contenedor no se puede implementar ni las instancias nuevas pueden iniciarse.

Debido a que la clave CMEK está bajo tu control y no está controlada por Google, nadie, ni siquiera Google, puede acceder a los datos protegidos por estas cuando se inhabilitan o se destruyen las claves.

Permite que Cloud Run acceda a una clave

Puedes usar una clave asimétrica existente de Cloud KMS o crear una clave simétrica nueva. Sin embargo, para permitir que un servicio de Cloud Run acceda a la clave, debes agregar la cuenta de servicio de Cloud Run como miembro de la clave y otorgarle la función de encriptador/desencriptador de clave criptográfica de Cloud KMS:

Console

  1. Ve a la página Claves criptográficas en Cloud Console.

  2. Haz clic en el llavero de claves para abrir la página de la lista de claves.

  3. Selecciona la clave y, en la pestaña de permisos del lado derecho, haz clic en Agregar miembro.

  4. En el cuadro de texto Nuevos miembros, copia el correo electrónico del agente de servicio de Cloud Run. Tiene el sufijo @serverless-robot-prod.iam.gserviceaccount.com

  5. Otorga la función Encriptador/Desencriptador de CryptoKeys de Cloud KMS.

Línea de comandos

Usa el siguiente comando gcloud kms:

gcloud kms keys add-iam-policy-binding 
(KEY : --keyring=KEYRING --location=LOCATION)
--member=MEMBER --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

Reemplazar

  • KEYRING con el nombre del llavero de claves.
  • LOCATION por el nombre de tu región
  • MEMBER con el correo electrónico del agente de servicio de Cloud Run. Tiene el sufijo @serverless-robot-prod.iam.gserviceaccount.com

Necesitas permiso para administrar los recursos de Cloud KMS en el proyecto de Google Cloud y otorgar la función de IAM roles/cloudkms.cryptoKeyEncrypterDecrypter. Solo los miembros de IAM con las funciones de Propietario (roles/owner) o Administrador de Cloud KMS (roles/cloudkms.admin) pueden otorgar o revocar el acceso a los recursos de Cloud KMS.

Habilita CMEK para un servicio de Cloud Run:

Cualquier cambio en la configuración conlleva la creación de una revisión nueva. Las revisiones posteriores también adoptarán esta configuración de manera automática, a menos que realices actualizaciones explícitas para cambiarla.

Console

  1. Ir a Cloud Run

  2. Haz clic en Crear servicio si quieres configurar un servicio nuevo en el que realizarás la implementación. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en Implementar y editar una nueva revisión.

  3. Si estás configurando un servicio nuevo, llena la página de configuración inicial del servicio como desees y haz clic en Siguiente > Configuración avanzada para acceder a la página de configuración del servicio.

  4. Haz clic en la pestaña Seguridad.

    image

  5. Selecciona la casilla de verificación Usar una clave de encriptación administrada por el cliente (CMEK) y, luego, selecciona la clave deseada en el menú desplegable Seleccionar una clave administrada por el cliente.

  6. Haz clic en Crear o Implementar.

Línea de comandos

Para configurar una clave en un servicio, usa cualquiera de los siguientes comandos:

gcloud beta run deploy SERVICE --image IMAGE_URL --key KEY
gcloud beta run services update SERVICE --key KEY

Reemplazar

  • SERVICE por el nombre de tu servicio
  • IMAGE_URL por una referencia a la imagen de contenedor, como gcr.io/myproject/my-image:latest
  • KEY por el nombre de la clave completamente calificado, en este formato:projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

YAML

Puedes descargar y ver la configuración del servicio existente mediante el comando gcloud run services describe --format export, que genera resultados limpios en formato YAML. Luego, puedes modificar los campos que se describen a continuación y subir el YAML modificado mediante el comando gcloud beta run services replace. Asegúrate de modificar los campos tal como se indica en la documentación.

  1. Para ver y descargar la configuración:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Actualiza la anotación run.googleapis.com/encryption-key:

    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/RING_NAME/cryptoKeys/KEY_NAME

    Reemplazar

    • SERVICE por el nombre del servicio de Cloud Run
    • PROJECT_NAME por el nombre del proyecto en el que se creó la clave
    • LOCATION por la ubicación en la que se creó la clave Debe coincidir con la ubicación del servicio de Cloud Run.
    • RING_NAME por el nombre del llavero de claves.
    • KEY_NAME por el nombre de la clave.
  3. Reemplaza el servicio por la configuración nueva mediante el comando siguiente:

    gcloud beta run services replace service.yaml

Haz referencia a claves de otros proyectos

Puedes hacer referencia a una clave desde otro proyecto, si la cuenta de servicio de tu proyecto tiene permiso para encriptar o desencriptar la clave.

Console

  1. Ir a Cloud Run

  2. Haz clic en Crear servicio si quieres configurar un servicio nuevo en el que realizarás la implementación. Si quieres configurar un servicio existente, haz clic en el servicio y, luego, en Implementar y editar una nueva revisión.

  3. Si estás configurando un servicio nuevo, llena la página de configuración inicial del servicio como desees y haz clic en Siguiente > Configuración avanzada para acceder a la página de configuración del servicio.

  4. Haz clic en la pestaña Seguridad.

    image

  5. En la pestaña Seguridad, haz lo siguiente:

    1. Selecciona la casilla de verificación Usar una clave de encriptación administrada por el cliente (CMEK).
    2. Selecciona ¿No ves tu Secret? Ingresa el ID de recurso de la clave de la lista desplegable Selecciona una clave administrada por el cliente (Select a customer-managed key) para ver el siguiente formulario:

      Claves de proyectos cruzados

    3. En el formulario Agregar un Secret por ID de recurso, ingresa el Secret del otro proyecto, en el formato projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. De manera alternativa, puedes copiar y pegar el ID de recurso del otro proyecto si tienes acceso a él. Para ello, selecciona la clave y haz clic en los puntos suspensivos Actions a la derecha del secreto. Selecciona Copiar ID del recurso en el menú desplegable.
    4. Haga clic en Implementar.

  6. Haz clic en Crear o Implementar.

Línea de comandos

Para configurar una clave en un servicio, usa uno de los siguientes comandos:

gcloud beta run deploy SERVICE --image IMAGE_URL --key KEY
gcloud beta run services update SERVICE --key KEY

Reemplazar

  • SERVICE por el nombre de tu servicio
  • IMAGE_URL por una referencia a la imagen de contenedor, como gcr.io/myproject/my-image:latest
  • KEY por el nombre de la clave completamente calificado, en este formato:projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

Visualiza la configuración de seguridad

Para ver la configuración de seguridad actual de tu servicio, haz lo siguiente:

Console

  1. Ir a Cloud Run

  2. Haz clic en el servicio que te interesa para abrir la página Detalles del servicio.

  3. Haz clic en la pestaña Revisiones (Revisions).

  4. En el panel de detalles de la derecha, la configuración de seguridad aparece en la pestaña Security.

Línea de comandos

  1. Usa el siguiente comando:

    gcloud run services describe SERVICE
  2. Busca la configuración de seguridad en la configuración mostrada.

¿Qué sigue?