使用 IAM 控制访问权限

Cloud Composer 1 | Cloud Composer 2

本页面介绍 Cloud Composer 中提供的访问权限控制选项,并说明如何分配角色。

概览

如需了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

除了启用或停用对 Airflow 网页界面的访问权限之外,您还可以控制该网页界面的权限。如需了解详情,请参阅 Airflow 基于角色的访问权限控制

Cloud Composer 中的 Identity and Access Management 简介

Cloud Composer 使用 Identity and Access Management (IAM) 进行访问权限控制。

通过为 IAM 服务帐号和 Google Cloud 项目中的用户帐号分配角色和权限,您可以控制对不同 Cloud Composer 功能的访问权限。

Cloud Composer 使用两种类型的 IAM 服务帐号:

Cloud Composer Service Agent 帐号简介

在您的项目中,Cloud Composer 服务会使用由 Google 管理的特殊服务帐号来管理与 Cloud Composer 相关的资源。此帐号称为 Cloud Composer Service Agent

Cloud Composer Service Agent 用于项目中的所有环境。

Cloud Composer 环境的服务帐号简介

创建环境时,您需要指定服务帐号。您的环境的集群使用此服务帐号运行具有不同环境组件(如 Airflow 工作器和调度器)的 pod。

默认情况下,Cloud Composer 环境使用默认 Compute Engine 服务帐号运行。此 Google 管理的服务帐号具有的权限超出运行 Cloud Composer 环境所需的权限,通常是 Editor 基本角色。

我们建议您为 Cloud Composer 环境设置用户管理的服务帐号。为此帐号分配 Cloud Composer 专用角色。然后,在创建新环境时指定此服务帐号。

Cloud Composer 用户角色简介

要触发环境操作,用户必须具有足够的权限。例如,如果您要创建新环境,则必须拥有 composer.environments.create 权限。

对于 Cloud Composer,各个权限分组到角色中。您可以将这些角色分配给主帐号。

如果您的服务帐号具有 Project Editor 角色,则您可以执行所有环境操作。但是,此角色具有宽泛的权限。对于使用环境的用户,我们建议使用 Cloud Composer 专用角色。通过这种方式,您可以缩小权限范围,并为不同主帐号提供不同访问权限级别。例如,一个用户拥有创建、更新、升级和删除环境的权限,而另一个用户只能查看环境和访问 Airflow 网页界面。

向 Cloud Composer 服务代理帐号分配角色

在项目中启用 Cloud Composer API 时,系统会在您的项目中创建 Composer Service Agent 帐号。Cloud Composer 使用此帐号在您的 Google Cloud 项目中执行操作。

默认情况下,Composer Service Agent 帐号具有 Cloud Composer API Service Agent 角色。

向用户管理的服务帐号分配角色

对于运行 Cloud Composer 环境的用户管理的服务帐号

  • 对于公共 IP 配置,请分配 Composer Worker (composer.worker) 角色。
  • 对于专用 IP 配置:
    1. 分配 Composer Worker (composer.worker) 角色。
    2. 分配 Service Account User (iam.serviceAccountUser) 角色。

为用户分配角色

根据您要提供的 Cloud Composer 环境访问权限级别,向主帐号授予以下权限。

管理环境和环境存储桶

对于可以查看、创建、更新、升级和删除环境的用户,在环境存储分区中管理对象(例如 DAG 文件),访问 Airflow 网页界面,从 DAG 界面查看和触发 DAG:

  1. 分配 Environment and Storage Object Administrator (composer.environmentAndStorageObjectAdmin) 角色。
  2. 分配 Service Account User (iam.serviceAccountUser) 角色。

管理环境

对于可以查看、创建、更新、升级和删除环境的用户,可以访问 Airflow 网页界面,并通过 DAG 界面查看和触发 DAG:

  1. 分配 Composer Administrator (composer.admin) 角色。
  2. 分配 Service Account User (iam.serviceAccountUser) 角色。

查看环境并管理环境存储桶

对于可以查看环境、访问 Airflow 网页界面、通过 DAG 界面查看和触发 DAG 以及管理环境存储分区中的对象(例如上传新 DAG 文件)的用户:

  1. 分配 Environment User and Storage Object Viewer (composer.environmentAndStorageObjectViewer) 角色。
  2. 分配 Storage Object Admin (storage.objectAdmin) 角色。

查看环境和环境存储桶

对于可以查看环境、访问 Airflow 网页界面、通过 DAG 界面查看和触发 DAG 以及查看环境存储分区中的对象的用户,请分配 Environment User and Storage Object Viewer (composer.environmentAndStorageObjectViewer) 角色。

查看环境

对于可以查看环境、通过 DAG 界面查看和触发 DAG 以及访问 Airflow 网页界面的用户,请分配 Composer User (composer.user) 角色。

分配将 gcloud 与环境搭配使用的权限

要将 gcloud 与 Cloud Composer 环境搭配使用,您需要以下权限:

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

如果要使用 gcloud composer 命令管理环境或环境存储桶,还必须具有拥有足够权限的角色。

如果要运行 Airflow CLI 命令,您还需要以下额外权限:

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

角色

角色 权限

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

Cloud Composer v2 API Service Agent Extension 是管理 Composer v2 环境所需的补充角色。

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

Composer Administrator
(roles/composer.admin)

提供对 Cloud Composer 资源的完全控制权。

您可以授予此角色的最低级层资源:

  • 项目
  • composer.*
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list

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

提供对 Cloud Composer 资源和所有项目存储分区中对象的完全控制权。

您可以授予此角色的最低级层资源:

  • 项目
  • 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)

提供列出及获取 Cloud Composer 环境和操作所需的权限。 以及对所有项目存储分区中对象的只读权限。

您可以授予此角色的最低级层资源:

  • 项目
  • 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)

应分配给共享 VPC 宿主项目中的 Composer Agent 服务帐号的角色

  • 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)

提供列出及获取 Cloud Composer 环境和操作所需的权限。

您可以授予此角色的最低级层资源:

  • 项目
  • 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)

提供运行 Cloud Composer 环境虚拟机所需的权限。适用于服务帐号。

您可以授予此角色的最低级层资源:

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

Service Agent 的角色

roles/composer.serviceAgent Cloud Composer API Service Agent

Cloud Composer API 服务代理可以管理环境。

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

基本角色

角色 名称 说明 权限 最低资源要求
roles/owner 所有者 该基本角色可提供 Cloud Composer 资源的完全控制权。 composer.environments.create
composer.environments.delete
composer.environments.get
composer.environments.list
composer.environments.update
composer.imageversions.list
composer.operations.delete
composer.operations.get
composer.operations.list
composer.dags.list
composer.dags.get
.
项目
roles/editor Editor 该基本角色可提供 Cloud Composer 资源的完全控制权。 composer.environments.create
composer.environments.delete
composer.environments.get
composer.environments.list
composer.environments.update
composer.imageversions.list
composer.operations.delete
composer.operations.get
composer.operations.list
composer.dags.list
composer.dags.get
.
项目
roles/viewer Viewer 该基本角色可为用户提供列出和获取 Cloud Composer 资源的权限。 composer.environments.get
composer.environments.list
composer.imageversions.list
composer.operations.get
composer.operations.list
composer.dags.list
composer.dags.get
项目

API 方法的权限

下表列出了调用方在调用 Cloud Composer API 中的每种 API 方法时,或使用使用该 API 的 Google Cloud 工具(如 Google Cloud Console 或 Google Cloud CLI)执行任务时必须具备的权限。

方法 权限
environments.create 环境的服务帐号的 composer.environments.createiam.serviceAccounts.actAs 权限。
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

通过 Google Cloud Console 使用 DAG 的权限

以下权限涵盖通过 DAG 界面在 Google Cloud Console 中使用 DAG:

权限 说明
composer.dags.list 在“环境详情”页面上查看 DAG 列表。
composer.dags.get 在 DAG 详情页面上获取有关 DAG、DAG 运行和任务的详细信息。
composer.dags.execute 从 DAG 详情页面触发 DAG。

您可以使用 Airflow RBAC 权限进一步控制用户帐号的权限。DAG 界面需要 IAM 和 Airflow RBAC 权限才能执行特定操作。同时,Airflow 界面仅根据 Airflow RBAC 权限验证用户访问权限,跳过 IAM 权限。

例如,如果用户具有 composer.dags.execute 权限和 Viewer Airflow RBAC 角色,则该用户无法从 Google Cloud Console 触发 DAG。作为示例,即使用户没有 composer.dags.list 权限,该用户仍然可以在 Airflow 界面中查看 DAG 列表。

使用其他项目中的服务帐号

如果您希望一个项目中的 Cloud Composer 环境使用其他项目中的用户管理的服务帐号,则必须配置用户管理的服务帐号以跨项目工作。

SERVICE_PROJECT_NUMBER 替换为 Cloud Composer 所在项目的项目编号

  1. 修改用户管理的服务帐号所在项目的允许政策

    1. Service Account Token Creator 角色授予您的环境所在的项目的 Compute Engine 默认服务帐号 (SERVICE_PROJECT_NUMBER-compute@developer.gserviceaccount.com)。

    2. Service Account Token Creator 角色授予您的环境所在的项目的 Cloud Composer Service Agent (service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com)。

  2. 修改您的环境所在项目的允许政策。按照将角色分配给用户管理的服务帐号中所述,向您的用户管理的服务帐号授予必需的角色。例如,在公共 IP 配置中,您的用户管理的服务帐号需要具有 Composer Worker 角色。

后续步骤