リソース ロケーションの制限を構成する

Managed Airflow(Gen 3) | Managed Airflow(Gen 2) | Managed Airflow(レガシー Gen 1)

このページでは、Managed Airflow で保存されたデータを指定したロケーション内に保持するように リソース ロケーションの制限 を構成する方法について説明します。

ロケーション制限の仕組み

マネージド Airflow のロケーション制限は、マネージド Airflow 環境が作成されたプロジェクトに適用される組織のポリシーに基づいて決定されます。このポリシーは、プロジェクト内で割り当てられるか、組織から継承されます。

ロケーション制限を有効にすると、ポリシーで禁止されているリージョンに環境を作成できなくなります。リージョンが拒否リストに含まれている場合、またはリージョンが許可リストに含まれていない場合、このリージョンに環境を作成することはできません。

環境の作成を有効にするには、このリージョン内の特定のゾーンではなく、リージョン全体をポリシーで許可する必要があります。たとえば、europe-west3 リージョンで Managed Airflow 環境を作成するには、ポリシーでこのリージョンを許可する必要があります。

Managed Airflow は、次のタイミングでロケーションの制限を確認します。

  • 環境の作成時。
  • 環境のアップグレード時、オペレーション中に追加のリソースが作成された場合。
  • 環境のアップデート時、Managed Airflow の依存関係にロケーション制限を適用しない古い環境の場合。

Managed Airflow は、ロケーションの制限を確認するだけでなく、次の処理も行います。

  • ユーザーがカスタマイズした Airflow イメージをリージョンの Artifact Registry リポジトリに保存する。たとえば、環境にカスタム PyPI イメージをインストールすると、このようなイメージが作成されます。
  • ポリシーで US マルチリージョン が明示的に禁止されている場合、Cloud Build の使用を無効にする。この場合、ユーザーがカスタマイズした Airflow イメージは、環境のクラスタ内に構築されます。

リソース ロケーションの制限を有するプライベート IP 環境に Python 依存関係をインストールする

プロジェクトにリソース ロケーションの制限を設定している場合、Cloud Build を使用して Python パッケージをインストールすることはできません。その結果、公共のインターネット上のリポジトリへの直接アクセスは無効になります。

ロケーションの制限で US マルチリージョンが許可されていない場合にプライベート IP 環境に Python 依存関係をインストールするには、 次に挙げる選択肢のいずれかを使用します。

  • VPC ネットワークにホストされている非公開の PyPI リポジトリを使用する

  • VPC ネットワーク内のプロキシ サーバーを使用して、公共のインターネット上の PyPI リポジトリに接続する。プロキシのアドレスは、Cloud Storage バケットの /config/pip/pip.conf ファイルで指定します。

  • セキュリティ ポリシーで外部 IP アドレスからの VPC ネットワークへのアクセスが許可されている場合は、Cloud NAT を構成できます。

  • ローカル ライブラリとしてインストールするために、Python の依存関係を Cloud Storage バケットの dags フォルダに保存します。 依存関係ツリーが大規模な場合は、この方法は適していません。

Managed Airflow ログに対してロケーションを制限する

Managed Airflow ログにセンシティブ データが含まれている場合は、Managed Airflow ログをリージョンの Cloud Storage バケットにリダイレクトすることをおすすめします。そうするには、 a ログシンクを使用します。ログを Cloud Storage バケットにリダイレクトすると、ログは Cloud Logging に送信されません。

gcloud

  1. Cloud Storage バケットを新規作成する

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
    

    以下のように置き換えます。

    • LOCATION は、環境が配置されているリージョン。
    • BUCKET_NAME をバケット名に置き換えます。例: composer-logs-us-central1-example-environment
  2. ログシンクを新規作成します。

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND \
    resource.labels.environment_name=ENVIRONMENT_NAME AND \
    resource.labels.location=LOCATION"
    

    以下のように置き換えます。

    • ENVIRONMENT_NAME を環境の名前にする。
    • BUCKET_NAME をバケット名に置き換えます。
    • LOCATION は、環境が配置されているリージョン。
  3. 上記のコマンドの出力には、サービス アカウント番号が含まれます。このサービス アカウントに Storage オブジェクト作成者のロールを付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NUMBER@gcp-sa-logging.iam.gserviceaccount.com" \
    --role='roles/storage.objectCreator' \
    --condition=None
    

    以下のように置き換えます。

    • PROJECT_ID は、プロジェクト ID に置き換えます。
    • SA_NUMBER は、前のステップの gcloud logging sinks create コマンドによって指定されたサービス アカウント番号に置き換えます。
  4. 環境のログをロギングから除外します。

    gcloud logging sinks update _Default \
    --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter=\
    "resource.type=cloud_composer_environment AND \
    resource.labels.environment_name=ENVIRONMENT_NAME AND \
    resource.labels.location=LOCATION"
    

    以下のように置き換えます。

    • ENVIRONMENT_NAME を環境の名前に置き換えます。
    • LOCATION は、環境が配置されているリージョン。

次のステップ