Cloud Composer 1 | Cloud Composer 2
Cette page explique comment utiliser des clés de chiffrement gérées par le client (CMEK) pour protéger les environnements Cloud Composer. Les clés de chiffrement gérées par le client permettent de chiffrer et de déchiffrer les données utilisateur dans l'environnement.
Avant de commencer
Vous ne pouvez configurer CMEK que lorsque vous créez un environnement. Il n'est pas possible d'activer le chiffrement CMEK pour un environnement existant.
Cloud Composer est compatible avec le chiffrement CMEK avec les clés stockées dans les gestionnaires de clés externes.
Vous devez créer une clé CMEK dans la région où se trouvent vos environnements. Vous ne pouvez pas utiliser de clés multirégionales ou 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 et l'API Artifact Registry au périmètre.
Activez l'API Artifact Registry.
Console
Activez l'API Artifact Registry
gcloud
Activez l'API Artifact Registry
gcloud services enable artifactregistry.googleapis.com
Informations utilisateur non protégées par le chiffrement CMEK
Cloud Monitoring n'est pas compatible avec le chiffrement CMEK. Le nom de votre environnement et le nom des DAG sont stockés dans la base de données Monitoring sous la forme chiffrée à l'aide de clés de chiffrement gérées par Google.
Cloud Composer stocke les informations suivantes protégées par des clés gérées par Google, et non par des clés gérées par le client:
- Nom de l'environnement
- Remplacements de configuration Airflow
- Variables d'environnement
- Descriptions des plages d'adresses IP autorisées
- Plages d'adresses IP
- Étiquettes
- Les noms de certains paramètres stockés par Cloud Composer peuvent inclure une sous-chaîne du nom de l'environnement.
Utiliser une clé de chiffrement gérée par le client pour votre environnement
Étape 1. Créer une clé de chiffrement gérée par le client
Suivez les étapes décrites dans la section 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 à des agents de service
Console
Ignorez 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.
Agent de service | Adresse e-mail du compte de service | Nom du service de l'API |
---|---|---|
Agent de service Cloud Composer | service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com/ | composer.googleapis.com |
Agent de service Artifact Registry | service-PROJECT_NUMBER@gcp-sa-artefactregistry.iam.gserviceaccount.com. | artifactregistry.googleapis.com |
Agent de service GKE | service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com | container.googleapis.com |
Agent de service Pub/Sub | service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com. | pubsub.googleapis.com |
Agent de service Compute Engine | service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com} | compute.googleapis.com |
Agent de service Cloud Storage | service-PROJECT_NUMBER@gs-projet-comptes.iam.gserviceaccount.com | Accorder des autorisations de chiffrement et de déchiffrement avec gsutil kms authorize |
(Si nécessaire). Si certains de ces comptes de service ne sont pas présents dans votre projet, cela signifie qu'une identité pour ce service n'a pas encore été créée. Cela peut se produire, par exemple, si vous n'avez pas encore créé d'environnement Cloud Composer dans votre projet.
Pour ajouter ces comptes de service, créez des identités pour les services répertoriés à l'aide de 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
Attribuez le rôle à l'agent de service 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
Attribuez le rôle à l'agent de service 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
Attribuez le rôle à l'agent de service 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
Attribuez le rôle à l'agent de service 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
Accordez des autorisations de chiffrement et de déchiffrement à l'agent de service Cloud Storage.
gsutil kms authorize -k \ 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é d'un autre projet, cette valeur est différente de l'ID du projet. Si vous utilisez une clé du même projet, cette valeur correspond à l'ID de votre projet.PROJECT_NUMBER
par votre numéro de 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
par 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:
Dans la section Chiffrement des données, sélectionnez Clé de chiffrement gérée par le client (CMEK).
Dans la liste déroulante Sélectionnez une clé gérée par le client, 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, affichez la liste des agents de service qui doivent disposer du rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS sur la clé.
Pour accorder les rôles et les autorisations requis, cliquez sur Accorder.
gcloud
L'argument --kms-key
spécifie une clé d'en-tête 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 l'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 où se trouve la clé. Si vous utilisez une clé 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 où 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
par 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-2.0.12-airflow-2.2.3 \
--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 d'un environnement existant:
Console
Dans Google Cloud Console, accédez à la page Environnements.
Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Environment details (Détails sur l'environnement) s'ouvre.
Accédez à l'onglet Configuration de l'environnement.
Vous trouverez des informations détaillées sur le chiffrement dans la section 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 où 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
Si vous pensez que vos journaux contiennent des données sensibles, vous pouvez les rediriger vers un bucket Cloud Storage chiffré par clé CMEK à l'aide du routeur de journaux. car vos journaux ne seraient pas envoyés à Monitoring.
Si vous avez besoin d'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éer un bucket Cloud Storage pour stocker les journaux ;
gsutil mb -l LOCATION gs://BUCKET_NAME
Remplacez :
LOCATION
par la région où se trouve l'environnement.BUCKET_NAME
par le nom du bucket ;
Exemple :
gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
Chiffrez le bucket à l'aide de votre clé CMEK.
gsutil kms encryption \ -k projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME \ gs://BUCKET_NAME
Remplacez :
KEY_PROJECT_ID
par l'ID du projet où se trouve la clé. Si vous utilisez une clé 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
par 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 :
gsutil kms encryption \ -k projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key \ gs://composer-logs-us-central1-example-environment
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 où 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"
Accordez le rôle Créateur d'objets Storage au compte de service associé à ce bucket. Le compte de service s'affiche 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 d'agent de service Logging pour ce bucket. Le nom de ce compte sera 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 où 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 où se trouve la clé. Si vous utilisez une clé 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
par 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 :
Rotation de la clé CMEK pour Cloud Composer
Une fois que vous avez configuré le chiffrement dans votre environnement à l'aide de clés CMEK, vous devez également envisager de les alterner à intervalles réguliers, comme décrit dans la documentation KMS.
Lorsque vous alternez une clé CMEK, les données chiffrées avec des versions de clé précédentes ne sont pas rechiffrées automatiquement avec la nouvelle version de clé. Pour en savoir plus, consultez la page Rechiffrer des données. Plus précisément, cela s'applique aux cas suivants:
d'objets stockés dans le bucket d'environnement
Données stockées dans Airflow Metadata Database
images de conteneur stockées dans les dépôts Aritfact Registry
et tous les autres objets de données chiffrés avec CMEK dans le environnement cloudnet Cloud Composer.