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 構成では:
- Composer ワーカー(
composer.worker
)のロールを割り当てます。 - サービス アカウント ユーザー(
iam.serviceAccountUser
)のロールを割り当てます。
- Composer ワーカー(
ユーザーに役割を割り当てる
Cloud Composer 環境に与えるアクセスレベルに応じて、プリンシパルに次の権限を付与します。
環境と環境バケットを管理する
環境の表示、作成、更新、アップグレード、削除、環境バケット内のオブジェクト(DAG ファイルなど)を管理し、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガーが可能なユーザーの場合。
- 環境とストレージ オブジェクト管理者(
composer.environmentAndStorageObjectAdmin
)ロールを割り当てます。 - サービス アカウント ユーザー(
iam.serviceAccountUser
)のロールを割り当てます。
環境の管理
環境の表示、作成、更新、アップグレード、削除、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガーが可能なユーザーの場合。
- Composer 管理者(
composer.admin
)のロールを割り当てます。 - サービス アカウント ユーザー(
iam.serviceAccountUser
)のロールを割り当てます。
環境を表示し環境バケットを管理する
環境の表示、Airflow ウェブ インターフェースへのアクセス、DAG UI からの DAG の表示とトリガー、環境バケット内のオブジェクトの管理(新しい DAG ファイルのアップロードなど)が可能なユーザーの場合。
- 環境ユーザーとストレージ オブジェクトの閲覧者(
composer.environmentAndStorageObjectViewer
)のロールを割り当てます。 - ストレージ オブジェクト管理者(
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 サービス エージェント拡張機能
Cloud Composer v2 API サービス エージェント拡張機能は、Composer v2 環境を管理するために必要な補助的ロールです。 |
|
Composer 管理者
Cloud Composer リソースのすべてを管理できます。 このロールを付与できる最下位レベルのリソース:
|
|
環境とストレージ オブジェクトの管理者
Cloud Composer のリソースとすべてのプロジェクト バケットのオブジェクトを管理できる権限を付与します。 このロールを付与できる最下位レベルのリソース:
|
|
環境ユーザーとストレージ オブジェクトの閲覧者
Cloud Composer 環境とオペレーションを一覧表示して取得するために必要な権限を付与します。すべてのプロジェクト バケットのオブジェクトに対して読み取り専用アクセスを許可します。 このロールを付与できる最下位レベルのリソース:
|
|
Composer の共有 VPC エージェント
共有 VPC ホスト プロジェクトで Composer Agent のサービス アカウントに割り当てる必要があるロール |
|
Composer ユーザー
Cloud Composer 環境とオペレーションを一覧表示して取得するために必要な権限を付与します。 このロールを付与できる最下位レベルのリソース:
|
|
Composer ワーカー
Cloud Composer 環境 VM の実行に必要な権限を付与します(サービス アカウント向け)。 このロールを付与できる最下位レベルのリソース:
|
|
基本ロール
ロール | 役職 | 説明 | 権限 | 最下位のリソース |
---|---|---|---|---|
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 が配置されているプロジェクトのプロジェクト番号に置き換えます。
ユーザー管理のサービス アカウントが存在するプロジェクトの IAM ポリシーを編集します。
環境が配置されているプロジェクトの Compute Engine デフォルト サービス アカウント(
SERVICE_PROJECT_NUMBER-compute@developer.gserviceaccount.com
)に、サービス アカウント トークン作成者のロールを付与します。環境が配置されているプロジェクトの Cloud Composer サービス エージェント(
service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com
)に、サービス アカウント トークン作成者のロールを付与します。Cloud Composer v2 API サービス エージェント拡張機能のロールを、環境が配置されているプロジェクトの Cloud Composer サービス エージェント アカウント(
service-SERVICE_PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com
)に付与します。
環境が配置されているプロジェクトの IAM ポリシーを編集します。ユーザーが管理するサービス アカウントにロールを割り当てるの説明に従って、必要なロールをユーザー管理のサービス アカウントに付与します。たとえば、パブリック IP 構成では、ユーザー管理のサービス アカウントに Composer ワーカーのロールが必要です。