Configurar el cifrado con claves de cifrado gestionadas por el cliente

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

En esta página se describe cómo usar claves de encriptado gestionadas por el cliente (CMEK) para proteger entornos de Cloud Composer.

Acerca de las claves de encriptado gestionadas por el cliente (CMEK)

De forma predeterminada, Cloud Composer encripta el contenido de los clientes en reposo. Cloud Composer 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 Composer. 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 acceso a tus recursos de Cloud Composer 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).

Datos protegidos con cifrado CMEK

Cloud Composer protege los siguientes datos con el cifrado CMEK:

  • Contenido y esquema de la base de datos de Airflow
  • Registros de tareas de Airflow y del entorno en Cloud Logging
  • Contenido del segmento del entorno
  • Secretos almacenados en el clúster del entorno
  • Discos persistentes usados por la cola de tareas
  • Imágenes de contenedor de componentes del entorno almacenadas en repositorios de Artifact Registry

Para obtener información específica sobre cómo se cifran los datos, consulta los siguientes artículos:

Datos no protegidos con el cifrado de CMEK

Cloud Monitoring no admite el cifrado con CMEK. El nombre de tu entorno y los nombres de los DAGs se almacenan en la base de datos de Monitoring de forma cifrada mediante Google-owned and Google-managed encryption keys.

Cloud Composer almacena la siguiente información protegida conGoogle-owned and Google-managed encryption keys, no con claves gestionadas por el cliente:

  • Nombre del entorno
  • Anulaciones de configuración de Airflow
  • Variables de entorno

  • Descripciones de los intervalos de IP permitidos

  • Intervalos de IP

  • Etiquetas

  • Los nombres de algunos parámetros almacenados por Cloud Composer pueden incluir una subcadena del nombre del entorno.

Rotación de claves CMEK en Cloud Composer

Después de configurar el cifrado en tu entorno con claves CMEK, también puedes plantearte rotar estas claves periódicamente, tal como se describe en la documentación de KMS.

Cuando rotas una clave CMEK, los datos encriptados con versiones anteriores de la clave no se vuelven a encriptar automáticamente con la nueva versión de la clave. Para obtener más información, consulta Volver a cifrar datos.

En concreto, esto se aplica a lo siguiente:

  • Objetos almacenados en el segmento del entorno.
  • Datos almacenados en la base de datos de Airflow.
  • Todos los demás objetos de datos encriptados con CMEK en el entorno de Cloud Composer.
  • Imágenes de contenedor de componentes del entorno almacenadas en repositorios de Artifact Registry.

Usar una clave de encriptado gestionada por el cliente en tu entorno

Antes de empezar

  • Solo puedes configurar la CMEK al crear un entorno. No se puede habilitar CMEK en un entorno que ya está creado.

  • Cloud Composer admite el cifrado con CMEK mediante claves almacenadas en gestores de claves externos.

  • Debes crear una clave CMEK en la misma región en la que se encuentren tus entornos. No puedes usar claves multirregionales ni globales.

  • Si quieres que tu entorno se ejecute dentro de un perímetro de Controles de Servicio de VPC, debes añadir la API Cloud Key Management Service y la API Artifact Registry al perímetro.

  • Habilitar la API de Artifact Registry.

    Consola

    Enable the Artifact Registry API.

    Enable the API

    gcloud

    Enable the Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com

Paso 1. Crear una clave de encriptado gestionada por el cliente

Sigue los pasos que se indican en el artículo Crear claves de cifrado simétricas para crear una clave en la región en la que se encuentra tu entorno.

Paso 2: Conceder roles a agentes de servicio

Consola

Saltar este paso Cuando especificas una clave para tu entorno, concedes permisos a los agentes de servicio.

gcloud

Los siguientes agentes de servicio deben tener el rol Encargado del encriptado y desencriptado de claves criptográficas de Cloud KMS en la clave que uses en tu entorno.

Sustituye PROJECT_NUMBER por el número de tu proyecto.

Nombre del agente de servicio Correo electrónico de la cuenta de servicio Nombre del servicio de la API
Agente de servicio de Cloud Composer service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Agente de servicio de Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Agente de servicios de Kubernetes Engine service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Agente del servicio Pub/Sub service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Agente de servicio de Compute Engine service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Agente de servicio de Cloud Storage service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Conceder permisos de cifrado y descifrado con gcloud storage service-agent --authorize-cmek
  1. Si es necesario, si algunas de estas cuentas de servicio no están en tu proyecto, significa que aún no se ha creado una identidad para este servicio. Esto puede ocurrir, por ejemplo, si aún no has creado ningún entorno de Cloud Composer en tu proyecto.

    Para añadir estas cuentas de servicio, crea identidades para los servicios indicados con el siguiente comando:

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    Sustituye API_SERVICE_NAME por el nombre del servicio de la API de un servicio que no tenga una cuenta de servicio en tu proyecto.

    Ejemplo:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Concede permisos a los agentes de servicio:

    1. Asigna el rol al agente de servicio de Cloud Composer:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    2. Asigna el rol al agente de servicio de Artifact Registry:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    3. Asigna el rol al agente de servicio de GKE:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    4. Asigna el rol al agente de servicio de Pub/Sub:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    5. Asigna el rol al agente de servicio de Compute Engine:

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    6. Concede permisos de cifrado y descifrado al agente de servicio de Cloud Storage. Puedes saltarte este paso si usas el cubo de un entorno personalizado.

      gcloud storage service-agent \
        --authorize-cmek=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    Sustituye:

    • PROJECT_ID por el ID de tu proyecto.
    • KEY_PROJECT_ID con el ID del proyecto que almacena tu clave gestionada por el cliente. Si usas una clave de otro proyecto, este valor será diferente del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor será el ID del proyecto.
    • PROJECT_NUMBER con el número de tu proyecto.
    • KEY_LOCATION con la ubicación de tu clave gestionada por el cliente. Esta ubicación debe ser la misma que la de tu entorno.
    • KEY_NAME con el nombre de tu clave gestionada por el cliente.
    • KEY_RING_NAME con el llavero de claves que almacena tu clave gestionada por el cliente.

    Para obtener estos valores, puedes ejecutar los comandos gcloud projects describe, gcloud kms keyrings list y gcloud kms keys describe.

Paso 3: Crear un entorno con CMEK

Después de crear una clave de encriptado gestionada por el cliente, puedes usarla para crear entornos de Cloud Composer.

Consola

Cuando creas un entorno, ocurre lo siguiente:

  1. Despliega la sección Configuración avanzada. En la sección Encriptado de datos, selecciona Clave de Cloud Key Management Service.

  2. En la lista desplegable Seleccionar una clave de Cloud Key Management Service, elige la clave.

  3. Si se requiere una configuración adicional, aparecerá un mensaje para informarte. En este caso:

    1. Haz clic en Abrir asistente.

    2. En el cuadro de diálogo Prepara la CMEK para usarla en Cloud Composer, consulta la lista de agentes de servicio que deben tener el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS en la clave.

    3. Para conceder los roles y permisos necesarios, haz clic en Conceder.

gcloud

El argumento --kms-key especifica una clave de encriptado gestionada por el cliente para tu entorno.

Para obtener más información sobre cómo crear entornos, consulta el artículo Crear entornos. Por ejemplo, puede especificar otros parámetros para su entorno.

gcloud composer environments create ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version IMAGE_VERSION \
  --kms-key projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

Sustituye:

  • ENVIRONMENT_NAME con el nombre del entorno.
  • IMAGE_VERSION con el nombre de la imagen de Cloud Composer.
  • KEY_PROJECT_ID por el ID del proyecto en el que se encuentra la clave. Si usas una clave de otro proyecto, este valor será diferente del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor será el ID del proyecto.
  • LOCATION con la región en la que se encuentra el entorno.
  • KEY_LOCATION con la ubicación de tu clave gestionada por el cliente. Esta ubicación debe ser la misma que la de tu entorno.
  • KEY_NAME con el nombre de tu clave gestionada por el cliente.
  • KEY_RING_NAME con el llavero de claves que almacena tu clave gestionada por el cliente.

Ejemplo:

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.13.9-airflow-2.10.5 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

Ver la configuración de cifrado del entorno

Para ver la configuración del cifrado de un entorno, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Entornos.

    Ir a Entornos

  2. En la lista de entornos, haz clic en el nombre del entorno. Se abrirá la página Detalles del entorno.

  3. Ve a la pestaña Configuración del entorno.

  4. Los detalles sobre el cifrado se indican en el elemento Clave de cifrado de datos.

gcloud

Ejecuta el siguiente comando gcloud para ver la configuración del cifrado

gcloud composer environments describe \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.encryptionConfig)"

Sustituye:

  • ENVIRONMENT_NAME con el nombre del entorno.
  • LOCATION con la región en la que se encuentra el entorno.

Ejemplo:

gcloud composer environments describe \
  example-environment \
  --location us-central1 \
  --format="value(config.encryptionConfig)"

Usar CMEK para los registros de Cloud Composer

Cloud Logging admite el cifrado del almacenamiento de registros con claves CMEK. Recomendamos usar el procedimiento estándar de CMEK para cifrar registros con claves CMEK.

Para cifrar los registros con claves CMEK, sigue las instrucciones que se indican en Gestionar las claves que protegen los datos de almacenamiento de Logging.

Redirigir los registros de Cloud Composer a un segmento de Cloud Storage cifrado con CMEK

Si crees que tus registros contienen datos sensibles, puedes redirigir los registros de Cloud Composer a un segmento de Cloud Storage cifrado con CMEK mediante Log Router. De esta forma, se evita que tus registros se envíen a Monitoring.

Si necesitas asistencia del equipo de Atención al Cliente de Cloud, es posible que tengas que conceder acceso a los ingenieros de asistencia de Google a los registros de Cloud Composer almacenados en Cloud Storage.

gcloud

  1. Crea un segmento de Cloud Storage para almacenar los registros.

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
    

    Sustituye:

    • LOCATION con la región en la que se encuentra el entorno.
    • BUCKET_NAME con el nombre del segmento.

    Ejemplo:

    gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
    
  2. Encripta el segmento con tu clave CMEK.

    gcloud storage buckets update gs://BUCKET_NAME \
      --default-encryption-key=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

    Sustituye:

    • KEY_PROJECT_ID por el ID del proyecto en el que se encuentra la clave. Si usas una clave de otro proyecto, este valor será diferente del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor será el ID del proyecto.
    • KEY_LOCATION con la ubicación de tu clave gestionada por el cliente. Esta ubicación debe ser la misma que la de tu entorno.
    • KEY_RING_NAME con el llavero de claves que almacena tu clave gestionada por el cliente.
    • KEY_NAME con el nombre de tu clave gestionada por el cliente.
    • BUCKET_NAME con el nombre del segmento.

    Ejemplo:

    gcloud storage buckets update gs://composer-logs-us-central1-example-environment \
      --default-encryption-key=projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
    
  3. Crea un nuevo receptor de registro.

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Sustituye:

    • ENVIRONMENT_NAME con el nombre del entorno.
    • LOCATION con la región en la que se encuentra el entorno.
    • BUCKET_NAME con el nombre del segmento.

    Ejemplo:

    gcloud logging sinks create \
    composer-log-sink-example-environment \
    storage.googleapis.com/composer-logs-us-central1-example-environment \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  4. Asigna el rol Creador de objetos de Storage a la cuenta de servicio de este cubo. La cuenta de servicio se muestra en el resultado del comando anterior.

    gcloud projects add-iam-policy-binding \
      PROJECT_ID \
      --member="serviceAccount:LOGGING_SERVICE_AGENT" \
      --role="roles/storage.objectCreator" \
      --condition=None
    

    Sustituye:

    • PROJECT_ID con el ID del proyecto.
    • LOGGING_SERVICE_AGENT con la cuenta de agente del servicio Logging de este segmento. El nombre de esta cuenta se obtiene en el paso anterior.

    Ejemplo:

    gcloud projects add-iam-policy-binding \
      example-project \
      --member="serviceAccount:example-sa@gcp-sa-logging.iam.gserviceaccount.com" \
      --role="roles/storage.objectCreator" \
      --condition=None
    
  5. Excluye los registros de tu nuevo entorno de la monitorización.

    gcloud beta logging sinks update _Default \
      --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    Sustituye:

    • ENVIRONMENT_NAME con el nombre del entorno.
    • LOCATION con la región en la que se encuentra el entorno.

    Ejemplo:

    gcloud beta logging sinks update _Default \
      --add-exclusion name=example-environment-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  6. Añade el cifrado con CMEK a nivel de organización al router de registros.

    gcloud logging cmek-settings describe \
      --organization=ORGANIZATION_ID
    
    gcloud kms keys add-iam-policy-binding \
          --project=KEY_PROJECT_ID \
          --member LOGGING_SERVICE_AGENT \
          --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
          --location=KEY_LOCATION \
          --keyring=KEY_RING_NAME \
          KEY_NAME
    
    gcloud logging cmek-settings update \
      --organization=ORGANIZATION_ID \
      --kms-project=KEY_PROJECT_ID \
      --kms-keyring=KEY_RING_NAME \
      --kms-location=KEY_LOCATION \
      --kms-key-name=KEY_NAME
    

    Sustituye:

    • ORGANIZATION_ID con tu ID de organización.
    • KEY_PROJECT_ID por el ID del proyecto en el que se encuentra la clave. Si usas una clave de otro proyecto, este valor será diferente del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor será el ID del proyecto.
    • KEY_RING_NAME con el llavero de claves que almacena tu clave gestionada por el cliente.
    • KEY_LOCATION con la ubicación de tu clave gestionada por el cliente. Esta ubicación debe ser la misma que la de tu entorno.
    • KEY_NAME con el nombre de tu clave gestionada por el cliente.

Siguientes pasos