Sécurité et autorisations pour Cloud Dataflow

Les pipelines Cloud Dataflow peuvent être exécutés en local (pour effectuer des tests sur de petits ensembles de données) ou sur des ressources Google Cloud Platform (GCP) gérées, à l'aide du service géré Cloud Dataflow. Que le pipeline et ses nœuds de calcul soient exécutés localement ou dans le cloud, ils utilisent un système d'autorisations pour assurer la sécurité d'accès aux fichiers et aux ressources du pipeline. Les autorisations Cloud Dataflow sont attribuées en fonction du rôle utilisé pour accéder aux ressources du pipeline. Les sections ci-dessous expliquent les rôles et les autorisations associés aux pipelines locaux et cloud, ainsi que les paramètres par défaut. Elles indiquent également comment vérifier les autorisations de votre projet.

Avant de commencer

Pour en savoir plus sur les identifiants de projet Google Cloud Platform, consultez la vue d'ensemble de la plate-forme. Ces identifiants incluent le nom, l'ID et le numéro du projet.

Sécurité et autorisations pour les pipelines locaux

Compte Google Cloud Platform

En local, le pipeline Apache Beam est exécuté avec le compte GCP que vous avez configuré à l'aide de l'exécutable de l'outil de ligne de commande gcloud. Par conséquent, les opérations du SDK Apache Beam exécutées localement ont accès aux mêmes fichiers et ressources que ce compte GCP.

Pour répertorier le compte GCP que vous avez sélectionné comme compte par défaut, exécutez la commande gcloud config list.

Remarque : Les pipelines locaux peuvent générer des données vers des destinations locales, par exemple des fichiers locaux, ou vers des destinations dans le cloud, comme Cloud Storage ou BigQuery. Si le pipeline exécuté localement écrit des fichiers sur des ressources cloud telles que Cloud Storage, il utilise vos identifiants de compte GCP et le projet GCP que vous avez configuré comme valeur par défaut dans l'outil de ligne de commande gcloud. Pour obtenir des instructions concernant l'authentification avec les identifiants de compte GCP, consultez le guide de démarrage rapide correspondant au langage que vous utilisez.

Sécurité et autorisations pour les pipelines sur Google Cloud Platform

Lorsque vous exécutez un pipeline, Cloud Dataflow gère la sécurité et les autorisations à l'aide de deux comptes de service : le sien et celui du contrôleur. Le service Cloud Dataflow utilise son compte de service dans le cadre d'une demande de création de tâche (par exemple, pour vérifier le quota des projets et créer des instances de nœud de calcul en votre nom) et pendant l'exécution de la tâche, afin de gérer cette dernière. Les instances de nœud de calcul utilisent le compte de service du contrôleur pour accéder aux ressources d'entrée et de sortie une fois que vous avez envoyé la tâche.

Remarque : Depuis le 4 octobre 2017, Cloud Dataflow utilise le compte de service du contrôleur pour les opérations de métadonnées à la place du compte cloudservices.

Compte de service Cloud Dataflow

Dans le cadre de l'exécution du pipeline de Cloud Dataflow, le service Cloud Dataflow manipule les ressources en votre nom (par exemple, en créant des VM supplémentaires). Lorsque vous exécutez votre pipeline sur le service Cloud Dataflow, il utilise un compte de service (service-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com). Ce compte est créé automatiquement lors de la création d'un projet Cloud Dataflow. Il se voit attribuer le rôle Agent de service Cloud Dataflow sur le projet, et il dispose des autorisations nécessaires pour exécuter une tâche Cloud Dataflow dans le projet, comme démarrer des nœuds de calcul Compute Engine. Le compte est utilisé exclusivement par le service Cloud Dataflow, et il est propre à votre projet.

Vous pouvez vérifier les autorisations des comptes de service Cloud Dataflow à l'aide de l'outil de ligne de commande gcloud en saisissant la commande suivante dans votre interface système ou votre terminal :

gcloud iam roles describe roles/dataflow.serviceAgent

Comme les services GCP attendent un accès en lecture/écriture au projet et à ses ressources, nous vous recommandons de ne pas modifier les autorisations par défaut qui sont établies automatiquement pour votre projet. Si vous supprimez les autorisations pour le compte de service de la stratégie IAM, les comptes demeureront présents, car ils appartiennent au service Cloud Dataflow. Si un compte de service Cloud Dataflow perd ses autorisations pour un projet, Cloud Dataflow ne pourra pas lancer de VM ni effectuer d'autres tâches de gestion.

Bonne pratique : créez un bucket appartenant à votre projet, qui servira de bucket de préparation pour Cloud Dataflow. Cette opération garantit que les autorisations sont automatiquement définies de manière correcte pour la préparation des fichiers exécutables du pipeline.

Compte de service du contrôleur

Les instances Compute Engine exécutent les opérations du SDK Apache Beam dans le cloud. Ces nœuds de calcul accèdent aux fichiers du pipeline et à d'autres ressources à l'aide du compte de service du contrôleur de votre projet. Cloud Dataflow utilise également le compte de service du contrôleur pour effectuer des opérations de "métadonnées", qui ne sont pas exécutées sur votre client local ou sur les nœuds de calcul Compute Engine. Ces opérations effectuent différentes tâches, comme déterminer la taille des entrées et accéder aux fichiers Cloud Storage.

Compte de service du contrôleur par défaut

Par défaut, les nœuds de calcul utilisent le compte de service Compute Engine de votre projet comme compte de service du contrôleur. Ce compte de service (<project-number>-compute@developer.gserviceaccount.com) est créé automatiquement lorsque vous activez l'API Compute Engine pour votre projet à partir de la page des API de la console Google Cloud Platform.

En outre, le compte de service Compute Engine associé à un projet dispose par défaut d'un accès aux buckets et aux ressources Cloud Storage appartenant au projet. Comme la plupart des nœuds de calcul Compute Engine attendent un accès en lecture/écriture aux ressources du projet, nous vous recommandons de ne pas modifier les autorisations par défaut qui sont établies automatiquement pour votre projet.

Vous pouvez obtenir la liste des comptes de service de votre projet à partir de la page Autorisations de la console GCP.

Spécifier un compte de service du contrôleur géré par l'utilisateur

Si vous souhaitez disposer d'un accès et d'un contrôle précis lorsque vous créez et utilisez des ressources, vous pouvez employer un compte de service du projet de votre tâche comme compte de service du contrôleur géré par l'utilisateur.

Si vous ne disposez pas d'un compte de service géré par l'utilisateur, vous devez créer un compte de service faisant partie du même projet que votre tâche, et définir les rôles IAM requis pour ce compte. Le compte de service doit être au minimum doté du rôle Nœud de calcul Dataflow. Il peut également avoir besoin de rôles supplémentaires pour utiliser les ressources Cloud Platform tel que requis par votre tâche (comme BigQuery, Cloud Pub/Sub ou l'écriture dans Cloud Storage). Par exemple, si la tâche lit les données à partir de BigQuery, votre compte de service doit également être doté du rôle bigquery.dataViewer.

Java

Utilisez l'option --serviceAccount et spécifiez votre compte de service lorsque vous exécutez la tâche de pipeline : --serviceAccount=my-service-account-name@<project-id>.iam.gserviceaccount.com

Python

Utilisez l'option --service_account_email et spécifiez votre compte de service lorsque vous exécutez la tâche de pipeline : --service_account_email=my-service-account-name@<project-id>.iam.gserviceaccount.com

Accéder aux ressources Google Cloud Platform dans plusieurs projets Google Cloud Platform

Vos pipelines Apache Beam peuvent accéder aux ressources GCP dans d'autres projets GCP, y compris :

Java

  • Buckets Cloud Storage
  • Ensembles de données BigQuery
  • Sujets et abonnements Cloud Pub/Sub
  • Ensembles de données Cloud Datastore

Python

  • Buckets Cloud Storage
  • Ensembles de données BigQuery
  • Ensembles de données Cloud Datastore

Pour vous assurer que le pipeline Apache Beam peut accéder à ces ressources d'un projet à l'autre, vous devez utiliser les mécanismes de contrôle d'accès respectifs des ressources, afin d'accorder explicitement l'accès au compte de service du contrôleur du projet Cloud Dataflow.

Accéder aux buckets Cloud Storage dans les projets Google Cloud Platform

Pour permettre à votre projet Cloud Dataflow d'accéder à un bucket Cloud Storage appartenant à un autre projet GCP, vous devez le rendre accessible au compte de service du contrôleur de votre projet Cloud Dataflow. Vous pouvez accorder l'accès requis à l'aide des contrôles d'accès Cloud Storage.

Remarque : Si vous n'utilisez pas les comptes de service par défaut, assurez-vous que les autorisations sont cohérentes avec vos paramètres IAM.

Pour obtenir la liste des comptes de service de votre projet Cloud Dataflow, consultez la page IAM et administration de la console GCP. Une fois que vous disposez des noms des comptes, vous pouvez exécuter les commandes gsutil pour accorder la propriété des comptes de service du projet (autorisation en lecture/écriture) à la fois au bucket et à ses contenus.

Pour permettre aux comptes de service de votre projet Cloud Dataflow d'accéder à un bucket Cloud Storage dans un autre projet, utilisez la commande suivante dans la fenêtre d'interface système ou de terminal : gsutil acl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Pour permettre aux comptes de service de votre projet Cloud Dataflow d'accéder aux contenus existants d'un bucket Cloud Storage dans un autre projet, utilisez la commande suivante dans la fenêtre d'interface système ou de terminal : gsutil -m acl ch -r -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Remarque : L'option -m exécute la commande en parallèle afin d'accélérer le traitement. L'option -r exécute la commande de manière récursive sur les ressources du bucket.

Sachez que la commande mentionnée précédemment accorde l'accès uniquement aux ressources existantes. Si vous accordez aux comptes de service du projet Cloud Dataflow l'autorisation par défaut pour le bucket, ils pourront accéder aux futures ressources ajoutées à ce dernier : gsutil defacl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Accéder aux ensembles de données BigQuery dans les projets Google Cloud Platform

Vous pouvez utiliser l'API BigQueryIO pour accéder aux ensembles de données BigQuery appartenant à un autre projet GCP (c'est-à-dire, différent de celui avec lequel vous utilisez Cloud Dataflow). Pour que la source et le récepteur BigQuery fonctionnent correctement, les deux comptes suivants doivent avoir accès à tous les ensembles de données BigQuery sur lesquels votre tâche Cloud Dataflow effectue des opérations de lecture ou d'écriture :

Vous devrez peut-être configurer BigQuery pour accorder l'accès de manière explicite à ces comptes. Pour en savoir plus sur l'octroi de l'accès aux ensembles de données BigQuery à l'aide de l'interface utilisateur Web BigQuery ou de l'API BigQuery, consultez la page Contrôle d'accès BigQuery.

Par exemple, si votre compte GCP est abcde@gmail.com et que le numéro du projet sur lequel vous exécutez la tâche Cloud Dataflow est 123456789, les comptes suivants doivent tous avoir accès aux ensembles de données BigQuery utilisés : abcde@gmail.com et 123456789-compute@developer.gserviceaccount.com.

Accéder aux sujets et abonnements Cloud Pub/Sub dans les projets Google Cloud Platform

Pour accéder à un sujet ou à un abonnement Cloud Pub/Sub appartenant à un autre projet GCP (c'est-à-dire, différent de celui avec lequel vous utilisez Cloud  Dataflow), vous devez configurer des autorisations inter-projets à l'aide des fonctionnalités de gestion de l'authentification et des accès Cloud Pub/Sub. Cloud Dataflow utilise le compte de service du contrôleur pour exécuter les tâches, et vous devez accorder à ce compte de service l'accès aux ressources Cloud Pub/Sub dans l'autre projet.

Pour en savoir plus et obtenir des exemples de code illustrant l'utilisation des fonctionnalités de gestion de l'authentification et des accès Cloud Pub/Sub, consultez la page Exemple de cas d'utilisation : communication entre plusieurs projets.

Accéder à Cloud Datastore dans les projets Google Cloud Platform

Pour accéder à une instance Cloud Datastore appartenant à un autre projet GCP, vous devez ajouter le compte de service Compute Engine (<project-number>-compute@developer.gserviceaccount.com) de votre projet Cloud Dataflow en tant que collaborateur du projet propriétaire de l'instance Cloud Datastore. Vous devez également activer l'API Cloud Datastore dans les deux projets à l'adresse suivante : https://console.cloud.google.com/project/<project-id>/apiui/apiview/datastore/overview.

Accès aux données et sécurité

Le service Cloud Dataflow met en œuvre plusieurs mécanismes de sécurité pour garantir la sécurité et la confidentialité des données. Ces mécanismes s'appliquent aux scénarios suivants :

  • Vous envoyez un pipeline au service.
  • Le service évalue votre pipeline.
  • Vous demandez l'accès à la télémétrie et aux métriques pendant et après l'exécution du pipeline.

Envoi des pipelines

Les autorisations de votre projet Google Cloud contrôlent l'accès au service Cloud Dataflow. Tous les membres du projet disposant de droits de modification ou de propriété peuvent envoyer des pipelines au service. Pour envoyer des pipelines, vous devez vous authentifier à l'aide de l'outil de ligne de commande gcloud. Une fois que vous êtes authentifié, les pipelines sont envoyés à l'aide du protocole HTTPS. Pour obtenir des instructions concernant l'authentification avec les identifiants de compte GCP, consultez le guide de démarrage rapide correspondant au langage que vous utilisez.

Évaluation des pipelines

Données temporaires

Dans le cadre de l'évaluation d'un pipeline, des données temporaires peuvent être générées et stockées localement dans les nœuds de calcul ou dans Cloud Storage. Les données temporaires sont chiffrées au repos, et elles ne sont pas persistantes à la fin de l'évaluation d'un pipeline.

Java

Par défaut, les machines virtuelles Compute Engine sont supprimées à la fin de la tâche Cloud Dataflow, qu'elle ait réussi ou non. Cela signifie que le disque persistant associé, ainsi que toutes les données intermédiaires qui pourraient y être stockées, sont supprimés. Les données intermédiaires stockées dans Cloud Storage sont disponibles dans des sous-emplacements du chemin Cloud Storage que vous indiquez en tant que --stagingLocation et/ou --tempLocation. Si vous écrivez une sortie dans un fichier Cloud Storage, des fichiers temporaires peuvent être créés dans l'emplacement de sortie avant que l'opération d'écriture ne soit finalisée.

Python

Par défaut, les machines virtuelles Compute Engine sont supprimées à la fin de la tâche Cloud Dataflow, qu'elle ait réussi ou non. Cela signifie que le disque persistant associé, ainsi que toutes les données intermédiaires qui pourraient y être stockées, sont supprimés. Les données intermédiaires stockées dans Cloud Storage sont disponibles dans des sous-emplacements du chemin Cloud Storage que vous indiquez en tant que --staging_location et/ou --temp_location. Si vous écrivez une sortie dans un fichier Cloud Storage, des fichiers temporaires peuvent être créés dans l'emplacement de sortie avant que l'opération d'écriture ne soit finalisée.

Données enregistrées

Les informations stockées dans Cloud Logging sont principalement générées par le code de votre programme Cloud Dataflow. Le service Cloud Dataflow peut également générer des données d'avertissement et d'erreur dans Cloud Logging, mais il s'agit des seules données intermédiaires que le service ajoute aux journaux.

Données en cours de transfert

Il existe deux modes de transmission des données lors de l'évaluation en pipeline :

  • Lors de la lecture ou de l'écriture à partir de sources et de récepteurs
  • Entre les instances de nœud de calcul pendant le traitement des données dans le pipeline lui-même

Toutes les communications avec les sources et les récepteurs GCP sont chiffrées et transmises via HTTPS. Toutes les communications entre les nœuds de calcul se produisent sur un réseau privé, et sont soumises aux autorisations et aux règles de pare-feu de votre projet.

Localisation des données

La logique d'un pipeline est évaluée sur des instances individuelles de Compute Engine. Vous pouvez spécifier la zone dans laquelle se trouvent ces instances et le réseau privé sur lequel elles communiquent. Les calculs auxiliaires effectués dans l'infrastructure de Google reposent sur des métadonnées (telles que les tailles de fichier ou les emplacements Cloud Storage). Vos données ne quittent jamais cette zone ni ne dépassent vos limites de sécurité.

Télémétrie et métriques

Les données de télémétrie et les métriques associées sont chiffrées au repos, et l'accès à ces données est contrôlé par les autorisations de lecture de votre projet GCP.

Nous vous recommandons d'utiliser les mécanismes de sécurité disponibles dans les ressources cloud sous-jacentes de votre pipeline. Ces mécanismes incluent les fonctionnalités de sécurité des données de sources et de récepteurs de données tels que BigQuery et Cloud Storage. Il est également préférable de ne pas mélanger différents niveaux de confiance dans un même projet.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.