IAM を使用したアクセス制御

Cloud Composer 1 | Cloud Composer 2

このページでは、Cloud Composer で使用可能なアクセス制御オプションと、ロールを割り当てる方法について説明します。

概要

ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

また、Airflow ウェブ インターフェースへのアクセスを有効または無効にするだけでなく、権限を制御することもできます。詳細については、Airflow ロールベースのアクセス制御をご覧ください。

Cloud Composer の Identity and Access Management について

Cloud Composer は、Identity and Access Management(IAM)を使用してアクセス制御を行います。

Cloud IAM のさまざまな機能へのアクセスを制御するには、IAM サービス アカウントと Google Cloud プロジェクトのユーザー アカウントの両方にロールと権限を割り当てます。

Cloud Composer では、2 種類の IAM サービス アカウントを使用します。

Cloud Composer のサービス エージェント アカウントについて

プロジェクトで、Cloud Composer サービスは、Google が管理する特別なサービス アカウントを使用して、Cloud Composer に関連するリソースを管理します。このアカウントは、Cloud Composer サービス エージェントと呼ばれます。

Cloud Composer のサービス エージェントは、プロジェクト内のすべての環境で使用されます。

Cloud Composer 環境用のサービス アカウントについて

環境を作成するときに、サービス アカウントを指定します。環境のクラスタは、このサービス アカウントを使用して、Airflow ワーカーやスケジューラなどのさまざまな環境コンポーネントを含む Pod を実行します。

デフォルトでは、Cloud Composer 環境はデフォルトの Compute Engine サービス アカウントを使用して実行されます。この Google が管理するサービス アカウントには、Cloud Composer 環境を実行するために必要な権限(通常は編集者の基本ロール)を超える権限が付与されています。

Cloud Composer 環境に対しては、ユーザーが管理するサービス アカウントを設定することをおすすめします。このアカウントに Cloud Composer に固有のロールを割り当てます。その後、新しい環境を作成するときにこのサービス アカウントを指定します。

Cloud Composer ユーザーのロールについて

環境オペレーションをトリガーするには、ユーザーに十分な権限が必要です。たとえば、新しい環境を作成するには、composer.environments.create 権限が必要です。

Cloud Composer では、個々の権限はロールにグループ化されます。これらのロールは、プリンシパルに割り当てることができます。

サービス アカウントにプロジェクト編集者のロールが付与されている場合は、すべての環境オペレーションを実行できます。ただし、このロールには幅広い権限があります。環境を扱うユーザーの場合、Cloud Composer に固有のロールを使用することをおすすめします。このようにして、権限の範囲を限定し、プリンシパルごとに異なるアクセスレベルを提供できます。たとえば、あるユーザーは環境の作成、更新、アップグレード、削除の権限を持ち、別のユーザーは環境の表示と Airflow ウェブ インターフェースへのアクセスのみを行うことができます。

Cloud Composer のサービス エージェント アカウントにロールを割り当てる

プロジェクトで Cloud Composer API を有効にすると、Composer サービス エージェント アカウントがプロジェクトに作成されます。Cloud Composer は、このアカウントを使用して Google Cloud プロジェクトでオペレーションを実行します。

Cloud Composer 2 は GKE Autopilot を使用します。これには Workload Identity が必要です。Workload Identity をサポートするには、環境のサービス アカウントに、環境のクラスタを実行する Kubernetes サービス アカウントに対するバインディングが必要です。これらのバインディングは、環境クラスタの Pod が Google Cloud プロジェクトのリソースにアクセスできるようにするために必要です。たとえば、環境のバケットから DAG 定義ファイルを読み取ることができます。

環境のサービス アカウントと環境のクラスタの Kubernetes サービス アカウントとの間のバインディングを作成するには、Composer サービス エージェント アカウントに、そうするための十分な権限が必要です。それには、Cloud Composer v2 API サービス エージェント拡張機能ロールで提供される iam.serviceAccounts.getIamPolicy 権限と iam.serviceAccounts.setIamPolicy 権限が必要です。このロールは自動的には付与されません。手動でプロジェクトごとに 1 回付与する必要があります。

このロールを追加する手順については、環境を作成するをご覧ください。

ユーザーが管理するサービス アカウントにロールを割り当てる

Cloud Composer 環境を実行するユーザー管理のサービス アカウントの場合:

  • パブリック IP 構成では、Composer ワーカーcomposer.worker)ロールを割り当てます。
  • プライベート IP 構成では:
    1. Composer ワーカーcomposer.worker)のロールを割り当てます。
    2. サービス アカウント ユーザーiam.serviceAccountUser)のロールを割り当てます。

ユーザーに役割を割り当てる

Cloud Composer 環境に与えるアクセスレベルに応じて、プリンシパルに次の権限を付与します。

環境と環境バケットを管理する

環境の表示、作成、更新、アップグレード、削除、環境バケット内のオブジェクト(DAG ファイルなど)を管理し、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガーが可能なユーザーの場合。

  1. 環境とストレージ オブジェクト管理者composer.environmentAndStorageObjectAdmin)ロールを割り当てます。
  2. サービス アカウント ユーザーiam.serviceAccountUser)のロールを割り当てます。

環境の管理

環境の表示、作成、更新、アップグレード、削除、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガーが可能なユーザーの場合。

  1. Composer 管理者composer.admin)のロールを割り当てます。
  2. サービス アカウント ユーザーiam.serviceAccountUser)のロールを割り当てます。

環境を表示し環境バケットを管理する

環境の表示、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガー、環境バケット内のオブジェクトの管理(新しい DAG ファイルのアップロードなど)が可能なユーザーの場合。

  1. 環境ユーザーとストレージ オブジェクトの閲覧者composer.environmentAndStorageObjectViewer)のロールを割り当てます。
  2. ストレージ オブジェクト管理者storage.objectAdmin)のロールを割り当てます。

環境と環境バケットを表示する

環境の表示、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガー、環境バケット内のオブジェクトの表示が可能なユーザーの場合は、環境ユーザーとストレージ オブジェクトの閲覧者composer.environmentAndStorageObjectViewer)のロールを割り当てます。

環境を表示する

環境の表示、DAG UI からの DAG の表示とトリガー、Airflow ウェブ インターフェースへのアクセスが可能なユーザーの場合は、Composer ユーザーcomposer.user)のロールを割り当てます。

環境で gcloud を使用するための権限を割り当てる

Cloud Composer 環境で gcloud を使用するには、次の権限が必要です。

  • 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 サービス エージェント拡張機能
roles/composer.ServiceAgentV2Ext

Cloud Composer v2 API サービス エージェント拡張機能は、Composer v2 環境を管理するために必要な補助的ロールです。

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

Composer 管理者
roles/composer.admin

Cloud Composer リソースのすべてを管理できます。

このロールを付与できる最下位レベルのリソース:

  • プロジェクト
  • composer.*
  • serviceusage.quotas.get
  • serviceusage.services.get
  • serviceusage.services.list

環境とストレージ オブジェクトの管理者
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.*

環境ユーザーとストレージ オブジェクトの閲覧者
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 の共有 VPC エージェント
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 ユーザー
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 ワーカー
roles/composer.worker

Cloud Composer 環境 VM の実行に必要な権限を付与します(サービス アカウント向け)。

このロールを付与できる最下位レベルのリソース:

  • プロジェクト
  • 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.*

基本ロール

ロール 役職 説明 権限 最下位のリソース
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
composer.dags.execute
iam.serviceAccounts.actAs
プロジェクト
roles/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
composer.dags.execute
iam.serviceAccounts.actAs
プロジェクト
roles/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.create、環境のサービス アカウントでは iam.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 UI を介して Google Cloud Console から DAG を操作することができます。

権限 説明
composer.dags.list [環境の詳細] ページで DAG のリストを表示します。
composer.dags.get [DAG の詳細] ページで DAG、DAG 実行、タスクに関する詳細情報を取得します。
composer.dags.execute [DAG の詳細] ページから DAG をトリガーします。

Airflow RBAC 権限を使用して、ユーザー アカウントの権限をさらに制御できます。特定の操作を許可するには、DAG UI に IAM と Airflow RBAC の両方の権限が必要です。同時に、Airflow UI は IAM 権限をスキップして、Airflow RBAC 権限に対してのみユーザー アクセスを検証します。

たとえば、composer.dags.execute 権限と Viewer Airflow RBAC ロールを持つユーザーの場合、このユーザーは Google Cloud Console から DAG をトリガーできません。反対に、composer.dags.list 権限を持っていないユーザーでも、Airflow UI で DAG のリストを表示できます。

別のプロジェクトのサービス アカウントの使用

あるプロジェクトの Cloud Composer 環境で別のプロジェクトからユーザー管理サービス アカウントを実行する場合は、プロジェクト間で機能するようにユーザー管理のサービス アカウントを構成する必要があります。

SERVICE_PROJECT_NUMBER は、Cloud Composer が配置されているプロジェクトのプロジェクト番号に置き換えます。

  1. ユーザー管理のサービス アカウントが存在するプロジェクトの IAM ポリシーを編集します。

    1. 環境が配置されているプロジェクトの Compute Engine デフォルト サービス アカウント(SERVICE_PROJECT_NUMBER-compute@developer.gserviceaccount.com)に、サービス アカウント トークン作成者のロールを付与します。

    2. 環境が配置されているプロジェクトの Cloud Composer サービス エージェント(service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com)に、サービス アカウント トークン作成者のロールを付与します。

    3. Cloud Composer v2 API サービス エージェント拡張機能のロールを、環境が配置されているプロジェクトの Cloud Composer サービス エージェント アカウント(service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com)に付与します。

  2. 環境が配置されているプロジェクトの IAM ポリシーを編集します。ユーザーが管理するサービス アカウントにロールを割り当てるの説明に従って、必要なロールをユーザー管理のサービス アカウントに付与します。たとえば、パブリック IP 構成では、ユーザー管理のサービス アカウントに Composer ワーカーのロールが必要です。

次のステップ