VPC Service Controls を構成する

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

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 リソースにアクセスするリスクの軽減。

Cloud Composer の VPC Service Controls について

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

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

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

  • Cloud Composer 環境が境界で保護されている場合、一般公開 PyPI リポジトリへのアクセスは制限されます。詳細については、VPC Service Controls に PyPI パッケージをインストールするをご覧ください。

  • 環境でプライベート IP ネットワーキングを使用している場合、限定公開の Google アクセスを介してプライベート IP 環境で使用できる Google API、サービス、ドメインへのトラフィックを除き、すべての内部トラフィックが VPC ネットワークにルーティングされます

  • VPC ネットワークの構成方法によっては、プライベート IP 環境が VPC ネットワーク経由でインターネットにアクセスできる場合があります。

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

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

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

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

サービス境界を作成する

サービス境界を作成して構成する方法を確認するには、サービス境界の作成をご覧ください。境界内で保護されるサービスの 1 つとして 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 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. プライベート IP を有効にして、新しい Cloud Composer 環境を作成します。環境の作成時に、この設定を構成する必要があります

    • バージョン composer-1.10.4 以降を使用します。

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

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

既存の環境を境界に追加する

VPC Service Controls に PyPI パッケージをインストールする

デフォルトの VPC Service Controls 構成では、Cloud Composer は、VPC ネットワークの内部 IP アドレス空間から到達可能なプライベート リポジトリからの PyPI パッケージのインストールのみをサポートしています。

プライベート リポジトリからインストールする

推奨の手順は、プライベート PyPI リポジトリを設定し、組織で使用する信頼できるパッケージを導入してから、プライベート リポジトリから Python 依存関係をインストールするように Cloud Composer を構成することです。

パブリック リポジトリからインストールする

リモート リポジトリ

これは、パブリック リポジトリからパッケージをインストールする場合に推奨される方法です。

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

  1. Artifact Registry リモート リポジトリを作成します。
  2. このリポジトリにアップストリーム ソースへのアクセス権を付与します。
  3. Artifact Registry リポジトリからパッケージをインストールするように Airflow を構成します。

外部接続

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

  1. プライベート IP 空間で実行中の Cloud Composer が外部の PyPI リポジトリと接続できるように Cloud NAT を構成します。

  2. Composer クラスタからリポジトリへの送信側の接続を許可するようにファイアウォール ルールを構成します。

環境のサービス アカウントには、次の IAM ロールが必要です。

  • Composer ワーカーcomposer.worker
  • サービス アカウント ユーザーiam.serviceAccountUser

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 ネットワークを構成します。

説明 方向 アクション 送信元または宛先 プロトコル ポート
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 サービス エージェント サービス アカウント)は、サービス プロジェクトとホスト プロジェクトの環境コンポーネントを管理します。

次のステップ