Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
このページでは、Airflow UI と DAG UI に対するアクセス制御のさまざまなメカニズムについて説明します。IAM によって提供されるアクセス制御に加えて、これらのメカニズムを使用して、お使いの環境の Airflow UI と DAG UI でユーザーを分離できます。
Cloud Composer の Airflow UI アクセス制御の概要
Airflow UI と DAG UI へのアクセスと、それらの UI のデータとオペレーションの公開設定は、Cloud Composer では次の 2 つのレベルで制御されます。
Cloud Composer での Airflow UI と DAG UI へのアクセスは IAM によって制御されます。
プロジェクトで Cloud Composer 環境を表示できるロールがアカウントに付与されていない場合、Airflow UI と DAG UI は使用できません。
IAM は、Airflow UI や DAG UI で追加の詳細な権限制御を行うことはありません。
Apache Airflow アクセス制御モデルを使用すると、ユーザーロールに基づいて Airflow UI と DAG UI の可視性を低減できます。
Apache Airflow アクセス制御は Airflow の機能であり、IAM とは異なる独自のユーザー、ロール、権限のモデルを持っています。
Apache Airflow アクセス制御は、リソースベースの権限を使用します。特定の Airflow のロールを持つ Airflow ユーザーはすべて、このロールの権限を取得します。たとえば、can delete on Connections
権限を持つロールを付与された Airflow ユーザーは、Airflow UI の [接続] ページで接続を削除できます。
個々の DAG に DAG レベルの権限を割り当てることもできます。たとえば、特定の Airflow ロールを持つユーザーだけが Airflow UI で特定の DAG を表示できるように設定可能です。Cloud Composer では、環境のバケット内の DAG ファイルが配置されているサブフォルダに基づいて、DAG レベルの権限を自動的に割り当てることができます。
Workforce Identity 連携を使って外部 ID アクセスを設定するには、外部 ID に IAM ロールを付与する セクションにあるように、まず、IAM で環境へのアクセス権を付与します。その後、通常どおり Airflow UI アクセス制御を使用できます。外部 ID の Airflow ユーザーは、メールアドレスの代わりにプリンシパル ID を使用し、Google アカウントとは異なるユーザー レコード フィールドに異なる値を入力できます。
Airflow のロールおよびアクセス制御の設定を管理する
管理者のロール(または同等のロール)を持つユーザーは、Airflow UI でアクセス制御設定を表示、変更できます。
Airflow UI では、[セキュリティ] メニューからアクセス制御設定を構成できます。Airflow アクセス制御モデル、使用可能な権限、デフォルトロールの詳細については、Airflow UI のアクセス制御のドキュメントをご覧ください。
Airflow は独自のユーザーリストを保持します。管理者のロール(または同等のもの)を持つユーザーは、環境の Airflow UI を開いたユーザーで、Airflow に登録されたユーザーのリストを表示できます。このリストには、次のセクションで説明するように、管理者が手動で事前登録したユーザーも含まれます。
Airflow UI でユーザーを登録する
新しいユーザーは、Cloud Composer 環境の Airflow UI を初めて開いたときに自動的に登録されます。
登録時に、[webserver]rbac_user_registration_role
Airflow の構成オプションで指定されたロールがユーザーに付与されます。新規登録ユーザーのロールを管理するには、この Airflow 構成オプションを別の値でオーバーライドします。
指定しない場合、Airflow 2 を使用する環境では、デフォルトの登録のロールは Op
となります。
Airflow UI の基本ロールの構成を作成する場合、次の手順をおすすめします。
環境管理者は、新しく作成された環境の Airflow UI を開きます。
管理者アカウントに
Admin
ロールを付与します。Airflow 2 を使用する環境の新しいアカウントのデフォルトのロールはOp
です。Admin
ロールを割り当てるには、gcloud CLI で次の Airflow CLI コマンドを実行します。gcloud composer environments run ENVIRONMENT_NAME \ --location LOCATION \ users add-role -- -e USER_EMAIL -r Admin
以下のように置き換えます。
ENVIRONMENT_NAME
を環境の名前にする。LOCATION
は、環境が配置されているリージョン。USER_EMAIL
は、ユーザー アカウントのメールアドレス。
管理者は、他のユーザーに
Admin
ロールを割り当てるなど、新しいユーザーのアクセス制御を構成できます。
ユーザーを事前登録する
ユーザーは、(メールアドレスではなく)Google ユーザー アカウントの数値 ID がユーザー名として自動的に登録されます。また、手動でユーザーを登録し、ユーザー名のフィールドをユーザーのメインのメールアドレスに設定したユーザー レコードを追加して、ユーザーにロールを割り当てることもできます。事前登録ユーザー レコードと一致するメールアドレスを持つユーザーが初めて Airflow UI にログインすると、そのユーザー名は現在メールアドレスで識別されている(最初のログイン時に)ユーザー ID に置き換えられます。Google ID(メールアドレス)とユーザー アカウント(ユーザー ID)の関係は固定されていません。Google グループは事前登録できません。
ユーザーを事前登録するには、Airflow UI を使用するか、Google Cloud CLI から Airflow CLI コマンドを実行します。
Google Cloud CLI を使用してカスタムロールを持つユーザーを事前登録するには、次の Airflow CLI コマンドを実行します。
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
users create -- \
-r ROLE \
-e USER_EMAIL \
-u USER_EMAIL \
-f FIRST_NAME \
-l LAST_NAME \
--use-random-password # The password value is required, but is not used
以下を置き換えます。
ENVIRONMENT_NAME
: 環境の名前LOCATION
: 環境が配置されているリージョンROLE
: ユーザーの Airflow ロール(例:Op
)USER_EMAIL
: ユーザーのメールアドレスFIRST_NAME
とLAST_NAME
: ユーザーの名と姓
例:
gcloud composer environments run example-environment \
--location us-central1 \
users create -- \
-r Op \
-e "example-user@example.com" \
-u "example-user@example.com" \
-f "Name" \
-l "Surname" \
--use-random-password
ユーザーを削除する
ユーザーを Airflow UI から削除しても、そのユーザーが Airflow UI に次回アクセスしたときに自動的に登録されるため、ユーザーのアクセス権は取り消されません。Airflow UI 全体へのアクセス権を取り消すには、プロジェクトの許可ポリシーから composer.environments.get
権限を削除します。
ユーザーのロールを「パブリック」に変更することで、ユーザーの登録を維持しつつ、Airflow UI のすべての権限を削除することもできます。
DAG レベルの権限を自動的に構成する
フォルダごとのロール登録機能では、/dags
フォルダ内の各サブフォルダごとにカスタム Airflow ロールが自動的に作成され、このロールにすべての DAG レベルのアクセス権が、ソースファイルがそれぞれのサブフォルダに保存されているすべての DAG に付与されます。これにより、カスタム Airflow ロールの管理と DAG へのアクセスが効率化されます。
フォルダ単位のロール登録の仕組み
フォルダ単位のロール登録は、ロールとその DAG レベルの権限を自動的に構成する方法です。そのため、DAG レベルの権限を付与するほかの Airflow メカニズムとの競合が発生する可能性があります。
このような競合を回避するため、フォルダ単位のロール登録を有効にすると、これらのメカニズムの動作も変更されます。
Airflow 2 では:
- DAG のソースコードで定義されている
access_control
プロパティを使用して、DAG へのアクセス権をロールに付与できます。 - (Airflow UI または gcloud CLI を介して)手動で DAG 権限を付与すると、競合が発生することがあります。たとえば、DAG レベルの権限を手動でフォルダ単位のロールに付与すると、DAG プロセッサが DAG を同期する際にこれらの権限を削除または上書きできます。DAG 権限は手動で付与しないことをおすすめします。
- ロールには、フォルダ単位のロール登録で登録され、DAG の
access_control
プロパティで定義された DAG アクセス権の結合があります。
最上位の /dags
フォルダに直接配置された DAG は、フォルダ単位のロールに自動的に割り当てられません。フォルダごとのロールでアクセスすることはできません。管理者、Op、ユーザーなど、他の権限を持つロールは、Airflow UI と DAG UI を通じてアクセスできます。
組み込みの Airflow ロールと Cloud Composer によって作成されたロールと一致する名前のサブフォルダに DAG をアップロードした場合、これらのサブフォルダ内の DAG の権限は引き続きロールに割り当てられます。たとえば、DAG を /dags/Admin
フォルダにアップロードすると、この DAG に対する権限が管理者ロールに付与されます。組み込みの Airflow ロールには、管理者、Op、ユーザー、閲覧者、パブリックが含まれます。Cloud Composer では、フォルダ単位のロール登録機能が有効になった後に、NoDags と UserNoDags が作成されます。
Airflow スケジューラで DAG を処理する際に、Airflow はフォルダ単位のロール登録を行います。環境内の DAG が 100 を超えると、DAG 解析時間が増加することがあります。
この場合は、スケジューラにメモリと CPU をより多く使用することをおすすめします。[scheduler]parsing_processes
Airflow 構成オプションの値を増やすこともできます。
DAG をフォルダ単位のロールに自動的に割り当てる
DAG をフォルダ単位のロールに自動的に割り当てるには:
次の Airflow 構成オプションをオーバーライドします。
セクション キー 値 webserver
rbac_autoregister_per_folder_roles
True
新しいユーザー登録ロールを、DAG にアクセスできないロールに変更します。 このようにして、管理者が特定の DAG に対する権限を持つロールをアカウントに割り当てるまで、新規ユーザーは DAG にはアクセスできません。
UserNoDags は、フォルダ単位のロール登録機能が有効になっている場合にのみ Cloud Composer によって作成されるロールです。これはユーザー ロールと同等ですが、DAG へのアクセス権はありません。
次の Airflow 構成オプションをオーバーライドします。
セクション キー 値 webserver
rbac_user_registration_role
UserNoDags
ユーザーが Airflow に登録されていることを確認します。
次のいずれかの方法でユーザーにロールを割り当てます。
- Airflow が DAG サブフォルダに基づいて自動的にロールを作成し、ユーザーをこれらのロールに割り当てます。
- DAG サブフォルダの空のロールをあらかじめ作成し、ロール名をサブフォルダの名前と一致させてから、これらのロールにユーザーを割り当てます。たとえば、
/dags/CustomFolder
フォルダにはCustomFolder
という名前のロールを作成します。
ユーザーに割り当てられたロールと一致する名前のサブフォルダに DAG をアップロードします。これらのサブフォルダは、環境のバケット内の
/dags
フォルダ内に配置する必要があります。Airflow は、このようなサブフォルダ内の DAG に権限を追加します。これにより、対応するロールを持つユーザーのみが Airflow UI と DAG UI から DAG にアクセスできるようになります。
DAG レベルの権限を手動で構成する
カスタムロールの DAG レベルの権限を構成して、特定のユーザー グループに表示される DAG を指定できます。
Airflow UI で DAG レベルの権限を構成するには:
- DAG をグループ化するための空のロールを管理者が作成します。
- 管理者がユーザーを適切なロールに割り当てます。
- 管理者またはユーザーが DAG をロールに割り当てます。
- Airflow UI では、ユーザーは自分のグループに割り当てられた DAG のみを表示できます。
DAG は、DAG プロパティまたは Airflow UI からロールに割り当てることができます。
Airflow UI でロールに DAG を割り当てる
管理者は、Airflow UI で必要な DAG レベルの権限を適切なロールに割り当てることができます。
このオペレーションは DAG UI ではサポートされていません。
DAG プロパティ内のロールに DAG を割り当てる
DAG に access_control
DAG パラメータを設定して、DAG が割り当てられる DAG グループ化ロールを指定できます。
スケジューラは、DAG を解析するときに DAG レベルの権限を適用します。
dag = DAG(
access_control={
'DagGroup': {'can_edit', 'can_read'},
},
...
)
Airflow UI で監査ログをユーザーにマッピングする
Airflow UI の監査ログは、Google ユーザー アカウントの数値 ID にマッピングされます。たとえば、ユーザーが DAG を一時停止すると、ログにエントリが追加されます。
監査ログは、Airflow UI の [参照] > [監査ログ] ページで表示できます。
一般的なエントリでは、[オーナー] フィールドに数値 ID 「accounts.google.com:NUMERIC_ID
」が表示されます。[セキュリティ] > [ユーザーの一覧表示] ページで、数値 ID をユーザーのメールアドレスにマッピングできます。このページは Admin
ロールを持つユーザーが使用できます。
Google ID(メールアドレス)とユーザー アカウント(ユーザー ID)の関係は固定されていません。