注
Apache Airflow ジョブは、Apache Airflow を使用しています。
Apache Airflow には、変数や接続などの機密情報を安全に保存するためのさまざまなバックエンドが用意されています。 Azure Key Vault はこれらのオプションの 1 つです。 この記事では、Apache Airflow ジョブのシークレット バックエンドとして Key Vault を構成するプロセスについて、順を追って説明します。
前提条件
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料の Azure アカウントを作成してください。
- Azure Key Vault: 所有していない場合、このチュートリアルに従って新しい Key Vault インスタンスを作成できます。
- サービス プリンシパル: 新しいサービス プリンシパルを作成するか、既存のサービス プリンシパルを使用して Key Vault インスタンスにアクセスするためのアクセス許可を付与できます。 たとえば、key-vault-contributor ロールを Key Vault インスタンスのサービス プリンシパル名 (SPN) に付与し、SPN でそれを管理できるようにします。 この記事で後述するように、サービス プリンシパルのクライアント ID とクライアント シークレット (API キー) を取得し、環境変数として追加する必要もあります。
アクセス許可
組み込みロールから、Key Vault インスタンスの以下のロールを SPN に割り当てます。
- Key Vault 貢献者
- キー・ボルト・シークレット・ユーザー
Apache Airflow ジョブでシークレット バックエンドとして Azure Key Vault を有効にする構成。
[Airflow の要件]: 最初の Airflow 環境のセットアップ時に、[apache-airflow-providers-microsoft-azure] をインストールします。
[構成のオーバーライド]: 統合ランタイム プロパティの [Airflow 構成のオーバーライド]に以下の設定を追加します。
-
AIRFLOW__SECRETS__BACKEND:
airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend
-
AIRFLOW__SECRETS__BACKEND_KWARGS:
{"connections_prefix": "airflow-connections", "variables_prefix": "airflow-variables", "vault_url": **\<your keyvault uri\>**}
-
AIRFLOW__SECRETS__BACKEND:
[環境変数]: Airflow 統合ランタイム プロパティの構成に以下の変数を追加します。
- AZURE_CLIENT_ID = <SPN のクライアント ID>
- AZURE_TENANT_ID = <テナント ID>
- AZURE_CLIENT_SECRET = <SPN のクライアント シークレット>
これらの設定を使用すると、Airflow DAG 内で変数と接続を使用できます。 接続と変数の名前は、前に定義した
AIRFLOW__SECRETS__BACKEND_KWARGS
に従う必要があります。 たとえば、変数名がsample_var
の場合は、airflow-variables-sample-var
として格納する必要があります。 詳細については、シークレット バック エンドとしての Azure Key Vault に関するページを参照してください。
Key Vault をバックエンドとして使用するサンプル DAG
以下の内容で新しい Python ファイル
adf.py
を作成します。from datetime import datetime, timedelta from airflow.operators.python_operator import PythonOperator from textwrap import dedent from airflow.models import Variable from airflow import DAG import logging def retrieve_variable_from_akv(): variable_value = Variable.get("sample-variable") logger = logging.getLogger(__name__) logger.info(variable_value) with DAG( "tutorial", default_args={ "depends_on_past": False, "email": ["airflow@example.com"], "email_on_failure": False, "email_on_retry": False, "retries": 1, "retry_delay": timedelta(minutes=5), }, description="This DAG shows how to use Azure Key Vault to retrieve variables in Apache Airflow DAG", schedule_interval=timedelta(days=1), start_date=datetime(2021, 1, 1), catchup=False, tags=["example"], ) as dag: get_variable_task = PythonOperator( task_id="get_variable", python_callable=retrieve_variable_from_akv, ) get_variable_task
Azure Key Vault に格納されている変数。