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 モードでは、ウェブサーバーへのアクセスは境界で保護され、境界外からのアクセスはブロックされます。

サービス境界外からのアクセスを許可するには、アクセスレベルを適切に構成します。

サービス境界の作成

サービス境界を作成して構成する方法を確認するには、サービス境界の作成をご覧ください。境界内で保護されるサービスの 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)
    • Security Token Service API (sts.googleapis.com)
    • 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 環境を作成します。環境の作成時に、この設定を構成する必要があります

  4. デフォルトでは、Airflow UI と API へのアクセスはセキュリティ境界内からのみ許可されます。セキュリティ境界外で使用できるようにする場合は、境界の外部から保護されたリソースへのアクセスを許可するを参照して、アクセスレベルを適切に構成します。

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 サービスへのアクセスに使用されます。

  • *.composer.cloud.google.com は、環境の Airflow ウェブサーバーにアクセスできるようにするために使用されます。このルールは、環境を作成する前に適用する必要があります。

    • 別の方法として、特定のリージョンに対するルールを作成することもできます。その場合は、REGION.composer.cloud.google.com を使用します。REGION は、環境が配置されているリージョン(us-central1 など)に置き換えます。
  • (省略可)*.composer.googleusercontent.com は、環境の Airflow ウェブサーバーにアクセスするときに使用されます。このルールは、VPC ネットワークで実行されているインスタンスから Airflow ウェブサーバーにアクセスする場合にのみ必要です。それ以外の場合は必須ではありません。このルールの一般的なシナリオは、VPC ネットワーク内から Airflow REST API を呼び出す場合です。

    • 代わりに、特定の環境に対するルールを作成することもできます。その場合は、ENVIRONMENT_WEB_SERVER_NAME.composer.googleusercontent.com を使用します。ENVIRONMENT_WEB_SERVER_NAME は、環境の Airflow UI URL の一意の部分(bffe6ce6c4304c55acca0e57be23128c-dot-us-central1 など)に置き換えます。
  • *.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
*.composer.cloud.google.com composer.cloud.google.com. DNS 名: *.composer.cloud.google.com.
リソース レコードのタイプ: CNAME
正規名: composer.cloud.google.com.
リソース レコードのタイプ: A
IPv4 アドレス: 199.36.153.4199.36.153.5199.36.153.6199.36.153.7
*.composer.googleusercontent.com
(省略可、説明を参照)
composer.googleusercontent.com. DNS 名: *.composer.googleusercontent.com.
リソース レコードのタイプ: CNAME
正規名: composer.googleusercontent.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 すべて
(環境で Private Service Connect を使用している場合)接続サブネットワーク Egress 許可 Cloud Composer 接続サブネットワークの範囲 TCP 3306, 3307
(環境で VPC ピアリングを使用している場合)テナント ネットワーク Egress 許可 Cloud Composer テナント ネットワークの IP 範囲 TCP 3306, 3307

IP 範囲を取得するには:

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

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

      [環境] に移動

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

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

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

  • 環境の Cloud Composer テナント ネットワークの IP 範囲は、[環境の構成] タブで確認できます。

  • 環境のサブネットワーク ID と Cloud Composer 接続サブネットワーク 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 とも呼ばれ、サービスとホスト プロジェクトの環境コンポーネントを管理します。

制限事項