Control de acceso con IAM

Cloud Composer 1 | Cloud Composer 2

En esta página, se describen las opciones de control de acceso disponibles en Cloud Composer y se explica cómo asignar funciones.

Descripción general

Para obtener información sobre cómo otorgar funciones, consulta Administración del acceso a proyectos, carpetas y organizaciones.

También puedes controlar los permisos para la interfaz web de Airflow, además de habilitar o inhabilitar el acceso a ella. Para obtener más información, consulta Control de acceso basado en funciones.

Acerca de Identity and Access Management en Cloud Composer

de Cloud Composer usa Identity and Access Management (IAM) para el control de acceso.

Para controlar el acceso a diferentes funciones de Cloud Composer, asigna funciones y permisos para las cuentas de servicio de IAM y las cuentas de usuario en el proyecto de Google Cloud.

Cloud Composer usa dos tipos de cuentas de servicio de IAM:

Acerca de la cuenta del agente de servicio de Cloud Composer

En tu proyecto, el servicio de Cloud Composer usa una cuenta de servicio especial administrada por Google para administrar los recursos relacionados con Cloud Composer. Esta cuenta se llama agente de servicio de Cloud Composer.

El agente de servicio de Cloud Composer se usa para todos los entornos de tu proyecto.

Acerca de las cuentas de servicio para los entornos de Cloud Composer

Cuando creas un entorno, especificas una cuenta de servicio. El clúster de tu entorno usa esta cuenta de servicio para ejecutar pods con diferentes componentes de entorno, como trabajadores y programadores de Airflow.

De forma predeterminada, los entornos de Cloud Composer se ejecutan mediante la cuenta de servicio predeterminada de Compute Engine. Esta cuenta de servicio administrada por Google tiene más permisos que los necesarios para ejecutar entornos de Cloud Composer; por lo general, la función básica de Editor.

Te recomendamos que configures una cuenta de servicio administrada por el usuario para los entornos de Cloud Composer. Asigna a esta cuenta una función específica para Cloud Composer. Luego, especifica esta cuenta de servicio cuando crees entornos nuevos.

Acerca de las funciones para los usuarios de Cloud Composer

Para activar una operación de entorno, un usuario debe tener los permisos necesarios. Por ejemplo, si deseas crear un entorno nuevo, debes tener el permiso composer.environments.create.

Para Cloud Composer, los permisos individuales se agrupan en funciones. Puedes asignar estas funciones a las principales.

Si tu cuenta de servicio tiene la función Editor del proyecto, puedes ejecutar todas las operaciones del entorno. Sin embargo, esta función tiene permisos amplios. Para los usuarios que trabajan con entornos, recomendamos usar funciones que son específicas de Cloud Composer. De esta manera, puedes reducir el alcance de los permisos y proporcionar diferentes niveles de acceso a diferentes cuentas principales. Por ejemplo, un usuario puede tener permisos para crear, actualizar, borrar y mejorar entornos, mientras que otro usuario solo puede ver los entornos y acceder a la interfaz web de Airflow.

Asigna funciones a la cuenta de agente de servicio de Cloud Composer

Cuando habilitas la API de Cloud Composer en tu proyecto, se crea la cuenta del agente de servicio de Composer en tu proyecto. Cloud Composer usa esta cuenta para realizar operaciones en tu proyecto de Google Cloud.

De forma predeterminada, la cuenta de agente de servicio de Compose tiene la función agente de servicio de la API de Cloud Composer.

Cloud Composer 2 usa GKE Autopilot, que requiere Workload Identity. Para admitir Workload Identity, la cuenta de servicio de tu entorno debe tener vinculaciones con la cuenta de servicio de Kubernetes que ejecuta el clúster del entorno. Estas vinculaciones son necesarias para que los pods de tu clúster de entorno puedan acceder a los recursos de tu proyecto de Google Cloud. Por ejemplo, para leer archivos de definición del DAG desde el bucket de entorno.

Para crear vinculaciones entre la cuenta de servicio de tu entorno y la cuenta de servicio de Kubernetes del clúster de tu entorno, la cuenta del agente de servicio de Composer debe tener suficientes permisos para hacerlo. Esto requiere los permisos iam.serviceAccounts.getIamPolicy y iam.serviceAccounts.setIamPolicy, que proporciona la función Extensión del agente de servicios de la API de Cloud Composer v2. Esta función no se otorga de forma automática. Debes otorgarla de forma manual una vez por proyecto.

Para obtener instrucciones sobre cómo agregar esta función, consulta Crea entornos.

Asigna funciones a una cuenta de servicio administrada por el usuario

Para una cuenta de servicio administrada por el usuario que ejecuta entornos de Cloud Composer:

  • Para una configuración de IP pública, asigna la función Composer Worker (composer.worker).
  • Para una configuración de IP privada, sigue estos pasos:
    1. Asigna la función Trabajador de Composer (composer.worker).
    2. Asigna la función Usuario de cuenta de servicio (iam.serviceAccountUser).

asignar funciones a los usuarios;

Según el nivel de acceso que desees proporcionar a los entornos de Cloud Composer, otorga los siguientes permisos a las cuentas principales.

Administra entornos y depósitos de entornos

En el caso de un usuario que puede ver, crear, actualizar, actualizar y borrar entornos, administra objetos (como archivos DAG) en los buckets de entornos, accede a la interfaz web de Airflow, visualiza y activa DAG desde la IU de DAG:

  1. Asigna la función Administrador de objetos de almacenamiento y entorno (composer.environmentAndStorageObjectAdmin).
  2. Asigna la función Usuario de cuenta de servicio (iam.serviceAccountUser).

Administra entornos

Para un usuario que puede ver, crear, actualizar, actualizar y borrar entornos, accede a la interfaz web de Airflow, visualiza y activa los DAG desde la IU de DAG:

  1. Asigna la función Administrador de Composer (composer.admin).
  2. Asigna la función Usuario de cuenta de servicio (iam.serviceAccountUser).

Visualiza entornos y administra depósitos de entornos

En el caso de un usuario que puede ver entornos, accede a la interfaz web de Airflow, consulta y activa los DAG desde la IU de DAG y administra los objetos en los buckets de entorno (por ejemplo, para subir archivos de DAG nuevos):

  1. Asigna la función Usuario de entorno y Visualizador de objetos de almacenamiento (composer.environmentAndStorageObjectViewer).
  2. Asigna la función Administrador de objetos de almacenamiento (storage.objectAdmin).

Visualización de los entornos y los depósitos del entorno

Para un usuario que puede ver entornos, acceder a la interfaz web de Airflow, ver y activar DAG desde la IU de DAG y ver objetos en buckets de entorno, asigna la función Usuario de entorno y visualizador de objetos de almacenamiento (composer.environmentAndStorageObjectViewer).

Visualización de entornos

Para un usuario que puede ver entornos, ver y activar DAG desde la IU de DAG y acceder a la interfaz web de Airflow, asigna la función de usuario de Compose (composer.user).

Asigna permisos para usar gcloud con entornos

Para usar gcloud con entornos de Cloud Composer, necesitas los siguientes permisos:

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

Si deseas administrar entornos o depósitos de entornos con comandos gcloud composer, también debes tener una función que tenga suficientes permisos para hacerlo.

Si desea ejecutar comandos de la CLI de Airflow, necesita los siguientes permisos adicionales:

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

Roles

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.*

Funciones para los agentes de servicio

roles/composer.serviceAgent Agente de servicios de la API de Cloud Composer

El agente de servicios de la API de Cloud Composer puede administrar entornos.

  • 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.*

Funciones básicas

Rol Título Descripción Permisos Recurso más bajo
roles/owner Propietario Función básica que permite el control total de los recursos de Cloud Composer. composer.entornos.create
composer.entornos.delete
composer.entornos.get
composer.entornos.list
composer.entornos.update
composer.imageversions.list
composer.operations.delete
composer.operations.get
composer.operations.list
composer.dags.list
composer.dags.get
.composer.dags.get.
Proyecto
roles/editor Editor Función básica que permite el control total de los recursos de Cloud Composer. composer.entornos.create
composer.entornos.delete
composer.entornos.get
composer.entornos.list
composer.entornos.update
composer.imageversions.list
composer.operations.delete
composer.operations.get
composer.operations.list
composer.dags.list
composer.dags.get
.composer.dags.get.
Proyecto
roles/viewer Lector Función básica que permite al usuario enumerar y obtener recursos de Cloud Composer. composer.entornos.get
composer.entornos.list
composer.imageversions.list
composer.operations.get
composer.operations.list
composer.dags.list
composer.dags.get
Proyecto

Permisos para métodos de API

En la siguiente tabla, se enumeran los permisos que debe tener el emisor para llamar a cada método de API en la API de Cloud Composer o realizar tareas con las herramientas de Google Cloud que usan la API (como Google Cloud Console o Google Cloud CLI).

Método Permiso
environments.create composer.environments.create y iam.serviceAccounts.actAs en la cuenta de servicio del entorno.
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

Permisos para trabajar con DAG desde Google Cloud Console

Los siguientes permisos abarcan cómo trabajar con DAG de Google Cloud Console a través de la IU de DAG:

Permiso Descripción
composer.dags.list Consulta la lista de DAG en la página Detalles del entorno.
composer.dags.get Obtén información detallada sobre los DAG, las ejecuciones de DAG y las tareas en la página de detalles del DAG.
composer.dags.execute Activa los DAG desde la página de detalles del DAG.

Puedes usar los permisos de RBAC de Airflow para controlar mejor los permisos de las cuentas de usuario. La IU de DAG requiere permisos de IAM y RBAC de Airflow para permitir una acción específica. Al mismo tiempo, la IU de Airflow valida el acceso del usuario solo contra los permisos del RBAC de Airflow y omite los permisos de IAM.

Por ejemplo, si un usuario tiene el permiso composer.dags.execute y la función Viewer de RBAC de Airflow, este usuario no podrá activar DAG desde Google Cloud Console. Como ejemplo opuesto, si un usuario no tiene el permiso composer.dags.list, puede ver la lista de DAG en la IU de Airflow.

Usa una cuenta de servicio de otro proyecto

Si deseas que un entorno de Cloud Composer en un proyecto use una cuenta de servicio administrada por el usuario de un proyecto diferente, debes configurar la cuenta de servicio administrada por el usuario para que funcione en todos los proyectos.

Reemplaza SERVICE_PROJECT_NUMBER por el número de proyecto de Cloud Composer.

  1. Edita la política de permisos del proyecto en el que se encuentra tu cuenta de servicio administrada por el usuario:

    1. Otorga la función Creador de tokens de cuenta de servicio a la cuenta de servicio predeterminada de Compute Engine del proyecto en el que se encuentra tu entorno (SERVICE_PROJECT_NUMBER-compute@developer.gserviceaccount.com).

    2. Otorga la función Creador de tokens de cuenta de servicio al agente de servicio de Cloud Composer del proyecto en el que se encuentra tu entorno (service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com).

    3. Otorga la función Cloud Composer v2 API Service Agent Extension a la cuenta de agente de servicio de Cloud Composer del proyecto en el que se encuentra tu entorno (service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com).

  2. Edita la política de permisos del proyecto en el que se encuentra tu entorno. Otorga las funciones necesarias a la cuenta de servicio administrada por el usuario, como se describe en Asigna funciones a una cuenta de servicio administrada por el usuario. Por ejemplo, en una configuración de IP pública, tu cuenta de servicio administrada por el usuario requiere la función Trabajador de Composer.

¿Qué sigue?