Configura la encriptación con claves de encriptación administradas por el cliente

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Cloud Composer 1 | Cloud Composer 2

En esta página, se describe cómo usar las claves de encriptación administradas por el cliente (CMEK) para proteger los entornos de Cloud Composer. Las claves de encriptación administradas por el cliente se usan para encriptar o desencriptar los datos del usuario en el entorno.

Antes de comenzar

  • Solo puedes configurar CMEK cuando creas un entorno. No es posible habilitar CMEK en un entorno existente.

  • Cloud Composer admite la encriptación de CMEK con claves almacenadas en administradores de claves externas.

  • Debes crear una clave CMEK en la misma región en la que se encuentran los entornos. No puedes usar claves globales o multirregionales.

  • Si deseas que tu entorno se ejecute dentro de un perímetro de Controles del servicio de VPC, debes agregar la API de Cloud Key Management Service y la API de Artifact Registry al perímetro.

  • Habilita la API de Artifact Registry.

    Console

    Habilita la API de Artifact Registry.

    Habilita la API

    gcloud

    Habilita la API de Artifact Registry:

    gcloud services enable artifactregistry.googleapis.com

Información del usuario no protegida con encriptación de CMEK

Cloud Monitoring no es compatible con la encriptación de CMEK. El nombre de tu entorno y los nombres de los DAG se almacenan en la base de datos de Monitoring de forma encriptada mediante claves de encriptación administradas por Google.

Cloud Composer almacena la siguiente información protegida con claves administradas por Google, no claves administradas por el cliente:

  • Nombre del entorno
  • Anulaciones de configuración de Airflow
  • Variables de entorno
  • Descripciones de los rangos de IP permitidos
  • Rangos de IP
  • Etiquetas
  • Los nombres de algunos parámetros almacenados por Cloud Composer pueden incluir una subcadena del nombre del entorno.

Usa una clave de encriptación administrada por el cliente para tu entorno

Paso 1: Crea una clave de encriptación administrada por el cliente

Sigue los pasos que se describen en Crea claves de encriptación simétrica para crear una clave en la región en la que se encuentra el entorno.

Paso 2: Otorga funciones a los agentes de servicio

Console

Omite este paso. Otorgas permisos a los agentes de servicio cuando especificas una clave para tu entorno.

gcloud

Los siguientes agentes de servicio deben tener la función de Encriptador/Desencriptador de CryptoKey de Cloud KMS en la clave que usas para tu entorno.

Reemplaza PROJECT_NUMBER por el número de tu proyecto.

Agente de servicio Correo electrónico de la cuenta de servicio Nombre del servicio de API
Agente de servicio de Cloud Composer servicio-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Agente de servicio de Artifact Registry servicio-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Agente de servicio de GKE service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Agente de servicio de Pub/Sub servicio-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Agente de servicio de Compute Engine servicio-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Agente de servicio de Cloud Storage servicio-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Otorga permisos de encriptación y desencriptación con gsutil kms authorize
  1. (Si es necesario) Si algunas de estas cuentas de servicio no están presentes en tu proyecto, significa que aún no se creó una identidad para este servicio. Esto puede ocurrir, por ejemplo, si aún no creaste ningún entorno de Cloud Composer en tu proyecto.

    Para agregar estas cuentas de servicio, crea identidades para los servicios de la lista con el siguiente comando:

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    Reemplaza API_SERVICE_NAME por el nombre de servicio de la API de un servicio que no tiene una cuenta de servicio en el proyecto.

    Ejemplo:

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

    1. Otorga la función 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. Otorga la función 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. Otorga la función 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. Otorga la función 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. Otorga la función 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. Otorga permisos de encriptación y desencriptación al agente de servicio de Cloud Storage.

      gsutil kms authorize -k \
        projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    Reemplaza lo siguiente:

    • PROJECT_ID por el ID de tu proyecto
    • KEY_PROJECT_ID por el ID del proyecto que almacena la clave administrada por el cliente Si usas una clave de otro proyecto, este valor es diferente del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor es el ID de tu proyecto.
    • PROJECT_NUMBER por el número de tu proyecto
    • KEY_LOCATION por la ubicación de la clave administrada por el cliente Esta ubicación debe ser la misma que la del entorno.
    • KEY_NAME por el nombre de la clave administrada por el cliente
    • KEY_RING_NAME por el llavero de claves que almacena la clave administrada 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: Crea un entorno con CMEK

Después de crear una clave de encriptación administrada por el cliente, puedes usarla para crear entornos de Cloud Composer.

Console

Cuando creas un entorno, sucede lo siguiente:

  1. Expande la sección Herramientas de redes, anulaciones de configuración de Airflow y características adicionales. En la sección Encriptación de datos, selecciona Clave de encriptación administrada por el cliente (CMEK).

  2. En la lista desplegable Selecciona una clave administrada por el cliente, selecciona tu clave.

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

    1. Haz clic en Abrir asistente.

    2. En el cuadro de diálogo Preparar clave CMEK para el uso en Cloud Composer, consulta la lista de agentes de servicio que deben tener la función Encriptador/Desencriptador de CryptoKey de Cloud KMS en la clave.

    3. Para otorgar las funciones y los permisos necesarios, haz clic en Otorgar.

gcloud

El argumento --kms-key especifica una clave de gestión administrada por el cliente para tu entorno.

Para obtener más información sobre la creación de entornos, consulta Crea entornos. Por ejemplo, es posible que desees especificar otros parámetros para tu 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

Reemplaza lo siguiente:

  • ENVIRONMENT_NAME por el nombre del entorno.
  • IMAGE_VERSION por 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 es diferente del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor es el ID de tu proyecto.
  • LOCATION por la región en la que se encuentra el entorno
  • KEY_LOCATION por la ubicación de la clave administrada por el cliente Esta ubicación debe ser la misma que la del entorno.
  • KEY_NAME por el nombre de la clave administrada por el cliente
  • KEY_RING_NAME por el llavero de claves que almacena la clave administrada por el cliente

Ejemplo:

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

Ver la configuración de encriptación del entorno

Puedes ver la configuración de encriptación de un entorno existente:

Console

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

    Ir a Entornos

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

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

  4. Los detalles sobre la encriptación se detallan en el elemento Clave de encriptación de datos.

gcloud

Ejecuta el siguiente comando de gcloud para ver la configuración de encriptación

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

Reemplaza lo siguiente:

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

Ejemplo:

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

Usa CMEK para los registros de Cloud Composer

Si esperas que tus registros contengan datos sensibles, te recomendamos redireccionar los registros de Cloud Composer a un depósito de Cloud Storage encriptado con CMEK mediante el Enrutador de registros. Esto evita que tus registros se envíen a Monitoring.

Si necesitas asistencia de Cloud Customer Care, es posible que debas otorgar a los ingenieros de asistencia de Google acceso a los registros de Cloud Composer almacenados en Cloud Storage.

gcloud

  1. Crea un bucket de Cloud Storage nuevo para almacenar los registros.

    gsutil mb -l LOCATION gs://BUCKET_NAME
    

    Reemplaza lo siguiente:

    • LOCATION por la región en la que se encuentra el entorno
    • BUCKET_NAME por el nombre del depósito

    Ejemplo:

    gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
    
  2. Encripta el bucket con tu clave CMEK.

    gsutil kms encryption \
      -k projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME \
      gs://BUCKET_NAME
    

    Reemplaza lo siguiente:

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

    Ejemplo:

    gsutil kms encryption \
      -k projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key \
      gs://composer-logs-us-central1-example-environment
    
  3. Crea un receptor de registros nuevo.

    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"
    

    Reemplaza lo siguiente:

    • ENVIRONMENT_NAME por el nombre del entorno.
    • LOCATION por la región en la que se encuentra el entorno
    • BUCKET_NAME por el nombre del depósito

    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. Otorga la función Storage Object Creator a la cuenta de servicio de este depósito. 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
    

    Reemplaza lo siguiente:

    • PROJECT_ID por el ID del proyecto.
    • LOGGING_SERVICE_AGENT por la cuenta de agente de servicio de Logging para este depósito 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 para tu entorno nuevo de Monitoring.

    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"
    

    Reemplaza lo siguiente:

    • ENVIRONMENT_NAME por el nombre del entorno.
    • LOCATION por 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. Agrega la encriptación de CMEK a nivel de organización al enrutador 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
    

    Reemplaza lo siguiente:

    • ORGANIZATION_ID por el ID de la 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 es distinto del ID de tu proyecto. Si usas una clave del mismo proyecto, este valor es el ID de tu proyecto.
    • KEY_RING_NAME por el llavero de claves que almacena la clave administrada por el cliente
    • KEY_LOCATION por la ubicación de la clave administrada por el cliente Esta ubicación debe ser la misma que la del entorno.
    • KEY_NAME por el nombre de la clave administrada por el cliente

Rotación de la clave CMEK para Cloud Composer

Una vez que configures la encriptación en tu entorno con claves CMEK, también deberías considerar rotar estas claves con regularidad, como se describe en la documentación de KMS.

Cuando rotas una clave CMEK, los datos encriptados con versiones de clave anteriores no se vuelven a encriptar automáticamente con la versión de clave nueva. Aquí puedes obtener más información sobre cómo volver a encriptar los datos. Específicamente, esto se aplica a lo siguiente:

  • objetos almacenados en el bucket del entorno

  • datos almacenados en la base de datos de metadatos de Airflow

  • Imágenes de contenedor almacenadas en repositorios de Artifact Registry

y todos los demás objetos de datos encriptados con CMEK en el entorno de Cloud Composer.

¿Qué sigue?