Contrôle des accès avec IAM

Cloud Composer 1 | Cloud Composer 2

Cette page décrit les options de contrôle des accès disponibles dans Cloud Composer et explique comment attribuer des rôles.

Présentation

Pour plus d'informations sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également contrôler les autorisations de l'interface Web Airflow au-delà de l'activation ou de la désactivation de l'accès à celle-ci. Pour en savoir plus, consultez la page Contrôle des accès basé sur les rôles Airflow.

À propos d'Identity and Access Management dans Cloud Composer

L'API Cloud Composer utilise Identity and Access Management (IAM) pour effectuer le contrôle des accès.

Vous contrôlez l'accès à différentes fonctionnalités de Cloud Composer en attribuant des rôles et des autorisations à la fois pour les comptes de service IAM et pour les comptes utilisateur de votre projet Google Cloud.

Cloud Composer utilise deux types de comptes de service IAM :

À propos du compte d'agent de service Cloud Composer

Dans votre projet, le service Cloud Composer utilise un compte de service spécial géré par Google pour gérer les ressources liées à Cloud Composer. Ce compte est appelé Agent de service Cloud Composer.

L'agent de service Cloud Composer est utilisé pour tous les environnements de votre projet.

À propos des comptes de service pour les environnements Cloud Composer

Lorsque vous créez un environnement, vous spécifiez un compte de service. Le cluster de votre environnement utilise ce compte de service pour exécuter des pods avec différents composants d'environnement, tels que des nœuds de calcul et des programmeurs Airflow.

Par défaut, les environnements Cloud Composer s'exécutent avec le compte de service Compute Engine par défaut. Ce compte de service géré par Google dispose de plus d'autorisations que nécessaire pour exécuter des environnements Cloud Composer, généralement le rôle de base Éditeur.

Nous vous recommandons de configurer un compte de service géré par l'utilisateur pour les environnements Cloud Composer. Attribuez à ce compte un rôle spécifique à Cloud Composer. Spécifiez ensuite ce compte de service lors de la création d'environnements.

À propos des rôles pour les utilisateurs de Cloud Composer

Pour déclencher une opération d'environnement, un utilisateur doit disposer d'autorisations suffisantes. Par exemple, si vous souhaitez créer un environnement, vous devez disposer de l'autorisation composer.environments.create.

Pour Cloud Composer, les autorisations individuelles sont regroupées en rôles. Vous pouvez attribuer ces rôles aux comptes principaux.

Si votre compte de service dispose du rôle Éditeur de projet, vous pouvez exécuter toutes les opérations d'environnement. Toutefois, ce rôle dispose d'autorisations étendues. Pour les utilisateurs travaillant avec des environnements, nous vous recommandons d'utiliser des rôles spécifiques à Cloud Composer. De cette manière, vous pouvez réduire le champ d'application des autorisations et fournir différents niveaux d'accès à différents comptes principaux. Par exemple, un utilisateur peut disposer des autorisations nécessaires pour créer, mettre à jour, mettre à niveau et supprimer des environnements, tandis qu'un autre peut uniquement afficher les environnements et accéder à l'interface Web Airflow.

Attribuer des rôles au compte d'agent de service Cloud Composer

Lorsque vous activez l'API Cloud Composer dans votre projet, le compte Agent de service Composer est créé dans votre projet. Cloud Composer utilise ce compte pour effectuer des opérations dans votre projet Google Cloud.

Par défaut, le compte Agent de service Composer dispose du rôle Agent de service de l'API Cloud Composer.

Attribuer des rôles à un compte de service géré par l'utilisateur

Pour un compte de service géré par l'utilisateur qui exécute des environnements Cloud Composer, procédez comme suit :

  • Pour une configuration d'adresse IP publique, attribuez le rôle Composer Worker (composer.worker).
  • Pour une configuration d'adresse IP privée :
    1. Attribuez le rôle Composer Worker (composer.worker).
    2. Attribuez le rôle Utilisateur du compte de service (iam.serviceAccountUser).

Attribuer des rôles aux utilisateurs

Selon le niveau d'accès que vous souhaitez fournir pour les environnements Cloud Composer, accordez les autorisations suivantes aux comptes principaux.

Gérer les environnements et les buckets d'environnement

Pour qu'un utilisateur puisse afficher, créer, mettre à jour, mettre à niveau et supprimer des environnements, gérer des objets (tels que les fichiers DAG) dans les buckets d'environnement, accéder à l'interface Web Airflow, et afficher et déclencher des DAG à partir de l'interface utilisateur DAG:

  1. Attribuez le rôle Administrateur de l'environnement et des objets de l'espace de stockage (composer.environmentAndStorageObjectAdmin).
  2. Attribuez le rôle Utilisateur du compte de service (iam.serviceAccountUser).

Gérer les environnements

Pour qu'un utilisateur puisse afficher, créer, mettre à jour, mettre à niveau et supprimer des environnements, accéder à l'interface Web Airflow, et afficher et déclencher des DAG à partir de l'interface utilisateur DAG:

  1. Attribuez le rôle Administrateur Composer (composer.admin).
  2. Attribuez le rôle Utilisateur du compte de service (iam.serviceAccountUser).

Afficher les environnements et gérer les buckets d'environnement

Pour qu'un utilisateur puisse afficher des environnements, accéder à l'interface Web Airflow, afficher et déclencher des DAG à partir de l'interface utilisateurDAG, et gérer les objets dans les buckets d'environnement (par exemple, pour importer de nouveaux fichiers DAG):

  1. Attribuez le rôle Utilisateur de l'environnement et lecteur des objets de l'espace de stockage (composer.environmentAndStorageObjectViewer).
  2. Attribuez le rôle Administrateur des objets de l'espace de stockage (storage.objectAdmin).

Afficher les environnements et les buckets d'environnement

Pour qu'un utilisateur puisse consulter des environnements, accéder à l'interface Web Airflow, afficher et déclencher des DAG à partir de l'interface utilisateur de l'instance, et afficher les objets dans les buckets d'environnements, attribuez le rôle Utilisateur de l'environnement et lecteur des objets Storage (composer.environmentAndStorageObjectViewer).

Afficher les environnements

Pour qu'un utilisateur puisse afficher des environnements, afficher et déclencher des DAG à partir de l'interface utilisateurDAG et accéder à l'interface Web Airflow, attribuez-lui le rôle Utilisateur de Composer (composer.user).

Attribuer des autorisations pour utiliser gcloud avec des environnements

Pour utiliser gcloud avec des environnements Cloud Composer, vous devez disposer des autorisations suivantes :

  • composer.environments.get
  • container.clusters.get
  • container.clusters.list
  • container.clusters.getCredentials

Si vous souhaitez gérer des environnements ou des buckets d'environnement à l'aide de commandes gcloud composer, vous devez également disposer d'un rôle doté des autorisations suffisantes pour le faire.

Si vous souhaitez exécuter des commandes CLI Airflow, vous devez disposer des autorisations supplémentaires suivantes:

  • container.namespaces.list
  • container.pods.exec
  • container.pods.get
  • container.pods.list

Rôles

Role Permissions

Cloud Composer v2 API Service Agent Extension
(roles/composer.ServiceAgentV2Ext)

Cloud Composer v2 API Service Agent Extension is a supplementary role required to manage Composer v2 environments.

  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

Composer Administrator
(roles/composer.admin)

Provides full control of Cloud Composer resources.

Lowest-level resources where you can grant this role:

  • Project
  • composer.*
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list

Environment and Storage Object Administrator
(roles/composer.environmentAndStorageObjectAdmin)

Provides full control of Cloud Composer resources and of the objects in all project buckets.

Lowest-level resources where you can grant this role:

  • Project
  • composer.*
  • orgpolicy.policy.get
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list
  • storage.multipartUploads.*
  • storage.objects.*

Environment User and Storage Object Viewer
(roles/composer.environmentAndStorageObjectViewer)

Provides the permissions necessary to list and get Cloud Composer environments and operations. Provides read-only access to objects in all project buckets.

Lowest-level resources where you can grant this role:

  • Project
  • composer.dags.*
  • composer.environments.get
  • composer.environments.list
  • composer.imageversions.*
  • composer.operations.get
  • composer.operations.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list
  • storage.objects.get
  • storage.objects.list

Composer Shared VPC Agent
(roles/composer.sharedVpcAgent)

Role that should be assigned to Composer Agent service account in Shared VPC host project

  • compute.networks.access
  • compute.networks.addPeering
  • compute.networks.get
  • compute.networks.list
  • compute.networks.listPeeringRoutes
  • compute.networks.removePeering
  • compute.networks.updatePeering
  • compute.networks.use
  • compute.networks.useExternalIp
  • compute.projects.get
  • compute.regions.*
  • compute.subnetworks.get
  • compute.subnetworks.list
  • compute.subnetworks.use
  • compute.subnetworks.useExternalIp
  • compute.zones.*

Composer User
(roles/composer.user)

Provides the permissions necessary to list and get Cloud Composer environments and operations.

Lowest-level resources where you can grant this role:

  • Project
  • composer.dags.*
  • composer.environments.get
  • composer.environments.list
  • composer.imageversions.*
  • composer.operations.get
  • composer.operations.list
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list

Composer Worker
(roles/composer.worker)

Provides the permissions necessary to run a Cloud Composer environment VM. Intended for service accounts.

Lowest-level resources where you can grant this role:

  • Project
  • artifactregistry.*
  • cloudbuild.builds.create
  • cloudbuild.builds.get
  • cloudbuild.builds.list
  • cloudbuild.builds.update
  • cloudbuild.workerpools.use
  • composer.environments.get
  • container.*
  • containeranalysis.occurrences.create
  • containeranalysis.occurrences.delete
  • containeranalysis.occurrences.get
  • containeranalysis.occurrences.list
  • containeranalysis.occurrences.update
  • logging.logEntries.create
  • logging.logEntries.list
  • logging.privateLogEntries.*
  • logging.views.access
  • monitoring.metricDescriptors.create
  • monitoring.metricDescriptors.get
  • monitoring.metricDescriptors.list
  • monitoring.monitoredResourceDescriptors.*
  • monitoring.timeSeries.*
  • orgpolicy.policy.get
  • pubsub.schemas.attach
  • pubsub.schemas.create
  • pubsub.schemas.delete
  • pubsub.schemas.get
  • pubsub.schemas.list
  • pubsub.schemas.validate
  • pubsub.snapshots.create
  • pubsub.snapshots.delete
  • pubsub.snapshots.get
  • pubsub.snapshots.list
  • pubsub.snapshots.seek
  • pubsub.snapshots.update
  • pubsub.subscriptions.consume
  • pubsub.subscriptions.create
  • pubsub.subscriptions.delete
  • pubsub.subscriptions.get
  • pubsub.subscriptions.list
  • pubsub.subscriptions.update
  • pubsub.topics.attachSubscription
  • pubsub.topics.create
  • pubsub.topics.delete
  • pubsub.topics.detachSubscription
  • pubsub.topics.get
  • pubsub.topics.list
  • pubsub.topics.publish
  • pubsub.topics.update
  • pubsub.topics.updateTag
  • remotebuildexecution.blobs.get
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list
  • source.repos.get
  • source.repos.list
  • storage.buckets.create
  • storage.buckets.get
  • storage.buckets.list
  • storage.multipartUploads.*
  • storage.objects.*

Rôles pour les agents de service

roles/composer.serviceAgent Agent de service de l'API Cloud Composer

L'agent de service de l'API Cloud Composer peut gérer les environnements.

  • appengine.applications.get
  • appengine.applications.update
  • appengine.instances.*
  • appengine.operations.*
  • appengine.runtimes.*
  • appengine.services.*
  • appengine.versions.create
  • appengine.versions.delete
  • appengine.versions.get
  • appengine.versions.list
  • appengine.versions.update
  • artifactregistry.repositories.create
  • artifactregistry.repositories.delete
  • artifactregistry.repositories.get
  • artifactregistry.repositories.list
  • artifactregistry.repositories.update
  • cloudnotifications.*
  • cloudsql.*
  • compute.acceleratorTypes.*
  • compute.addresses.*
  • compute.autoscalers.*
  • compute.backendBuckets.*
  • compute.backendServices.*
  • compute.diskTypes.*
  • compute.disks.*
  • compute.externalVpnGateways.*
  • compute.firewallPolicies.get
  • compute.firewallPolicies.list
  • compute.firewallPolicies.use
  • compute.firewalls.get
  • compute.firewalls.list
  • compute.forwardingRules.*
  • compute.globalAddresses.*
  • compute.globalForwardingRules.*
  • compute.globalNetworkEndpointGroups.*
  • compute.globalOperations.get
  • compute.globalOperations.list
  • compute.globalPublicDelegatedPrefixes.delete
  • compute.globalPublicDelegatedPrefixes.get
  • compute.globalPublicDelegatedPrefixes.list
  • compute.globalPublicDelegatedPrefixes.update
  • compute.globalPublicDelegatedPrefixes.updatePolicy
  • compute.healthChecks.*
  • compute.httpHealthChecks.*
  • compute.httpsHealthChecks.*
  • compute.images.*
  • compute.instanceGroupManagers.*
  • compute.instanceGroups.*
  • compute.instanceTemplates.*
  • compute.instances.*
  • compute.interconnectAttachments.*
  • compute.interconnectLocations.*
  • compute.interconnects.*
  • compute.licenseCodes.*
  • compute.licenses.*
  • compute.machineImages.*
  • compute.machineTypes.*
  • compute.networkEndpointGroups.*
  • compute.networks.*
  • compute.packetMirrorings.get
  • compute.packetMirrorings.list
  • compute.projects.get
  • compute.projects.setCommonInstanceMetadata
  • compute.publicDelegatedPrefixes.delete
  • compute.publicDelegatedPrefixes.get
  • compute.publicDelegatedPrefixes.list
  • compute.publicDelegatedPrefixes.update
  • compute.publicDelegatedPrefixes.updatePolicy
  • compute.regionBackendServices.*
  • compute.regionFirewallPolicies.get
  • compute.regionFirewallPolicies.list
  • compute.regionFirewallPolicies.use
  • compute.regionHealthCheckServices.*
  • compute.regionHealthChecks.*
  • compute.regionNetworkEndpointGroups.*
  • compute.regionNotificationEndpoints.*
  • compute.regionOperations.get
  • compute.regionOperations.list
  • compute.regionSslCertificates.get
  • compute.regionSslCertificates.list
  • compute.regionTargetHttpProxies.*
  • compute.regionTargetHttpsProxies.*
  • compute.regionUrlMaps.*
  • compute.regions.*
  • compute.reservations.get
  • compute.reservations.list
  • compute.resourcePolicies.*
  • compute.routers.*
  • compute.routes.*
  • compute.securityPolicies.get
  • compute.securityPolicies.list
  • compute.securityPolicies.use
  • compute.serviceAttachments.*
  • compute.snapshots.*
  • compute.sslCertificates.get
  • compute.sslCertificates.list
  • compute.sslPolicies.*
  • compute.subnetworks.*
  • compute.targetGrpcProxies.*
  • compute.targetHttpProxies.*
  • compute.targetHttpsProxies.*
  • compute.targetInstances.*
  • compute.targetPools.*
  • compute.targetSslProxies.*
  • compute.targetTcpProxies.*
  • compute.targetVpnGateways.*
  • compute.urlMaps.*
  • compute.vpnGateways.*
  • compute.vpnTunnels.*
  • compute.zoneOperations.get
  • compute.zoneOperations.list
  • compute.zones.*
  • container.*
  • deploymentmanager.compositeTypes.*
  • deploymentmanager.deployments.cancelPreview
  • deploymentmanager.deployments.create
  • deploymentmanager.deployments.delete
  • deploymentmanager.deployments.get
  • deploymentmanager.deployments.list
  • deploymentmanager.deployments.stop
  • deploymentmanager.deployments.update
  • deploymentmanager.manifests.*
  • deploymentmanager.operations.*
  • deploymentmanager.resources.*
  • deploymentmanager.typeProviders.*
  • deploymentmanager.types.*
  • firebase.projects.get
  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • logging.buckets.create
  • logging.buckets.delete
  • logging.buckets.get
  • logging.buckets.list
  • logging.buckets.undelete
  • logging.buckets.update
  • logging.cmekSettings.*
  • logging.exclusions.*
  • logging.locations.*
  • logging.logEntries.create
  • logging.logMetrics.*
  • logging.logServiceIndexes.*
  • logging.logServices.*
  • logging.logs.list
  • logging.notificationRules.*
  • logging.operations.*
  • logging.sinks.*
  • logging.views.create
  • logging.views.delete
  • logging.views.get
  • logging.views.list
  • logging.views.update
  • monitoring.alertPolicies.get
  • monitoring.alertPolicies.list
  • monitoring.dashboards.get
  • monitoring.dashboards.list
  • monitoring.groups.get
  • monitoring.groups.list
  • monitoring.metricDescriptors.create
  • monitoring.metricDescriptors.get
  • monitoring.metricDescriptors.list
  • monitoring.monitoredResourceDescriptors.*
  • monitoring.notificationChannelDescriptors.*
  • monitoring.notificationChannels.get
  • monitoring.notificationChannels.list
  • monitoring.publicWidgets.get
  • monitoring.publicWidgets.list
  • monitoring.services.get
  • monitoring.services.list
  • monitoring.slos.get
  • monitoring.slos.list
  • monitoring.timeSeries.*
  • monitoring.uptimeCheckConfigs.get
  • monitoring.uptimeCheckConfigs.list
  • networkconnectivity.locations.*
  • networkconnectivity.operations.*
  • networksecurity.*
  • networkservices.*
  • opsconfigmonitoring.resourceMetadata.list
  • orgpolicy.policy.get
  • pubsub.*
  • recommender.cloudsqlIdleInstanceRecommendations.*
  • recommender.cloudsqlInstanceActivityInsights.*
  • recommender.cloudsqlInstanceCpuUsageInsights.*
  • recommender.cloudsqlInstanceDiskUsageTrendInsights.*
  • recommender.cloudsqlInstanceMemoryUsageInsights.*
  • recommender.cloudsqlInstanceOutOfDiskRecommendations.*
  • recommender.cloudsqlOverprovisionedInstanceRecommendations.*
  • resourcemanager.projects.get
  • resourcemanager.projects.list
  • servicedirectory.namespaces.create
  • servicedirectory.namespaces.delete
  • servicedirectory.services.create
  • servicedirectory.services.delete
  • servicenetworking.operations.get
  • servicenetworking.services.addPeering
  • servicenetworking.services.get
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list
  • stackdriver.projects.get
  • storage.buckets.*
  • storage.multipartUploads.*
  • storage.objects.*
  • trafficdirector.*

Rôles de base

Rôle Titre Description Autorisations Ressource la plus basse
roles/owner Propriétaire Rôle de base permettant un contrôle complet sur les ressources Cloud Composer. composer.environments.create
composer.environments.delete
composer.environments.get
composer.environments.list
composer.environments.update
composer.imagesversions.list
composer.Operations.delete
composer.Operations.get
composer.Operations.list
compose.dags.list
compose.dags.get.
Projet
roles/editor Éditeur Rôle de base permettant un contrôle complet sur les ressources Cloud Composer. composer.environments.create
composer.environments.delete
composer.environments.get
composer.environments.list
composer.environments.update
composer.imagesversions.list
composer.Operations.delete
composer.Operations.get
composer.Operations.list
compose.dags.list
compose.dags.get.
Projet
roles/viewer Lecteur Rôle de base permettant à un utilisateur de répertorier et d'obtenir des ressources Cloud Composer. composer.environments.get
composer.environments.list
composer.imageversions.list
composer.Operations.get
composer.Operations.list
composer.dags.list
composer.dags.get
Projet

Autorisations pour les méthodes d'API

Le tableau suivant répertorie les autorisations dont l'appelant doit disposer pour appeler chaque méthode d'API dans l'API Cloud Composer ou pour effectuer des tâches à l'aide des outils Google Cloud qui utilisent l'API (tels que Google Cloud Console ou la CLI Google Cloud).

Méthode Autorisation
environments.create composer.environments.create et iam.serviceAccounts.actAs sur le compte de service de l'environnement.
environments.delete composer.environments.delete
environments.get composer.environments.get
environments.list composer.environments.list
environments.update composer.environments.update
operations.delete composer.operations.delete
operations.get composer.operations.get
operations.list composer.operations.list

Autorisations permettant d'utiliser les DAG à partir de Google Cloud Console

Les autorisations suivantes couvrent l'utilisation des DAG à partir de Google Cloud Console, via l'interface utilisateur DAG :

Permission Description
composer.dags.list Sur cette page, vous pouvez consulter la liste des DAG.
composer.dags.get Consultez des informations détaillées sur les DAG, les exécutions de DAG et les tâches sur la page des détails du DAG.
composer.dags.execute Déclenchez des DAG à partir de la page des détails du DAG.

Vous pouvez utiliser des autorisations Airflow RBAC pour contrôler davantage les autorisations des comptes utilisateur. L'UI du DAG nécessite des autorisations IAM et Airflow RBAC pour autoriser une action spécifique. Parallèlement, l'interface utilisateur d'Airflow ne valide l'accès utilisateur que pour les autorisations Airflow RBAC, en ignorant les autorisations IAM.

Par exemple, si un utilisateur dispose de l'autorisation composer.dags.executeet du rôle Viewer Airflow RBAC, cet utilisateur ne peut pas déclencher de DAG à partir de Google Cloud Console. À titre d'exemple, si un utilisateur ne dispose pas de l'autorisation composer.dags.list, il peut toujours afficher la liste des DAG dans l'interface utilisateur Airflow.

Utiliser un compte de service d'un autre projet

Si vous souhaitez qu'un environnement Cloud Composer d'un projet utilise un compte de service géré par l'utilisateur d'un autre projet, vous devez configurer ce compte pour travailler sur plusieurs projets.

Remplacez SERVICE_PROJECT_NUMBER par le numéro d'un projet où se trouve Cloud Composer.

  1. Modifiez la règle d'autorisation du projet dans lequel se trouve votre compte de service géré par l'utilisateur:

    1. Attribuez le rôle Créateur de jetons du compte de service au compte de service Compute Engine par défaut du projet dans lequel se trouve votre environnement (SERVICE_PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    2. Attribuez le rôle Créateur de jetons du compte de service à l'agent de service Cloud Composer du projet où se trouve votre environnement (service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com).

  2. Modifiez la règle d'autorisation du projet où se trouve votre environnement. Attribuez les rôles requis à votre compte de service géré par l'utilisateur, comme décrit dans la section Attribuer des rôles à un compte de service géré par l'utilisateur. Par exemple, dans une configuration d'adresse IP publique, votre compte de service géré par l'utilisateur nécessite le rôle Composer Worker.

Étapes suivantes