🌐

VPC Service ControlsによるIPアドレス制限 & GA4からのBigQueryアクセス許可

2024/03/24に公開

はじめに

データ・エージェンシー高橋です。

この記事では、Google CloudのBigQueryへのアクセスにIPアドレス制限を設けたうえで、Google アナリティクス 4(以下GA4)からBigQueryへのデータのエクスポートを許可する方法をご紹介します。

前提

Google Cloudのセキュリティを考える際に、最初に思い浮かぶのはIdentity and Access Management(以下IAM)の利用かもしれません。これに加えて、アクセス元のIPアドレスやサービスアカウントに制限を設けてセキュリティの向上を図るのが、今回ご紹介するVPC Service Controlsです。

クラウドサービスを利用する際には、対策を多層で考えて、複数の方法を組み合わせるのがセキュリティ対策の基本になります。

なお、VPC Service Controlsの公式ドキュメントは以下をご参照ください。

用語

  • VPC Service Controls
    サービス境界を用いてエリアを分け、サービス境界を超える通信を制御するセキュリティ機能です。

  • サービス境界
    デフォルトではサービス境界を超える通信(内→外、外→内)は拒否されます。

  • Access Context Manager
    IPアドレスや地域などを指定し、通信を許可するアクセス元を指定する機能です。

  • アクセスレベル
    Access Context Managerによって作成する設定を指します。

  • アクセス ポリシー
    VPC Service Controlsを利用する際に、最初に作成が必要なメタ的なリソースです。

検証

今回の検証で目指す最終的な構成図は以下のとおりです。

検証にはWindows環境を利用して以下の手順で進めました。

  1. VPC Service Controlsによるサービス境界作成前のアクセス状況を確認する
  2. アクセスポリシーを作成する
  3. VPC Service Controlsを利用してサービス境界を作成する
  4. サービス境界を超える通信が拒否されることを確認する
  5. Access Context Managerを利用してアクセスレベルを作成する
  6. サービス境界を超える通信のうち必要なものが拒否されないことを確認する

最終的に、GA4からBigQueryへのデータのエクスポートの際のアクセスと、Google Cloud コンソール(以下コンソール)への管理者のアクセスが許可され、それ以外のアクセスが拒否されることがゴールです。

なお、今回の検証ではVPC Service Controlsの動作を確認することが目的のため、以下についてはスコープ外としており、すでに適切に設定されているものとしています。

  • GA4からBigQueryへのストリーミングによるリンク設定
  • Google Cloud SDKの導入
  • IAMの設定

1. VPC Service Controlsによるサービス境界作成前のアクセス状況を確認する

この時点での構成図は以下のとおりです。

以下の順に確認します。

  • 管理者と仮定した接続環境から
    • コンソールからBigQueryへのアクセス可否を確認
    • GA4からBigQueryへのデータのエクスポート可否を確認
    • コマンドプロンプトからbqコマンドによるBigQueryへのアクセス可否を確認

サービス境界の作成前は、コンソールからBigQueryへ問題なくアクセスできます。

GA4からBigQueryへエクスポートしたデータが保存されるテーブルに、直近のデータが入っていることも確認できます。

コマンドプロンプトからもbqコマンドでBigQueryへアクセスできます。

同様に以下の順に確認します。

  • 部外者と仮定した接続環境から(管理者と仮定した接続環境とは別のIPアドレスから)
    • コンソールからBigQueryへのアクセス可否を確認
    • コマンドプロンプトからbqコマンドによるBigQueryへのアクセス可否を確認

画像は省略しますが、こちらの環境からも同様にBigQueryへアクセスできます。

2. アクセスポリシーを作成する

コンソール上部の [ リソースを選択 ] にて個別のプロジェクトではなく、組織を選択します。

コンソール左側のナビゲーションメニューに [ セキュリティ ] を表示したのち、[ VPC Service Controls ] を選択します。

[ ポリシーを管理する ] から進み、ポリシーを作成します。このとき、「ポリシーに含めるリソースを選択の選択」は未選択のままとします。[ プリンシパルの管理 ] には自分のユーザーアカウントを追加し、[ ロール ] は [ Access Context Manager Admin ] とします。

最後に [ アクセス ポリシーを作成 ] をクリックします。これでアクセスポリシーが作成されましたが、この時点ではアクセス状況に変化はありません。

3. VPC Service Controlsを利用してサービス境界を作成する

引き続き [ VPC Service Controls ] にて設定します。 [ 新しい境界 ] から進み、サービス境界を作成します。

[ 詳細 ] にて [ 境界のタイトル ] を適宜入力します。[ 境界のタイプ ] はデフォルトのままとします。

[ 保護するリソース ] にて対象のプロジェクトを指定します。

[ 制限付きサービス ] にて [ BigQuery API ] を追加します。

その他はデフォルトのまま [ 境界を作成 ] をクリックします。これでサービス境界が作成されました。

4. サービス境界を超える通信が拒否されることを確認する

この時点での構成図は以下のとおりです。

以下の順に確認します。

  • 管理者と仮定した接続環境から
    • コンソールからBigQueryへのアクセス可否を確認
    • GA4からBigQueryへのデータのエクスポート可否を確認
    • コマンドプロンプトからbqコマンドによるBigQueryへのアクセス可否を確認

この時点では全てのIPアドレスが拒否されているため、BigQueryへアクセスできずデータセットは表示されません。

ログエクスプローラでログの詳細を表示すると、上記のアクセスが拒否されていることが確認できます。また、GA4からBigQueryへのデータのエクスポートが実行されていれば、それも拒否されていることが確認できます。

コマンドプロンプトからのbqコマンドでのBigQueryへのアクセスも拒否されます。

同様に以下の順に確認します。

  • 部外者と仮定した接続環境から(管理者と仮定した接続環境とは別のIPアドレスから)
    • コンソールからBigQueryへのアクセス可否を確認
    • コマンドプロンプトからbqコマンドによるBigQueryへのアクセス可否を確認

画像は省略しますが、こちらの環境からも同様にBigQueryへのアクセスが拒否されます。

5. Access Context Managerを利用してアクセスレベルを作成する

[ Access Context Manager ] を表示して、[ アクセスレベルを作成 ] をクリックします。

[ アクセスレベルのタイトル ] を適宜入力し、[ IPサブネットワーク] に管理者と仮定した接続環境のアクセス元IPアドレスを入力します。利用しているインターネットサービスプロバイダーなどによってはIPv4ではなくIPv6でアクセスしている場合もありますのでご注意ください。

その他はデフォルトのまま [ 保存] をクリックします。これでアクセスレベルが作成されましたが、まだサービス境界とは関連づけられていない状態です。

引き続き [ VPC Service Controls ] をクリックして編集します。 先ほど作成したサービス境界をクリックし、[ 境界を編集 ] をクリックして編集画面を表示します。

[ 上り(内向き)ポリシー ] にて [ ルール1 ] を設定します。
[ ID ] は [ 任意のID ] を選択します。
[ ソース ] は [ アクセスレベル ] を選択し、先ほど作成したアクセスレベルを指定します。
[ プロジェクト ] は [ All projects ] を選択します。
[ サービス ] は [ All services ] を選択します。

この設定で管理者と仮定した接続環境からのアクセスは許可されますが、GA4からBigQueryへのデータのエクスポートは拒否されたままです。

GA4からのアクセスではアクセス元のIPアドレスがログに表示されず不明なため、GA4が利用しているサービスアカウントを許可する設定を行います。

[ ADD RULE ] をクリックして [ ルール2 ] を設定します。
[ ID ] は [ 選択したID ] を選択し、[ firebase-measurement@system.gserviceaccount.com ] を入力します。
[ ソース ] は [ 全てのソース ] を選択します。
[ プロジェクト ] は [ All projects ] を選択します。
[ サービス ] は [ All services ] を選択します。

ここまでに作成した [ ルール1 ] と [ ルール2 ] はOR条件として適用されます。

最後に [ 保存 ] をクリックします。これで設定は完了です。なお、設定反映まで数分かかる場合があります。

6. サービス境界を超える通信のうち必要なものが拒否されないことを確認する

この時点での構成図は以下のとおりです。

以下の順に確認します。

  • 管理者と仮定した接続環境から
    • コンソールからBigQueryへのアクセス可否を確認
    • GA4からBigQueryへのデータのエクスポート可否を確認
    • コマンドプロンプトからbqコマンドによるBigQueryへのアクセス可否を確認

コンソールからBigQueryへ問題なくアクセスできます。

GA4からBigQueryへエクスポートしたデータが保存されるテーブルに、直近のデータが入っていることも確認できます。

コマンドプロンプトからもbqコマンドでBigQueryへアクセスできます。

同様に以下の順に確認します。

  • 部外者と仮定した接続環境から(管理者と仮定した接続環境とは別のIPアドレスから)
    • コンソールからBigQueryへのアクセス可否を確認
    • コマンドプロンプトからbqコマンドによるBigQueryへのアクセス可否を確認

画像は省略しますが、こちらの環境のIPアドレスを許可していないため、BigQueryへのアクセスは拒否されたままです。

まとめ

以上の設定により、GA4からBigQueryへのデータのエクスポートの際のアクセスと、Google Cloud コンソールへの管理者のアクセスが許可され、それ以外のアクセスが拒否される状況を実現できました。

なお、今回検証したBigQueryはVPC Service Controlsでサポートされていますが、一部のサービスはサポートされていませんので注意が必要です。

詳しくは以下をご参照ください。

株式会社データ・エージェンシー

弊社では、エンジニア経験を活かしてデータエンジニアリングにチャレンジしたい方を募集しています。採用情報や社員インタビューについては以下をご参照ください!

dataAgency Tech Blog

Discussion