VPC Service Controls を構成する

Cloud Composer 1 | Cloud Composer 2

VPC Service Controls を使用すると、組織で Google Cloud リソースの周囲に境界を定義して、データ漏洩のリスクを軽減できます。

Cloud Composer 環境はサービス境界内にデプロイできます。VPC Service Controls を使用して環境を構成することにより、機密データを非公開にしたまま、Cloud Composer のフルマネージド ワークフロー オーケストレーション機能を活用できます。

VPC Service Controls による Cloud Composer のサポートは次のことを意味します。

  • Cloud Composer を VPC Service Controls の境界内の安全なサービスとして選択できるようになりました。
  • Cloud Composer で使用されるすべての基盤となるリソースは、VPC Service Controls アーキテクチャをサポートし、そのルールに従うように構成されます。

VPC Service Controls で Cloud Composer 環境をデプロイすると、次のメリットが得られます。

  • データ漏洩のリスクの低減。
  • アクセス制御の構成ミスによるデータ漏洩に対する保護。
  • 悪意のあるユーザーが未承認の Google Cloud リソースにデータをコピーする、または外部の攻撃者がインターネットから Google Cloud リソースにアクセスするリスクの軽減。

VPC Service Controls モードの Airflow ウェブサーバー

VPC Service Controls モードでは、Cloud Composer により Airflow ウェブサーバーの 2 つのインスタンスが実行されます。Identity-Aware Proxy はこれらのインスタンス間でユーザー トラフィックの負荷分散を行います。Airflow ウェブサーバーは「読み取り専用」モードで動作します。これは、次のことを意味します。

  • DAG のシリアル化が有効です。その結果、Airflow ウェブサーバーは DAG 定義ファイルを解析しません。

  • プラグインはウェブサーバーに同期されないため、プラグインを使用してウェブサーバーの機能を変更または拡張することはできません。

  • Airflow ウェブサーバーは、Cloud Composer サービスによって事前にビルドされたコンテナ イメージを使用します。PyPI イメージを環境にインストールした場合、これらのイメージはウェブサーバー コンテナ イメージにインストールされません。

サービス境界の作成

サービス境界を作成して構成する方法を確認するには、サービス境界の作成をご覧ください。境界内で保護されるサービスの 1 つとして Cloud Composer を確実に選択してください。

境界内の環境の作成

境界内に Cloud Composer をデプロイするには、追加の手順を行う必要があります。Cloud Composer 環境を作成する場合:

  1. プロジェクトに対して Access Context Manager APICloud Composer API を有効にします。参考として、API の有効化をご覧ください。

  2. サービス境界に次の VPC のアクセス可能なサービスがあることを確認します。ない場合、環境の作成に失敗する可能性があります。

    • Cloud Composer API (composer.googleapis.com)
    • Compute Engine API(compute.googleapis.com)
    • Kubernetes Engine API (container.googleapis.com)
    • Container Registry API (containerregistry.googleapis.com)
    • Artifact Registry API (artifactregistry.googleapis.com)
    • Cloud Storage API(storage.googleapis.com)
    • Cloud SQL Admin API(sqladmin.googleapis.com)
    • Cloud Build API (cloudbuild.googleapis.com)
    • Cloud Logging API (logging.googleapis.com)
    • Cloud Monitoring API (monitoring.googleapis.com)
    • Cloud Pub/Sub API (pubsub.googleapis.com)
    • Cloud Cloud Resource Manager API (cloudresourcemanager.googleapis.com)
    • Service Directory API (servicedirectory.googleapis.com)
    • Cloud Key Management Service API (cloudkms.googleapis.com)、Cloud KMS または CMEK 鍵を使用する場合
    • Secret Manager API (secretmanager.googleapis.com)、Secret Manager をシークレットのバックエンドとして 使用している場合
  3. バージョン composer-1.10.4 以降を使用します。

  4. DAG のシリアル化が有効になっていることを確認します。環境で Cloud Composer バージョン 1.15.0 以降が使用されている場合、シリアル化はデフォルトで有効になっています。

  5. プライベート IP を有効にして、新しい Cloud Composer 環境を作成します。環境の作成時に、この設定を構成する必要があります

  6. 環境の作成時には、必ず Airflow ウェブサーバーへのアクセスを構成してください。最大限の保護のために、特定の IP 範囲からのウェブサーバーへのアクセスのみを許可します。詳しくは、ウェブサーバーのネットワーク アクセスを構成するをご覧ください。

VPC Service Controls による既存の環境の構成

次の場合は、環境を含むプロジェクトを境界に追加できます。

PyPI パッケージのインストール

デフォルトの VPC Service Controls 構成では、Cloud Composer は VPC ネットワークのプライベート IP アドレス空間から到達可能なプライベート リポジトリからの PyPI パッケージのインストールのみをサポートしています。このプロセスの推奨構成では、プライベート PyPI リポジトリを設定し、組織で使用する信頼できるパッケージを導入してから、プライベート リポジトリから Python 依存関係をインストールするように Cloud Composer を構成します

プライベート IP 空間外のリポジトリから PyPI パッケージをインストールすることもできます。手順は次のとおりです。

  1. プライベート IP 空間で実行中の Composer が外部の PyPI リポジトリと接続できるように Cloud NAT を構成します。
  2. Composer クラスタからリポジトリへの送信側の接続を許可するようにファイアウォール ルールを構成します。

この設定の使用時は、確実に外部リポジトリを使用するリスクを理解してください。外部リポジトリのコンテンツと整合性が信頼できることを確認してください。これらの接続は、抜き取りベクターとして使用される可能性があります。

Google API とサービスへの接続を構成する

VPC Service Controls の構成で、ネットワーク トラフィックを制御するには、restricted.googleapis.com を使用して Google API とサービスへのアクセスを構成します。このドメインは、VPC Service Controls をサポートしていない Google API とサービスへのアクセスをブロックします。

Cloud Composer 環境では、次のドメインを使用します。

  • *.googleapis.com は、他の Google サービスへのアクセスに使用されます。

  • *.pkg.dev は、環境の作成または更新時などに、環境イメージを取得するために使用されます。

  • *.gcr.io GKE では、Cloud Composer のバージョンに関係なく、Container Registry ドメインへの接続が必要です。

restricted.googleapis.com エンドポイントへの接続を構成します。

ドメイン DNS 名 CNAME レコード A レコード
*.googleapis.com googleapis.com. DNS 名: *.googleapis.com.
リソース レコードのタイプ: CNAME
正規名: googleapis.com.
リソース レコードのタイプ: A
IPv4 アドレス: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7
*.pkg.dev pkg.dev. DNS 名: *.pkg.dev.
リソース レコードのタイプ: CNAME
正規名: pkg.dev.
リソース レコードのタイプ: A
IPv4 アドレス: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7
*.gcr.io gcr.io. DNS 名: *.gcr.io.
リソース レコードのタイプ: CNAME
正規名: gcr.io.
リソース レコードのタイプ: A
IPv4 アドレス: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7

DNS ルールを作成するには:

  1. 新しい DNS ゾーンを作成し、このゾーンの DNS 名として DNS 名を使用します。

    例: pkg.dev.

  2. CNAME レコードレコードセットを追加します。

    例:

    • DNS 名: *.pkg.dev.
    • リソース レコードのタイプ: CNAME
    • 正規名: pkg.dev.
  3. レコードセットを追加する次のように置き換えます。レコード:

    例:

    • リソース レコードのタイプ: A
    • IPv4 アドレス: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7

詳細については、Google API およびサービスへのプライベート接続を設定するをご覧ください。

ファイアウォール ルールを構成する

プロジェクトにデフォルト以外のファイアウォール ルールがある場合(暗黙のファイアウォール ルールをオーバーライドする、またはデフォルトのネットワークで事前入力ルールを変更するルールなど)、次のファイアウォール ルールが構成されていることを確認します。

たとえば、すべての下り(外向き)トラフィックを拒否するファイアウォール ルールがある場合、Cloud Composer で環境の作成に失敗することがあります。問題を回避するには、上記のリストに従って、グローバル deny ルールよりも優先度が高い選択的な allow ルールを定義します。

環境からのトラフィックを許可するように VPC ネットワークを構成します。

説明 Direction(通話方向) アクション 送信元または宛先 プロトコル ポート
DNS

Cloud DNS の VPC Service Controls サポートの説明に沿って構成します。
- - - - -
Google API とサービス Egress 許可 Google API とサービスに使用する restricted.googleapis.com の IPv4 アドレス。 TCP 443
環境のクラスタノード Egress 許可 環境のサブネットワークのプライマリ IP アドレス範囲 TCP、UDP すべて
環境のクラスタ Pod Egress 許可 環境のサブネットワーク内の Pod のセカンダリ IP アドレス範囲 TCP、UDP すべて
環境のクラスタ コントロール プレーン Egress 許可 GKE コントロール プレーンの IP 範囲 TCP、UDP すべて
ウェブサーバー Egress 許可 ウェブサーバーのネットワーク IP 範囲 TCP 3306, 3307

IP 範囲を取得するには:

  • Pod、Service、コントロール プレーンのアドレス範囲は、環境のクラスタの [クラスタ] ページで確認できます。

    1. Google Cloud コンソールで [環境] ページに移動します。

      [環境] に移動

    2. 環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。

    3. [環境の設定] タブに移動します。

    4. クラスタの詳細を表示のリンクをクリックします。

  • 環境のウェブサーバーの IP 範囲は、[環境の構成] タブで確認できます。

  • 環境のネットワーク ID は、[環境の構成] タブで確認できます。サブネットワークの IP 範囲を取得するには、[VPC ネットワーク] ページに移動し、ネットワークの名前をクリックして詳細を表示します。

    [VPC ネットワーク] に移動

VPC Service Controls のログ

環境作成の問題をトラブルシューティングする際には、VPC Service Controls によって生成された監査ログを分析できます。

他のログメッセージに加えて、環境のコンポーネントを構成する cloud-airflow-prod@system.gserviceaccount.com および service-PROJECT_ID@cloudcomposer-accounts.iam.gserviceaccount.com サービス アカウントに関する情報のログを確認できます。

Cloud Composer サービスは、cloud-airflow-prod@system.gserviceaccount.com サービス アカウントを使用して、環境のテナント プロジェクト コンポーネントを管理します。

service-PROJECT_ID@cloudcomposer-accounts.iam.gserviceaccount.com サービス アカウントは Composer Service Agent Service Account とも呼ばれ、サービスとホスト プロジェクトの環境コンポーネントを管理します。

制限事項

  • ウェブ UI で DAG シリアル化を有効にした関数を使用してレンダリングされたテンプレートの表示は、Composer バージョン 1.12.0 以降と Airflow バージョン 1.10.9 以降を実行している環境でサポートされています。

  • DAG のシリアル化が有効の場合、async_dagbag_loader フラグを True に設定できません。

  • DAG のシリアル化を有効にすると、Cloud Composer がデプロイされている VPC ネットワークのセキュリティを損なう可能性があるため、すべての Airflow ウェブサーバー プラグインが無効になります。これは、Airflow 演算子、センサーなどを含む、スケジューラまたはワーカーのプラグインには影響しません。