📚

Cloud Dataflow を VPC Service Controls内のサービスにアクセスさせる

2024/07/12に公開

イントロダクション

データ分析基盤を構築する際、VPC Service Controls内のGCPのサービスにデータを投入したいという場合があると思います。例えば、BigQueryがVPC Service Controls内にある場合などですね。投入元はいくつか考えられますが、今回はCloud Dataflowを想定して書いていきたいと思います。

VPC Service Controlsとは

仮想的な境界線をひいて、境界線外からはプロジェクト内にある VPC やGCPのサービスにアクセスできないようにしてくれます。

https://cloud.google.com/vpc-service-controls/docs/overview

選択肢

Cloud DataflowをVPC Service Controls 内のプロジェクトにアクセスさせるためには、以下2つの選択肢が存在します。

  1. 特定のサービスアカウントでアクセスを許可させる
  2. 境界ブリッジでプロジェクトごと接続させる

https://cloud.google.com/vpc-service-controls/docs/use-access-levels
https://cloud.google.com/vpc-service-controls/docs/share-across-perimeters

今回は、特定のサービスアカウントを使用する場合の方法を書いていきたいと思います。

特定のサービスアカウントでアクセスを許可させる

Cloud Dataflowを実行する際は、サービスアカウントが必要になります。
デフォルトでは、 Compute Engine のデフォルト サービス アカウントを使用することになっています。
この場合、「Compute Engine のデフォルト サービス アカウント」にアクセスレベルを設定してあげることでVPC Service Control内へのアクセスを許可することが可能です。

アクセスレベル

アクセスするための条件をコレクションで設定できるもので、Access Context Managerで設定することができます。そして作成したAccess Context Managerのアクセスレベルを使用してVPC Service Controls を設定すれば、VPC Service Controls の外からでもGCPのサービスにアクセスできるようになります。
諸々の説明は下記記事がわかりやすいので、ぜひ読んでみてください!
GCP を利用したセキュリティ要件対応 : VPC Service Controls を試してみた (その 1 : 概念の確認)
「BigQuery IP 制限」でこの記事にたどり着いた方、この記事はあなたのための記事です :)medium.com

設定を反映する

特定のサービスアカウントの場合は、以下で書かれている通り、yamlファイルを作成して設定する必要があります。
作成したyamlファイルを使って、gcloudコマンドを打てば、VPC Service Controls内へのアクセス許可の設定はokです。

...
- members:
    - serviceAccount:Compute Engine のデフォルト サービス アカウント名
Creating a basic access level | Access Context Manager | Google Cloud
"type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id"…cloud.google.com
...

仮にVPC Service Controls 内のBigQueryにアクセスするなら、Compute Engine のデフォルト サービス アカウントにBigQueryの事前定義ロール(BigQuery データ編集者、BigQuery ジョブユーザー)をバインディングしてあげれば完了です。

Discussion