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 について
- すべての 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 リポジトリへのアクセスは制限されます。詳細については、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 をデプロイするには、次の手順が必要です。
プロジェクトに対して 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 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 をシークレットのバックエンドとして使用している場合。
プライベート IP を有効にして、新しい Cloud Composer 環境を作成します。環境の作成時に、この設定を構成する必要があります。
バージョン composer-1.10.4 以降を使用します。
DAG のシリアル化が有効になっていることを確認します。環境で Cloud Composer バージョン 1.15.0 以降を使用している場合、シリアル化はデフォルトで有効になっています。
環境の作成時には、必ず Airflow ウェブサーバーへのアクセスを構成してください。保護を強化するには、特定の IP 範囲からのウェブサーバーへのアクセスのみを許可します。詳細については、ウェブサーバーのネットワーク アクセスを構成するをご覧ください。
既存の環境を境界に追加する
- 前のセクションで説明したように、境界をすでに作成または構成している。
- 環境でプライベート IP を使用している。
- 環境で DAG のシリアル化が有効になっています。
VPC Service Controls に PyPI パッケージをインストールする
デフォルトの VPC Service Controls 構成では、Cloud Composer は、VPC ネットワークの内部 IP アドレス空間から到達可能なプライベート リポジトリからの PyPI パッケージのインストールのみをサポートしています。
プライベート リポジトリからインストールする
推奨の手順は、プライベート PyPI リポジトリを設定し、組織で使用する信頼できるパッケージを導入してから、プライベート リポジトリから Python 依存関係をインストールするように Cloud Composer を構成することです。
パブリック リポジトリからインストールする
リモート リポジトリ
これは、パブリック リポジトリからパッケージをインストールする場合に推奨される方法です。
プライベート IP 空間外のリポジトリから PyPI パッケージをインストールする手順は次のとおりです。
- Artifact Registry リモート リポジトリを作成します。
- このリポジトリにアップストリーム ソースへのアクセス権を付与します。
- Artifact Registry リポジトリからパッケージをインストールするように Airflow を構成します。
外部接続
プライベート IP 空間外のリポジトリから PyPI パッケージをインストールする手順は次のとおりです。
プライベート IP 空間で実行中の Cloud Composer が外部の PyPI リポジトリと接続できるように Cloud NAT を構成します。
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.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 範囲間の接続性を検証します。
- ネットワーク タグを使用して、アクセスをさらに制限できます。これらのタグは、環境を作成するときに設定できます。
説明 | 方向 | アクション | 送信元または宛先 | プロトコル | ポート |
---|---|---|---|---|---|
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 サービス エージェント サービス アカウント)は、サービス プロジェクトとホスト プロジェクトの環境コンポーネントを管理します。