Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
En esta página, se describe cómo usar Claves de encriptación administradas por el cliente (CMEK) para proteger Entornos de Cloud Composer. Las claves de encriptación administradas por el cliente que se usan para encriptar o desencriptar los datos del usuario en el entorno.
Antes de comenzar
Puedes configurar CMEK solo cuando creas un entorno. No es posible habilitar las CMEK para un entorno existente.
Cloud Composer admite la encriptación de CMEK con claves almacenadas en administradores de claves externos.
Debes crear una clave CMEK en la misma región donde se ubican tus entornos. No puedes usar claves multirregionales o globales.
Si quieres que tu entorno se ejecute en un Controles del servicio de VPC, debes agregar la API de Cloud Key Management Service y la API de Artifact Registry al perímetro.
Habilitar la API de Artifact Registry
Console
Enable the Artifact Registry API.
gcloud
Enable the Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com
Información del usuario no protegida con la encriptación de CMEK
Cloud Monitoring no admite la encriptación con CMEK. El nombre de tu entorno y los nombres de los DAG se almacenan en la base de datos de Monitoring en formato encriptado con claves que son propiedad de Google y están administradas por Google.
Cloud Composer almacena la siguiente información protegida con claves que son propiedad de Google y están administradas por Google, no con 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 que almacena 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étricas para crear una clave en la región donde se encuentra tu entorno.
Paso 2: Otorga roles a los agentes de servicio
Console
Omite este paso. Le otorgas permisos a agentes de servicio cuando especifica una clave para tu entorno.
gcloud
Los siguientes agentes de servicio deben tener el rol de encriptador/desencriptador de CryptoKey de Cloud KMS en la clave que usas para tu entorno.
Reemplaza PROJECT_NUMBER
por tu
número del proyecto.
Nombre del agente de servicio | Correo electrónico de la cuenta de servicio | Nombre del servicio de 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 de servicio de 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 | Otorga permisos de encriptación y desencriptación con gcloud storage service-agent --authorize-cmek |
(Si es necesario) Si algunas de estas cuentas de servicio no están presentes en tu significa que aún no se creó una identidad para ese 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 enumerados con el siguiente comando:
gcloud beta services identity create \ --service=API_SERVICE_NAME
Reemplaza
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
Otorga permisos a los agentes de servicio:
Otorga 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
Otorga 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
Otorga 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
Otorga 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
Otorga 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
Otorga permisos de encriptación y desencriptación 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
Reemplaza lo siguiente:
PROJECT_ID
por el ID de tu proyecto.KEY_PROJECT_ID
por el ID del proyecto que almacena tu clave administrada por el cliente. Si usas una clave de otro proyecto, esta 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 tu clave administrada por el cliente Esta ubicación debe ser la misma que la ubicación de tu entorno.KEY_NAME
por el nombre de tu clave administrada por el clienteKEY_RING_NAME
con el llavero que almacena tu clave administrada por el cliente.
Para obtener estos valores, puedes ejecutar los comandos
gcloud projects describe
,gcloud kms keyrings list
ygcloud kms keys describe
.
Paso 3: Crea un entorno con CMEK
Después de crear una clave de encriptación administrada por el cliente, puedes usar para crear entornos de Cloud Composer.
Console
Cuando creas un entorno, sucede lo siguiente:
Expande las Herramientas de redes, las anulaciones de configuración de Airflow y las funciones adicionales. sección. En la sección Encriptación de datos, selecciona Clave de encriptación administrada por el cliente (CMEK).
En la lista desplegable Selecciona una clave administrada por el cliente, selecciona tu clave.
Si se requiere configuración adicional, aparecerá un mensaje para informarte. En este caso:
Haz clic en Abrir el asistente.
En Prepara una clave CMEK para su uso en Cloud Composer en el diálogo, consulta la lista de agentes de servicio que debe tener la función de Encriptador/Desencriptador de CryptoKey de Cloud KMS en la llave.
Para otorgar los roles y permisos necesarios, haz clic en Otorgar.
gcloud
El argumento --kms-key
especifica una clave de encriptación administrada por el cliente para tu
en un entorno de nube.
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
con la ubicación de tu clave administrada por el cliente Esta ubicación debe ser la misma que la de tu entorno.KEY_NAME
por el nombre de la clave administrada por el cliente.KEY_RING_NAME
con el llavero que almacena tu clave administrada 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
Visualiza la configuración de encriptación del entorno
Puedes ver la configuración de encriptación de un entorno existente:
Console
En la consola de Google Cloud, ve a la página Entornos.
En la lista de entornos, haz clic en el nombre de tu entorno. Se abrirá la página Detalles del entorno.
Ve a la pestaña Configuración del entorno.
Los detalles sobre la encriptación se indican 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
Cloud Logging admite la encriptación del almacenamiento de registros con claves CMEK. Recomendaciones usar el procedimiento estándar de CMEK para encriptar registros con claves CMEK.
Para encriptar registros con claves CMEK, sigue las instrucciones que se describen en Administra las claves que protegen los datos de almacenamiento de registros.
Redirecciona los registros de Cloud Composer a un bucket de Cloud Storage encriptado con CMEK
Si esperas que tus registros contengan datos sensibles, redireccionar registros de Cloud Composer a una cuenta de servicio bucket de Cloud Storage con Enrutador de registros. Esto evita que los registros se envíen a Monitoring.
Si necesitas asistencia de Atención al cliente de Cloud, es posible que debas otorgarle a Google acceso a los ingenieros de asistencia a los registros de Cloud Composer en Google Cloud Storage.
gcloud
Crea un bucket de Cloud Storage nuevo para almacenar los registros.
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
Reemplaza lo siguiente:
LOCATION
por la región en la que se encuentra el entornoBUCKET_NAME
por el nombre del bucket
Ejemplo:
gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
Encripta el bucket 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
Reemplaza lo siguiente:
KEY_PROJECT_ID
con el ID del proyecto en el que se encuentra la clave. Si usas una clave de otro proyecto, este valor es diferente del el 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 debe ser la misma que la de tu entorno.KEY_RING_NAME
por el llavero de claves que almacena tu clave administrada por el clienteKEY_NAME
por el nombre de la clave administrada por el cliente.BUCKET_NAME
por el nombre del bucket.
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 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 bucket.
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"
Otorga el rol de creador de objetos de almacenamiento a la cuenta de servicio de este bucket. 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 el servicio de Logging cuenta de agente de este bucket. 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 para tu entorno nuevo de Supervisió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"
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"
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 tu organización.KEY_PROJECT_ID
con el ID del proyecto en el que se encuentra la clave. Si usas una clave de otro proyecto, este valor es diferente del el 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 tu clave administrada por el clienteKEY_LOCATION
con la ubicación de tu clave administrada por el cliente Esta ubicación debe ser la misma que la de tu entorno.KEY_NAME
por el nombre de la clave administrada por el cliente.
Rotación de claves CMEK para Cloud Composer
Después de configurar la encriptación en tu entorno con claves de CMEK, también te recomendamos que consideres rotar estas claves de forma periódica, como se describe en la documentación de KMS.
Cuando rotas una clave CMEK, los datos encriptados con versiones de claves anteriores se no se volverán a encriptar automáticamente con la versión de clave nueva. Para obtener más información, consulta Cómo volver a encriptar datos.
Específicamente, esto se aplica en los siguientes casos:
- Objetos almacenados en el bucket del entorno
- Cata almacenada en la base de datos de Airflow.
- Imágenes de contenedores almacenadas en repositorios de Artifact Registry.
- Todos los demás objetos de datos encriptados con CMEK en el entorno de Cloud Composer