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 環境を作成する場合:
プロジェクトに対して Access Context Manager API と Cloud Composer API を有効にします。参考として、API の有効化をご覧ください。
サービス境界に次の 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 をシークレットのバックエンドとして 使用している場合
バージョン composer-1.10.4 以降を使用します。
DAG のシリアル化が有効になっていることを確認します。環境で Cloud Composer バージョン 1.15.0 以降が使用されている場合、シリアル化はデフォルトで有効になっています。
プライベート IP を有効にして、新しい Cloud Composer 環境を作成します。環境の作成時に、この設定を構成する必要があります。
環境の作成時には、必ず Airflow ウェブサーバーへのアクセスを構成してください。最大限の保護のために、特定の IP 範囲からのウェブサーバーへのアクセスのみを許可します。詳しくは、ウェブサーバーのネットワーク アクセスを構成するをご覧ください。
VPC Service Controls による既存の環境の構成
次の場合は、環境を含むプロジェクトを境界に追加できます。
- 環境で DAG のシリアル化が有効になっています。
PyPI パッケージのインストール
デフォルトの VPC Service Controls 構成では、Cloud Composer は VPC ネットワークのプライベート IP アドレス空間から到達可能なプライベート リポジトリからの PyPI パッケージのインストールのみをサポートしています。このプロセスの推奨構成では、プライベート PyPI リポジトリを設定し、組織で使用する信頼できるパッケージを導入してから、プライベート リポジトリから Python 依存関係をインストールするように Cloud Composer を構成します。
プライベート IP 空間外のリポジトリから PyPI パッケージをインストールすることもできます。手順は次のとおりです。
- プライベート IP 空間で実行中の Composer が外部の PyPI リポジトリと接続できるように Cloud NAT を構成します。
- 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.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
*.pkg.dev
|
pkg.dev. |
DNS 名: *.pkg.dev. リソース レコードのタイプ: CNAME 正規名: pkg.dev. |
リソース レコードのタイプ: A IPv4 アドレス: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
*.gcr.io
|
gcr.io. |
DNS 名: *.gcr.io. リソース レコードのタイプ: CNAME 正規名: gcr.io. |
リソース レコードのタイプ: A IPv4 アドレス: 199.36.153.4 、199.36.153.5 、199.36.153.6 、199.36.153.7
|
DNS ルールを作成するには:
新しい DNS ゾーンを作成し、このゾーンの DNS 名として DNS 名を使用します。
例:
pkg.dev.
CNAME レコードのレコードセットを追加します。
例:
- DNS 名:
*.pkg.dev.
- リソース レコードのタイプ:
CNAME
- 正規名:
pkg.dev.
- DNS 名:
レコードセットを追加する次のように置き換えます。レコード:
例:
- リソース レコードのタイプ:
A
- IPv4 アドレス:
199.36.153.4
、199.36.153.5
、199.36.153.6
、199.36.153.7
- リソース レコードのタイプ:
詳細については、Google API およびサービスへのプライベート接続を設定するをご覧ください。
ファイアウォール ルールを構成する
プロジェクトにデフォルト以外のファイアウォール ルールがある場合(暗黙のファイアウォール ルールをオーバーライドする、またはデフォルトのネットワークで事前入力ルールを変更するルールなど)、次のファイアウォール ルールが構成されていることを確認します。
たとえば、すべての下り(外向き)トラフィックを拒否するファイアウォール ルールがある場合、Cloud Composer で環境の作成に失敗することがあります。問題を回避するには、上記のリストに従って、グローバル deny
ルールよりも優先度が高い選択的な allow
ルールを定義します。
環境からのトラフィックを許可するように VPC ネットワークを構成します。
- VPC ネットワークのルールを確認、追加、更新する方法を学ぶには、ファイアウォール ルールの使用をご覧ください。
- 接続ツールを使用して、IP 範囲間の接続を検証します。
- ネットワーク タグを使用すると、アクセスをさらに制限できます。これらのタグは、環境を作成するときに設定できます。
説明 | 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、コントロール プレーンのアドレス範囲は、環境のクラスタの [クラスタ] ページで確認できます。
Google Cloud コンソールで [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[環境の設定] タブに移動します。
クラスタの詳細を表示のリンクをクリックします。
環境のウェブサーバーの IP 範囲は、[環境の構成] タブで確認できます。
環境のネットワーク ID は、[環境の構成] タブで確認できます。サブネットワークの IP 範囲を取得するには、[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
とも呼ばれ、サービスとホスト プロジェクトの環境コンポーネントを管理します。
制限事項
- すべての VPC Service Controls ネットワークの制約が 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 リポジトリへのアクセスは制限されます。PyPI モジュールをプライベート IP モードでインストールする方法を確認するには、Python 依存関係のインストールをご覧ください。