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.
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:
- Acerca de las claves de cifrado gestionadas por el cliente (CMEK) en la documentación de Cloud SQL.
- Usa claves de encriptado gestionadas por el cliente (CMEK) y encripta secretos en la capa de aplicación en la documentación de Google Kubernetes Engine.
- Claves de encriptado gestionadas por el cliente en la documentación de Cloud Storage.
- Configura las CMEK de Cloud Logging en la documentación de Cloud Logging.
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.
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 |
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
Concede permisos a los agentes de servicio:
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
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
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
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
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
Concede permisos de cifrado y descifrado al agente de servicio de Cloud Storage.
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
ygcloud 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:
Despliega la sección Redes, anulaciones de la configuración de Airflow y funciones adicionales. En la sección Encriptado de datos, selecciona Clave de Cloud Key Management Service.
En la lista desplegable Seleccionar una clave de Cloud Key Management Service, elige la clave.
Si se requiere una configuración adicional, aparecerá un mensaje para informarte. En este caso:
Haz clic en Abrir asistente.
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.
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-1.20.12-airflow-1.10.15 \
--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
En la Google Cloud consola, ve a la página Entornos.
En la lista de entornos, haz clic en el nombre del entorno. Se abrirá la página Detalles del entorno.
Ve a la pestaña Configuración del entorno.
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
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
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
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"
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
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"
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.