Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Cette page explique comment utiliser Clés de chiffrement gérées par le client (CMEK) à protéger Environnements Cloud Composer. Les clés de chiffrement gérées par le client utilisé pour chiffrer/déchiffrer les données utilisateur dans l’environnement.
Avant de commencer
Vous ne pouvez configurer une clé CMEK que lorsque vous créez un environnement. Il n'est pas qu'il est possible d'activer les CMEK pour un environnement existant.
Cloud Composer prend en charge le chiffrement CMEK avec 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 celle où se trouvent vos environnements sont localisés. Vous ne pouvez pas utiliser de clés multirégionales ou globales.
Si vous souhaitez que votre environnement s'exécute 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
Activer 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 et les noms des DAG sont stockés dans le tableau de bord base de données sous forme chiffrée à l'aide de clés détenues et gérées par Google.
Cloud Composer stocke les informations suivantes protégées par des Clés appartenant à Google et gérées par Google, et non 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
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 le dans la région où se trouve votre environnement.
Étape 2. Attribuer des rôles aux agents de service
Console
Ignorez cette étape. Vous accordez des autorisations à agents de service lorsque vous spécifiez une clé pour votre environnement.
gcloud
Les agents de service suivants doivent : le rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS sur la clé que vous pour votre environnement.
Remplacez PROJECT_NUMBER
par votre
numéro du projet.
Nom de l'agent de service | Adresse e-mail du compte de service | Nom de 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-artifactregistry.iam.gserviceaccount.com | artifactregistry.googleapis.com |
Agent de service Kubernetes Engine | 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-project-accounts.iam.gserviceaccount.com | Accorder des autorisations de chiffrement/déchiffrement avec gcloud storage service-agent --authorize-cmek |
(Si nécessaire) Si certains de ces comptes de service ne figurent pas dans votre 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éé Cloud Composer dans votre projet.
Pour ajouter ces comptes de service, créez des identités pour les services répertoriés en exécutant la commande suivante:
gcloud beta services identity create \ --service=API_SERVICE_NAME
Remplacez
API_SERVICE_NAME
par le Nom de service d'API d'un service qui ne dispose pas d'un 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
Accorder des autorisations de chiffrement/déchiffrement à Agent de service Cloud Storage.
gcloud storage service-agent \ --authorize-cmek=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Remplacez :
PROJECT_ID
avec votre ID du projet.KEY_PROJECT_ID
par l'ID du projet qui stocke votre gérée par le client. Si vous utilisez une clé d'un autre projet, est différente de l'ID de votre projet. Si vous utilisez une clé même projet, cette valeur correspond à l'ID de votre projet.PROJECT_NUMBER
avec votre numéro du projet.KEY_LOCATION
par l'emplacement de votre clé gérée par le client. Ce lieu doit être le même que celui de votre environnement.KEY_NAME
par le nom de votre clé gérée par le client.KEY_RING_NAME
par le trousseau qui stocke votre clé gérée par le client ;
Pour obtenir ces valeurs, vous pouvez exécuter
gcloud projects describe
,gcloud kms keyrings list
etgcloud kms keys describe
.
Étape 3. Créer un environnement avec une clé CMEK
Après avoir créé une clé de chiffrement gérée par le client, vous pouvez utiliser pour créer des environnements Cloud Composer.
Console
Lorsque vous créez un environnement:
Développez la section Mise en réseau, remplacements de configuration Airflow et fonctionnalités supplémentaires. . 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électionner une clé gérée par le client, sélectionnez votre clé.
Si une configuration supplémentaire est nécessaire, un message s'affiche pour vous en informer. Dans ce cas:
Cliquez sur Ouvrir l'assistant.
Dans la section Préparer la clé CMEK pour une utilisation dans Cloud Composer consultez la liste des agents de service qui doit disposer du rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS sur la clé.
Pour accorder les rôles et les autorisations nécessaires, cliquez sur Attribuer.
gcloud
L'argument --kms-key
spécifie une clé d'enregistrement 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é d'un autre projet, cette valeur est différente de votre l'ID du projet. Si vous utilisez une clé du même projet, cette valeur correspond à votre l'ID du 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. Ce 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 qui stocke votre clé gérée par le client ;
Exemple :
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
Afficher la configuration de 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.
Pour en savoir plus sur le chiffrement, consultez Clé de chiffrement des données.
gcloud
Exécutez la commande gcloud
suivante pour afficher la configuration de 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 est compatible avec le chiffrement du stockage de journaux à l'aide de clés CMEK. Nous vous recommandons pour utiliser la procédure CMEK standard pour chiffrer les journaux avec des clés CMEK.
Pour chiffrer des journaux à l'aide de clés CMEK, suivez les instructions fournies dans Gérez les clés qui protègent les données de stockage de Logging.
Rediriger les journaux Cloud Composer vers un bucket Cloud Storage chiffré par CMEK
Si vous pensez que vos journaux contiennent des données sensibles, vous pouvez rediriger les journaux Cloud Composer vers une instance un bucket Cloud Storage à l'aide Routeur de journaux : Vous éviterez ainsi les journaux d'être envoyés à Monitoring.
Si vous avez besoin d'aide de Cloud Customer Care, vous devrez peut-être accorder à Google les ingénieurs de l'assistance aux journaux Cloud Composer stockés Cloud Storage.
gcloud
Créer 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é 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. Ce doit être identique à celui de votre environnement.KEY_RING_NAME
par le trousseau 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"
Pour ce faire, attribuez le rôle Créateur des objets Storage au compte de service. bucket. Le compte de service figure dans le résultat de la ).
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
avec le 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 Surveillance.
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
avec votre ID de l'organisation.KEY_PROJECT_ID
par l'ID du projet dans lequel 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 qui stocke votre clé gérée par le client ;KEY_LOCATION
par l'emplacement de votre clé gérée par le client. Ce doit être identique à celui de votre environnement.KEY_NAME
par le nom de votre clé gérée par le client.
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 d'alterner régulièrement 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 les versions précédentes sont ne sont pas automatiquement rechiffrées avec la nouvelle version de clé. Pour en savoir plus, consultez la section Rechiffrer des données.
Plus précisément, cela s'applique aux éléments suivants:
- Les objets stockés dans le bucket de l'environnement
- Cata stocké dans la base de données Airflow.
- Images de conteneurs stockées dans des dépôts Artifact Registry
- Tous les autres objets de données chiffrés avec une clé CMEK Cloud Composer.