Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Cette page explique comment utiliser les clés de chiffrement gérées par le client (CMEK) pour protéger les environnements Cloud Composer.
À propos des clés de chiffrement gérées par le client (CMEK)
Par défaut, Cloud Composer chiffre les contenus client au repos. Cloud Composer gère le chiffrement sans intervention de votre part. Cette option est appelée chiffrement par défaut de Google.
Si vous souhaitez contrôler vos clés de chiffrement, vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK) dans Cloud KMS avec des services bénéficiant d'une intégration des CMEK, y compris Cloud Composer. L'utilisation de clés Cloud KMS vous permet de contrôler leur niveau de protection, leur emplacement, leur calendrier de rotation, leurs autorisations d'utilisation et d'accès, ainsi que leurs limites cryptographiques. Grâce à Cloud KMS, vous pouvez également afficher les journaux d'audit et contrôler les cycles de vie des clés. Au lieu de laisser Google posséder et gérer les clés de chiffrement de clés (KEK) symétriques qui protègent vos données, c'est vous qui vous chargez de cette tâche dans Cloud KMS.
Une fois que vous avez configuré vos ressources avec des CMEK, l'accès à vos ressources Cloud Composer est semblable à celui du chiffrement par défaut de Google. Pour en savoir plus sur les options de chiffrement, consultez Clés de chiffrement gérées par le client (CMEK).
Données protégées par le chiffrement CMEK
Cloud Composer protège les données suivantes avec le chiffrement CMEK :
- Contenu et schéma de la base de données Airflow
- Journaux d'environnement et de tâches Airflow dans Cloud Logging
- Contenu du bucket de l'environnement
- Secrets stockés dans le cluster de l'environnement
- Disques persistants utilisés par la file d'attente des tâches
- Images de conteneur des composants d'environnement stockées dans les dépôts Artifact Registry
Pour en savoir plus sur le chiffrement des données, consultez les articles suivants :
- À propos des clés de chiffrement gérées par le client (CMEK) dans la documentation Cloud SQL.
- Utilisez des clés de chiffrement gérées par le client (CMEK) et chiffrez les secrets au niveau de l'application dans la documentation Google Kubernetes Engine.
- Clés de chiffrement gérées par le client dans la documentation Cloud Storage.
- Configurer CMEK pour Cloud Logging dans la documentation Cloud Logging
Données non protégées par le chiffrement CMEK
Cloud Monitoring n'est pas compatible avec le chiffrement CMEK. Le nom de votre environnement et les noms des DAG sont stockés dans la base de données Monitoring sous forme chiffrée à l'aide de Google-owned and Google-managed encryption keys.
Cloud Composer stocke les informations suivantes protégées parGoogle-owned and Google-managed encryption keys, et non par des clés gérées par le client :
- Nom de l'environnement
- Remplacements de configuration Airflow
Variables d'environnement
Étiquettes
Les noms de certains paramètres stockés par Cloud Composer peuvent inclure une sous-chaîne du nom de l'environnement.
Rotation des clés CMEK pour Cloud Composer
Après avoir configuré le chiffrement dans votre environnement à l'aide de clés CMEK, vous pouvez également envisager de faire régulièrement pivoter ces clés, comme décrit dans la documentation KMS.
Lorsque vous effectuez la rotation d'une clé CMEK, les données chiffrées avec des versions de clé précédentes ne sont pas automatiquement rechiffrées avec la nouvelle version de clé. Pour en savoir plus, consultez Rechiffrer des données.
Cela s'applique aux éléments suivants :
- Objets stockés dans le bucket de l'environnement.
- Données stockées dans la base de données Airflow.
- Tous les autres objets de données chiffrés avec CMEK dans l'environnement Cloud Composer.
- Images de conteneurs des composants de l'environnement stockées dans des dépôts Artifact Registry.
Utiliser une clé de chiffrement gérée par le client pour votre environnement
Avant de commencer
Vous ne pouvez configurer CMEK que lorsque vous créez un environnement. Il n'est pas possible d'activer CMEK pour un environnement existant.
Cloud Composer est compatible avec le chiffrement CMEK à l'aide de clés stockées dans des gestionnaires de clés externes.
Vous devez créer une clé CMEK dans la même région que vos environnements. Vous ne pouvez pas utiliser de clés multirégionales ni globales.
Si vous souhaitez que votre environnement s'exécute dans un périmètre VPC Service Controls, vous devez ajouter l'API Cloud Key Management Service au périmètre.
Étape 1. Créer une clé de chiffrement gérée par le client
Suivez la procédure décrite dans Créer des clés de chiffrement symétriques pour créer une clé dans la région où se trouve votre environnement.
Étape 2 : Attribuer des rôles aux agents de service
Console
Ignorer cette étape Vous accordez des autorisations aux agents de service lorsque vous spécifiez une clé pour votre environnement.
gcloud
Les agents de service suivants doivent disposer du rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS sur la clé que vous utilisez pour votre environnement.
Remplacez PROJECT_NUMBER
par le numéro de votre projet.
Nom de l'agent de service | Adresse e-mail du compte de service | Nom du service d'API |
---|---|---|
Agent de service Cloud Composer | service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com | composer.googleapis.com |
Agent de service Cloud Storage | service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com | Accorder les autorisations de chiffrement/déchiffrement avec gcloud storage service-agent --authorize-cmek |
(Si nécessaire) Si certains de ces comptes de service ne sont pas présents dans votre projet, cela signifie qu'aucune identité n'a encore été créée pour ce service. Cela peut se produire, par exemple, si vous n'avez pas encore créé d'environnements Cloud Composer dans votre projet.
Pour ajouter ces comptes de service, créez des identités pour les services listés avec la commande suivante :
gcloud beta services identity create \ --service=API_SERVICE_NAME
Remplacez
API_SERVICE_NAME
par le nom de service de l'API d'un service qui ne possède pas de compte de service dans votre projet.Exemple :
gcloud beta services identity create \ --service=composer.googleapis.com
Accordez des autorisations aux agents de service :
Attribuez le rôle à l'agent de service 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
Accordez les autorisations de chiffrement/déchiffrement à l'agent de service Cloud Storage. Vous pouvez ignorer cette étape si vous utilisez le bucket d'un environnement personnalisé.
gcloud storage service-agent \ --authorize-cmek=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Remplacez :
PROJECT_ID
par l'ID de votre projet.KEY_PROJECT_ID
par l'ID du projet qui stocke votre clé gérée par le client. Si vous utilisez une clé provenant d'un autre projet, cette valeur est différente de l'ID de votre projet. Si vous utilisez une clé du même projet, cette valeur correspond à l'ID de votre projet.PROJECT_NUMBER
par le numéro de votre projet.KEY_LOCATION
par l'emplacement de votre clé gérée par le client. Cet emplacement doit être identique à celui de votre environnement.KEY_NAME
par le nom de votre clé gérée par le client.KEY_RING_NAME
avec le trousseau de clés qui stocke votre clé gérée par le client.
Pour obtenir ces valeurs, vous pouvez exécuter les commandes
gcloud projects describe
,gcloud kms keyrings list
etgcloud kms keys describe
.
Étape 3 : Créer un environnement avec CMEK
Après avoir créé une clé de chiffrement gérée par le client, vous pouvez l'utiliser pour créer des environnements Cloud Composer.
Console
Lorsque vous créez un environnement :
Développez la section Configuration avancée. Dans la section Chiffrement des données, sélectionnez Clé Cloud Key Management Service.
Dans la liste déroulante Sélectionner une clé Cloud Key Management Service, sélectionnez votre clé.
Si une configuration supplémentaire est requise, un message s'affiche pour vous en informer. Dans ce cas :
Cliquez sur Ouvrir l'assistant.
Dans la boîte de dialogue Préparer la clé CMEK pour l'utiliser dans Cloud Composer, consultez la liste des agents de service qui doivent disposer du rôle Chiffreur/Déchiffreur de CryptoKey Cloud KMS sur la clé.
Pour attribuer les rôles et autorisations requis, cliquez sur Attribuer.
gcloud
L'argument --kms-key
spécifie une clé de chiffrement gérée par le client pour votre environnement.
Pour en savoir plus sur la création d'environnements, consultez Créer des environnements. Par exemple, vous pouvez spécifier d'autres paramètres pour votre environnement.
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
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.IMAGE_VERSION
par le nom de l'image Cloud Composer.KEY_PROJECT_ID
par l'ID du projet dans lequel se trouve la clé. Si vous utilisez une clé provenant d'un autre projet, cette valeur est différente de l'ID de votre projet. Si vous utilisez une clé du même projet, cette valeur correspond à l'ID de votre projet.LOCATION
par la région dans laquelle se trouve l'environnement.KEY_LOCATION
par l'emplacement de votre clé gérée par le client. Cet emplacement doit être identique à celui de votre environnement.KEY_NAME
par le nom de votre clé gérée par le client.KEY_RING_NAME
avec le trousseau de clés qui stocke votre clé gérée par le client.
Exemple :
gcloud composer environments create example-environment \
--location us-central1 \
--image-version composer-3-airflow-2.10.5-build.12 \
--kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
Afficher la configuration du chiffrement de l'environnement
Vous pouvez afficher la configuration du chiffrement pour un environnement existant :
Console
Dans la console Google Cloud , accédez à la page Environnements.
Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.
Accédez à l'onglet Configuration de l'environnement.
Les informations sur le chiffrement sont listées dans l'élément Clé de chiffrement des données.
gcloud
Exécutez la commande gcloud
suivante pour afficher la configuration du chiffrement.
gcloud composer environments describe \
ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.encryptionConfig)"
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.
Exemple :
gcloud composer environments describe \
example-environment \
--location us-central1 \
--format="value(config.encryptionConfig)"
Utiliser CMEK pour les journaux Cloud Composer
Cloud Logging permet de chiffrer le stockage des journaux avec des clés CMEK. Nous vous recommandons d'utiliser la procédure CMEK standard pour chiffrer les journaux avec des clés CMEK.
Pour chiffrer les journaux avec des clés CMEK, suivez les instructions de la section Gérer les clés qui protègent les données de stockage Logging.
Rediriger les journaux Cloud Composer vers un bucket Cloud Storage chiffré avec CMEK
Si vos journaux sont susceptibles de contenir des données sensibles, vous pouvez les rediriger vers un bucket Cloud Storage chiffré par CMEK à l'aide du routeur de journaux. Cela empêche l'envoi de vos journaux à Monitoring.
Si vous avez besoin de l'assistance Cloud Customer Care, vous devrez peut-être autoriser les ingénieurs de l'assistance Google à accéder aux journaux Cloud Composer stockés dans Cloud Storage.
gcloud
Créez un bucket Cloud Storage pour stocker les journaux.
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
Remplacez :
LOCATION
par la région dans laquelle se trouve l'environnement.BUCKET_NAME
par le nom du bucket.
Exemple :
gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
Chiffrez le bucket avec votre clé 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
Remplacez :
KEY_PROJECT_ID
par l'ID du projet dans lequel se trouve la clé. Si vous utilisez une clé provenant d'un autre projet, cette valeur est différente de l'ID de votre projet. Si vous utilisez une clé du même projet, cette valeur correspond à l'ID de votre projet.KEY_LOCATION
par l'emplacement de votre clé gérée par le client. Cet emplacement doit être identique à celui de votre environnement.KEY_RING_NAME
avec le trousseau de clés qui stocke votre clé gérée par le client.KEY_NAME
par le nom de votre clé gérée par le client.BUCKET_NAME
par le nom du bucket.
Exemple :
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
Créez un récepteur de journaux.
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"
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.BUCKET_NAME
par le nom du bucket.
Exemple :
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"
Attribuez le rôle Créateur des objets de l'espace de stockage au compte de service pour ce bucket. Le compte de service est indiqué dans le résultat de la commande précédente.
gcloud projects add-iam-policy-binding \ PROJECT_ID \ --member="serviceAccount:LOGGING_SERVICE_AGENT" \ --role="roles/storage.objectCreator" \ --condition=None
Remplacez :
PROJECT_ID
par l'ID du projet.LOGGING_SERVICE_AGENT
par le compte de l'agent du service Logging pour ce bucket. Le nom de ce compte est obtenu à l'étape précédente.
Exemple :
gcloud projects add-iam-policy-binding \ example-project \ --member="serviceAccount:example-sa@gcp-sa-logging.iam.gserviceaccount.com" \ --role="roles/storage.objectCreator" \ --condition=None
Excluez les journaux de votre nouvel environnement 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"
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.
Exemple :
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"
Ajoutez le chiffrement CMEK au niveau de l'organisation au routeur de journaux.
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
Remplacez :
ORGANIZATION_ID
par l'ID de votre organisation.KEY_PROJECT_ID
par l'ID du projet dans lequel se trouve la clé. Si vous utilisez une clé provenant d'un autre projet, cette valeur est différente de l'ID de votre projet. Si vous utilisez une clé du même projet, cette valeur correspond à l'ID de votre projet.KEY_RING_NAME
avec le trousseau de clés qui stocke votre clé gérée par le client.KEY_LOCATION
par l'emplacement de votre clé gérée par le client. Cet emplacement doit être identique à celui de votre environnement.KEY_NAME
par le nom de votre clé gérée par le client.