ハイブリッド ネットワークで Looker Cloud を接続する

1. はじめに

Looker(Google Cloud コア)を利用すると、Google Cloud コンソールから Looker インスタンスを簡単にプロビジョニング、構成、管理できます。インスタンス管理タスクの中には、コンソールから実行されるものもあります。

Looker(Google Cloud コア)インスタンスには、次の 3 つのネットワーク構成を利用できます。

  • パブリック: ネットワーク接続で、インターネットからアクセス可能な外部 IP アドレスを使用します。
  • プライベート: ネットワーク接続で、Google がホストする内部 Virtual Private Cloud(VPC)IP アドレスを使用します。
  • パブリックとプライベート: ネットワーク接続で、パブリック IP アドレスとプライベート IP アドレスの両方を使用します。この場合、受信トラフィックはパブリック IP 経由でルーティングされ、送信トラフィックはプライベート IP 経由でルーティングされます。

このチュートリアルでは、マルチクラウド接続とオンプレミス接続の要件を満たすために複製できる HA VPN を介したオンプレミス VPC への Looker 接続をサポートするために、包括的なエンドツーエンドのプライベート ネットワーク をデプロイします。

Looker(Google Cloud コア)では、次の条件を満たすインスタンスのプライベート IP がサポートされます。

作成するアプリの概要

このチュートリアルでは、マルチクラウドとオンプレミスへのハイブリッド接続が可能なスタンドアロン VPC で、包括的なプライベート Looker ネットワーク デプロイメントを構築します。

オンプレミス環境を表す on-prem-vpc という VPC ネットワークを設定します。このデプロイでは、on-prem-vpc は存在しません。代わりに、オンプレミスのデータセンターまたはクラウド プロバイダへのハイブリッド ネットワーキングが使用されます。

チュートリアルの主なステップは次のとおりです

  1. us-central1 にスタンドアロン VPC を作成する
  2. プライベート サービス アクセスに IP サブネットを割り当てる
  3. スタンドアロン VPC に Looker インスタンスをデプロイする
  4. on-prem-vpc とハイブリッド ネットワーキングを作成する
  5. BGP を介して Looker の IP 範囲をアドバタイズして検証する
  6. Looker と Postgresql のデータ通信を統合して検証する

Figure1

8436cc4802b670db.png

学習内容

  • VPC と関連するハイブリッド ネットワーキングの作成方法
  • スタンドアロン VPC に Looker をデプロイする方法
  • on-prem-vpc と関連するハイブリッド ネットワーキングを作成する方法
  • on-prem-vpc を HA VPN 経由で analytics-vps に接続する
  • ハイブリッド ネットワーキングで Looker サブネットをアドバタイズする方法
  • ハイブリッド ネットワーキング インフラストラクチャをモニタリングする方法
  • Postgresql データベースを Looker Cloud Core と統合する方法

必要なもの

  • Google Cloud プロジェクト

IAM 権限

2. 始める前に

プロジェクトを更新してチュートリアルをサポートする

このチュートリアルでは、Cloud Shell で gcloud 構成を実装するために $variables を使用します。

Cloud Shell で、次のコマンドを実行します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. VPC の設定

analytics-vpc を作成する

Cloud Shell で次の操作を行います。

gcloud compute networks create analytics-vpc --project=$projectid --subnet-mode=custom

on-prem-vpc を作成する

Cloud Shell で、次のコマンドを実行します。

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

Postgresql データベース サブネットを作成する

Cloud Shell で次の操作を行います。

gcloud compute networks subnets create database-subnet-us-central1 --project=$projectid --range=172.16.10.0/27 --network=on-prem-vpc --region=us-central1

Cloud Router と NAT の構成

このチュートリアルでは、データベース VM インスタンスに外部 IP アドレスがないため、ソフトウェア パッケージのインストールに Cloud NAT を使用します。

Cloud Shell で Cloud Router を作成します。

gcloud compute routers create on-prem-cr-us-central1-nat --network on-prem-vpc --region us-central1

Cloud Shell で NAT ゲートウェイを作成します。

gcloud compute routers nats create on-prem-nat-us-central1 --router=on-prem-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

データベースのテスト インスタンスを作成する

Looker への接続をテストして検証するために使用する postgres データベース インスタンスを作成します。

Cloud Shell 内でインスタンスを作成します。

gcloud compute instances create postgres-database \
    --project=$projectid \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --subnet=database-subnet-us-central1 \
    --no-address \
   --image=projects/ubuntu-os-cloud/global/images/ubuntu-2304-lunar-amd64-v20230621 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt -y install postgresql postgresql-client postgresql-contrib -y"

ファイアウォール ルールの作成

IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。

  • IAP を使用してアクセス可能にするすべての VM インスタンスに適用します。
  • IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可する。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。

Cloud Shell から

gcloud compute firewall-rules create on-prem-ssh \
    --network on-prem-vpc --allow tcp:22 --source-ranges=35.235.240.0/20

4. プライベート サービス アクセス

プライベート サービス アクセスは、VPC ネットワークと Google またはサードパーティが所有するネットワークとのプライベート接続です。Google またはサードパーティ(サービスを提供するエンティティ)は、サービス プロデューサーとも呼ばれます。Looker Cloud Core はサービス プロデューサーです。

プライベート接続を使用すると、VPC ネットワーク内の VM インスタンスとアクセスするサービスで、内部 IP アドレスを使用して排他的に通信できるようになります。

大まかに言うと、プライベート サービス アクセスを使用するには、VPC ネットワークで IP アドレス範囲(CIDR ブロック)を割り振り、サービス プロデューサーへのプライベート接続を作成する必要があります。

サービスの IP アドレス範囲を割り振る

プライベート接続を作成する前に、サービス プロデューサーの VPC ネットワークで使用する IPv4 アドレス範囲を割り振る必要があります。これにより、VPC ネットワークとサービス プロデューサーのネットワークの間で IP アドレスの衝突がなくなります。

VPC ネットワークに範囲を割り振ると、その範囲はサブネット(プライマリとセカンダリの範囲)とカスタム静的ルートの宛先には適用されません。

プライベート サービス アクセスでの IPv6 アドレス範囲の使用はサポートされていません。

Google Cloud コンソールでプロジェクトの Service Networking API を有効にします。API を有効にする際は、有効になっていることを確認するためにコンソール ページの更新が必要になる場合があります。

IP 割り振りを作成する

アドレス範囲とプレフィックス長(サブネット マスク)を指定するには、アドレスとプレフィックス長のフラグを使用します。たとえば、CIDR ブロック 192.168.0.0/22 を割り振るには、アドレスに 192.168.0.0 を指定し、プレフィックスの長さに 22 を指定します。

Cloud Shell で、Looker 用の IP 割り振りを作成します。

gcloud compute addresses create psa-range-looker \
    --global \
    --purpose=VPC_PEERING \
    --addresses=192.168.0.0 \
    --prefix-length=22 \
    --description="psa range for looker" \
    --network=analytics-vpc

Cloud Shell で、IP の割り当てを確認します。

gcloud compute addresses list --global --filter="purpose=VPC_PEERING"

例:

userl@cloudshell$ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
NAME: psa-range-looker
ADDRESS/RANGE: 192.168.0.0/22
TYPE: INTERNAL
PURPOSE: VPC_PEERING
NETWORK: analytics-vpc
REGION: 
SUBNET: 
STATUS: RESERVED

プライベート接続を作成する

割り振り範囲を作成したら、サービス プロデューサーである Looker Cloud Core へのプライベート接続を作成できます。Looker インスタンスが確立されると、プライベート接続により、VPC ネットワークとサービス プロデューサーのネットワークの間の VPC ネットワーク ピアリング接続が確立されます。

プライベート接続は、VPC ネットワークとサービス プロデューサーとの 1 対 1 の関係です。単一のサービス プロデューサーで複数のサービスを提供する場合でも、プロデューサーのすべてのサービスに対して必要なプライベート接続は 1 つのみです。

複数のサービス プロデューサーに接続する場合は、サービス プロデューサーごとに一意の割り当てを使用します。この方法は、ルートやファイアウォール ルールなどのネットワーク設定をサービス プロデューサーごとに管理するのに役立ちます。

Cloud Shell でプライベート接続を作成し、オペレーション名をメモします。

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc

例:

user@cloudshell$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

Cloud Shell 内で、オペレーションが成功したかどうかを確認します。OPERATION_NAME は、前のステップで生成した名前に置き換えます。

gcloud services vpc-peerings operations describe \
    --name=OPERATION_NAME

例:

user@cloudshell$ gcloud services vpc-peerings operations describe \
    --name=operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

5. Looker(Google Cloud コア)インスタンスを作成する

始める前に

Google Cloud コンソールで、プロジェクトに対して Looker API を有効にします。API を有効にする際は、有効になっていることを確認するためにコンソール ページの更新が必要になる場合があります。

インスタンスを認証してアクセスするための OAuth クライアントを設定します。

次のセクションでは、OAuth クライアント ID とシークレットを使用して Looker インスタンスを作成する必要があります。

承認済みの JavaScript 生成元とリダイレクト URI は必要ありません。

103601bca0b6ebe8.png

Cloud コンソール内で、提供されたスクリーンショットに基づいてインスタンスを作成します。

[LOOKER] → [インスタンスを作成] に移動します。

前に作成した OAuth クライアント ID とシークレットを入力します。

b780ed751824176c.png

3fe880e26a81a756.png

91acffd74c68a067.png

[作成] を選択します。

インスタンスの作成中は、コンソールの [インスタンス] ページにリダイレクトされます。新しいインスタンスのステータスを表示するには、ページの更新が必要になる場合があります。Google Cloud コンソールメニューの通知アイコンをクリックして、インスタンス作成アクティビティを確認することもできます。インスタンスの作成中は、Google Cloud コンソールメニューの通知アイコンが読み込みアイコンで囲まれています。

Looker インスタンスが作成されると、インスタンス URL が生成されます。URL をメモします。

5ac8a1b8b438dce6.png

6. OAuth 2.0 クライアント ID を更新する

次のセクションでは、インスタンス URL に /oauth2callback を追加して、前に作成した OAuth クライアント ID の承認済みのリダイレクト URI を更新する必要があります。

完了すると、インスタンス URL を使用して Looker UI にログインできるようになります。

Cloud コンソールで、[API とサービス] → [認証情報] に移動します。

Oauth 2.0 クライアント ID を選択し、インスタンス URL を更新します。例を次に示します。

793c5b82ec34fb1f.png

7. Looker アクセスを検証する

Cloud コンソールで Looker に移動し、Looker UI を開くインスタンスの URL を選択します。

9d132a67c532279e.png

起動すると、以下のスクリーンショットのようにランディング ページが表示されます。これにより、Looker Cloud Core へのアクセスを確認できます。

b77055fd674f8a69.png

8. ハイブリッド接続

次のセクションでは、Border Gateway Protocol(BGP)を使用して、Virtual Private Cloud(VPC)とピア ネットワーク間でルートを動的に交換できる Cloud Router を作成します。

Cloud Router は、Cloud VPN トンネルを介して BGP セッションを設定してネットワークを接続できます。新しいサブネット IP アドレス範囲を自動的に学習し、ピア ネットワークに通知します。

このチュートリアルでは、analytics-vpcon-prem-vpc の間に HA VPN をデプロイして、Looker へのプライベート接続について説明します。

analytics-vpc 用の HA VPN GW を作成する

各ゲートウェイが作成されると、ゲートウェイ インターフェースごとに 1 つずつ、自動的に 2 つの外部 IPv4 アドレスが割り振られます。これらの IP アドレスをメモして、後の構成手順で使用します。

Cloud Shell 内で HA VPN GW を作成する

gcloud compute vpn-gateways create analytics-vpn-gw \
   --network=analytics-vpc\
   --region=us-central1

on-prem-vpc の HA VPN GW を作成します。

各ゲートウェイが作成されると、2 つの外部 IPv4 アドレスが自動的に割り振られます(各ゲートウェイ インターフェースに 1 つ)。構成手順の後半で使用するため、これらの IP アドレスをメモしておきます。

Cloud Shell 内で、HA VPN GW を作成します。

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

HA VPN GW の作成を検証する

コンソールを使用して、[ハイブリッド接続]、[VPN]、[Cloud VPN ゲートウェイ] の順に移動します。

a3973b2bbb832bae.png

analytics-vpc 用の Cloud Router を作成する

Cloud Shell 内で、us-central1 に Cloud Router を作成する

gcloud compute routers create analytics-cr-us-central1 \
   --region=us-central1 \
   --network=analytics-vpc\
   --asn=65001

on-prem-vpc の Cloud Router を作成する

Cloud Shell で、us-central1 に配置する Cloud Router を作成します。

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

analytics-vpc 用の VPN トンネルを作成する

各 HA VPN ゲートウェイに 2 つの VPN トンネルを作成します。

VPN トンネル 0 を作成

Cloud Shell 内で、tunnel0 を作成します。

gcloud compute vpn-tunnels create analytics-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 0

VPN tunnel1 を作成する

Cloud Shell 内で、tunnel1 を作成します。

gcloud compute vpn-tunnels create analytics-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 1

on-prem-vpc 用の VPN トンネルを作成する

各 HA VPN ゲートウェイに 2 つの VPN トンネルを作成します。

VPN トンネル 0 を作成

Cloud Shell 内で、tunnel0 を作成します。

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

VPN tunnel1 を作成する

Cloud Shell で、tunnel1 を作成します。

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

VPN トンネルの作成を確認する

コンソールを使用して、[ハイブリッド接続]、[VPN]、[Cloud VPN トンネル] の順に移動します。

61c09b3d3102149d.png

9. BGP ネイバーを確立する

BGP セッションの作成

このセクションでは、Cloud Router のインターフェースと BGP ピアを構成します。

analytics-vpc の BGP インターフェースとピアリングを作成する

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel0 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel1 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

on-prem-vpc の BGP インターフェースとピアリングを作成する

Cloud Shell で、BGP インターフェースを作成します。

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-analytics-vpc \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

Cloud Shell で BGP ピアを作成します。

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel0 \
    --interface if-tunnel1-to-analytics-vpc \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

Cloud Shell で BGP インターフェースを作成します。

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-analytics-vpc \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

Cloud Shell で、BGP ピアを作成します。

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel1\
    --interface if-tunnel2-to-analytics-vpc \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

[ハイブリッド接続] > [VPN] に移動して、VPN トンネルの詳細を表示します。

ddd4a8f851d44fd6.png

HA VPN 経由で analytics-vpc の学習ルートを検証する

HA VPN トンネルと BGP セッションが確立されているため、on-prem-vpc のルートが analytics-vpc から学習されます。コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [analytics-vpc] → [ルート] → [リージョン] → [us-central1] → [表示] に移動します。

analytics-vpc が on-prem-vpc database-subnet-us-central1 172.16.10.0/27 からルートを学習したことを確認します。

57c7898390db4bcb.png

on-prem-vpc が HA VPN 経由でルートを学習していないことを確認する

analytics-vpc にサブネットがないため、Cloud Router は on-prem-vpc にサブネットをアドバタイズしません。コンソールを使用して、[VPC ネットワーク] > [VPC ネットワーク] > [on-prem-vpc] > [ルート] > [リージョン] > [us-central1] > [表示] に移動します。

5b007e46a7c7026.png

10. Looker サブネットをオンプレミスにアドバタイズします。

このサブネットは VPC ではなく PSA に割り当てられているため、Looker プライベート サービス アクセス(PSA)サブネットは、analytics-cr-us-central1 クラウド ルーターによって自動的にアドバタイズされません。

analytics-cr-central1 から PSA サブネット 192.168.0.0/22(psa-range-looker)のカスタムルート アドバタイズを作成する必要があります。このアドバタイズは、オンプレミス環境にアドバタイズされ、ワークロードが Looker にアクセスするために使用されます。

コンソールで、[HYBRID CONNECTIVITY] > [CLOUD ROUTERS] > [analytics-cr-us-central1] に移動し、[編集] を選択します。

[アドバタイズされたルート] セクションで [カスタムルートの作成] オプションを選択し、以下の例に基づいてフィールドを更新します。[完了] を選択し、[保存] をクリックします。

87f95ee3d1cd8521.png

11. on-prem-vpc が Looker サブネットを学習したことを確認します。

on-prem-vpc は、analytics-cr-us-central1 からカスタム ルート アドバタイズとしてアドバタイズされているため、Looker PSA サブネットにアクセスできるようになりました。

コンソールを使用して、[VPC ネットワーク] > [VPC ネットワーク] > [on-prem-vpc] > [ルート] > [リージョン] > [us-central1] > [表示] に移動します。

analytics-vpc からアドバタイズされた Looker ルートを確認します。

a987a76fd57ddedd.png

12. 現在の VPC ピアリングを検証する

Looker Cloud Core と analytics-vpc の間の接続は、BGP 経由で学習したカスタムルートの交換を可能にする VPC ピアリングを介して行われます。このチュートリアルでは、on-prem-vpc が学習したルートを analytics-vpc から Looker に公開する必要があります。この機能を有効にするには、VPC ピアリングを更新してカスタムルートをエクスポートする必要があります。

現在のインポート済みルートおよびエクスポート済みルートを検証します。

[VPC ネットワーク] → [VPC ネットワーク ピアリング] → [servicenetworking-googleapis-com] に移動します。

f6d9395712934cd8.png

以下のスクリーンショットは、Google マネージド ピアリング VPC ネットワーク(servicesnetworking)から psa-range-looker をインポートしている analytics-vpc の詳細です。

86a0e8c3534c6986.png

[EXPORTED ROUTES] を選択すると、ピアリングされた VPC ネットワークにルートがエクスポートされていないことが判明します。これは、1)サブネットが analytics-vpc で構成されていない、2)[Export custom routes] が選択されていないためです。

a52de427fa73fb22.png

13. VPC ピアリングを更新する

[VPC ネットワーク] → [VPC ネットワーク ピアリング] → [servicenetworking-googleapis-com] → [編集] に移動します。

[カスタムルートをエクスポート] → [保存] を選択します。

a2309e4c3a7cee80.png

14. 更新された VPC ピアリングを検証する

エクスポートされたルートを検証します。

[VPC ネットワーク] → [VPC ネットワーク ピアリング] → [servicenetworking-googleapis-com] に移動します。

[EXPORTED ROUTES] を選択すると、analytics-vpc によって on-prem-vpc ルートが(データベース サブネット 172.16.10.0/27)Looker をホストするピアリングされた VPC ネットワークにエクスポートされていることがわかります。

47e953268d78a469.png

15. Looker postgres データベースの作成

次のセクションでは、Cloud Shell を使用して postgres-database VM に SSH 接続します。

Cloud Shell 内で、postgres-database インスタンスへの SSH を実行します。**

 gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

OS 内で、postgres-database インスタンスの IP アドレス(ens4)を特定してメモします。

ip a

例:

user@postgres-database:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:ac:10:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 172.16.10.2/32 metric 100 scope global dynamic ens4
       valid_lft 84592sec preferred_lft 84592sec
    inet6 fe80::4001:acff:fe10:a02/64 scope link 
       valid_lft forever preferred_lft forever

OS 内で postgresql にログインします。

sudo -u postgres psql postgres

OS 内でパスワード プロンプトを入力します。

\password postgres

OS 内でパスワードを postgres に設定します(同じパスワードを 2 回入力します)。

postgres

例:

user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.

postgres=# \password postgres
Enter new password for user "postgres": 
Enter it again: 

OS 内で postgres を終了します。

\q

例:

postgres=# \q
user@postgres-database:~$ 

次のセクションでは、以下のスクリーンショットのように、postgres-database インスタンスの IP アドレスと Looker の限定公開の Google アクセス サブネット(192.168.0.0/22)を IPv4 ローカル接続の pg_hba.conf ファイルに挿入します。

178364a8ee9b6233.png

sudo nano /etc/postgresql/15/main/pg_hba.conf

次のセクションで、postgresql.conf のコメントを解除して、次のスクリーンショットのようにすべての「*」IP アドレスをリッスンするようにします。

sudo nano /etc/postgresql/15/main/postgresql.conf

プログラム開始前:

aad52092c0a9408.png

申し込みの後:

7e80b916d29e097c.png

OS 内で postgresql サービスを再起動します。

sudo service postgresql restart

OS 内で、postgresql のステータスがアクティブであることを確認します。

sudo service postgresql status

例:

OS 内で、postgresql のステータスがアクティブであることを確認します。

user@postgres-database$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Sat 2023-07-01 23:40:59 UTC; 7s ago
    Process: 4073 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4073 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Jul 01 23:40:59 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Jul 01 23:40:59 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

16. postgres データベースを作成する

次のセクションでは、Looker とオンプレミス間の接続を検証するために使用される postgres_looker という名前の postgres データベースとスキーマ looker_schema を作成します。

OS 内で postgres にログインします。

sudo -u postgres psql postgres

OS 内でデータベースを作成します。

create database postgres_looker;

OS 内でデータベースを一覧表示します。

\l

OS 内で、パスワード ルッカーを使用してユーザー ルッカーを作成します。

create user postgres_looker with password 'postgreslooker';

OS 内でデータベースに接続します。

\c postgres_looker;

OS 内でスキーマ looker-schema を作成し、Cloud Shell プロンプトを終了します。

create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit

例:

user@postgres-database$ sudo -u postgres psql postgres
psql (15.3 (Ubuntu 15.3-0ubuntu0.23.04.1))
Type "help" for help.

postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
                                                List of databases
      Name       |  Owner   | Encoding | Collate |  Ctype  | ICU Locale | Locale Provider |   Access privileges   
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
 postgres        | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 postgres_looker | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 template0       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
 template1       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
(4 rows)

postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
CREATE SCHEMA
postgres_looker=# create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
CREATE TABLE
postgres_looker=# exit

OS を終了して Cloud Shell に戻ります。

\q
exit

17. on-prem-vpc にファイアウォールを作成します。

次のセクションでは、Looker サブネットから postgres-database インスタンスへの通信を許可する、ロギング付きの Ingress ファイアウォールを作成します。

Cloud Shell で、on-prem-vpc ファイアウォールを作成します。

gcloud compute --project=$projectid firewall-rules create looker-access-to-postgres --direction=INGRESS --priority=1000 --network=on-prem-vpc --action=ALLOW --rules=all --source-ranges=192.168.0.0/22 --enable-logging

18. analytics-vpc で限定公開 DNS を作成する

Looker は Google が管理する VPC にデプロイされていますが、analytics-vpc プライベート DNS へのアクセスは、サービス ネットワーキングとのピアリングを介してサポートされています。

次のセクションでは、analytics-vpc に限定公開 DNS ゾーンを作成します。このゾーンは、postgres-database インスタンスの完全修飾ドメイン名(postgres.analytics.com) と IP アドレス、

Cloud Shell で、限定公開ゾーン analytics.com を作成します。

gcloud dns --project=$projectid managed-zones create gcp-private-zone --description="" --dns-name="analytics.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/analytics-vpc"

Cloud Shell で、postgres-database インスタンスの IP アドレスを特定します。

gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:

例:

user@cloudshell$ gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:
  networkIP: 172.16.10.2

Cloud Shell で A レコードを作成し、前に特定した IP アドレスを追加します。

gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="your-postgres-database-ip"

例:

user@cloudshell$ gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="172.16.10.2"
NAME: postgres.analytics.com.
TYPE: A
TTL: 300
DATA: 172.16.10.2

Cloud Shell から、dns-suffix analytics.com をサービス ネットワーキングにピアリングし、Looker が analytics-vpc 限定公開ゾーンにアクセスできるようにします。

gcloud services peered-dns-domains create looker-com --network=analytics-vpc --service=servicenetworking.googleapis.com --dns-suffix=analytics.com.

19. Looker と Postgres postgres-database を統合する

次のセクションでは、Cloud コンソールを使用して、オンプレミスの postgres-database インスタンスへのデータベース接続を作成します。

Cloud コンソールで Looker に移動し、Looker UI を開くインスタンスの URL を選択します。

9d132a67c532279e.png

起動すると、以下のスクリーンショットのようにランディング ページが表示されます。

b77055fd674f8a69.png

[管理] → [データベース] → [接続] → [接続を追加] を選択します。

以下のスクリーンショットに沿って接続の詳細を入力し、[接続] を選択します。

c8cca15252c2020d.png

接続が成功しました

3e51b7e2cc62fb45.png

20. Looker の接続を確認する

次のセクションでは、Looker の「test」アクションと TCPDUMP を使用して、on-prem-vpc の postgres-database に対する Looker の接続を検証する方法について説明します。

セッションがタイムアウトした場合は、Cloud Shell から postgres-database にログインします。

Cloud Shell で次の操作を行います。

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

OS から、psa-range-looker サブネット 192.168.0.0/22 を使用して TCPDUMP フィルタを作成する

sudo tcpdump -i any net 192.168.0.0/22 -nn

データ接続に移動します([管理] → [データベース] → [接続] → [選択] → [テスト])。

[テスト] を選択すると、以下のように Looker が postgres データベースに正常に接続します。

ef25b837b6a41fe.png

OS ターミナルに戻り、psc-range-looker がオンプレミスの postgres-database インスタンスに接続していることを TCPDUMP が識別したことを確認します。

PSA 範囲内の IP はすべて Looker に表示されることを伝える注記を追加します。

user@postgres-database$ sudo tcpdump -i any net 192.168.0.0/22 -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
00:16:55.121631 ens4  In  IP 192.168.1.24.46892 > 172.16.10.2.5432: Flags [S], seq 2221858189, win 42600, options [mss 1366,sackOK,TS val 4045928414 ecr 0,nop,wscale 7], length 0
00:16:55.121683 ens4  Out IP 172.16.10.2.5432 > 192.168.1.24.46892: Flags [S.], seq 1464964586, ack 2221858190, win 64768, options [mss 1420,sackOK,TS val 368503074 ecr 4045928414,nop,wscale 7], length 0

21. セキュリティに関する推奨事項

Looker と Postgres データベースの保護に関するセキュリティの推奨事項とベスト プラクティスは次のとおりです。。

  • 必要となる機能を実行可能な、最小権限のデータベース アカウント権限を Looker 用に設定する。
  • クライアントと Looker UI 間の転送中のデータと、Looker からデータベースへの転送中のデータは、TLS 1.2 以降を使用して暗号化されます。
  • 保存データはデフォルトで暗号化されます。また、Looker インスタンス(https://cloud.google.com/looker/docs/looker-core-cmek)と Postgres(https://cloud.google.com/sql/docs/postgres/configure-cmek)で CMEK を利用することもできます。
  • Looker アクセス制御 - Looker 管理者は、コンテンツ アクセス、データアクセス、機能アクセス権を付与することで、プリンシパルまたはユーザー グループが Looker で何を表示および実行できるかを制御できます。これらのオプションを使用すると、Looker 管理者はモデルや権限セットなどの特定のロール定義を行い、データに対するきめ細かいアクセス制御を作成できます。
  • Looker は監査ログとデータアクセス ログの両方をサポートしており、誰がいつどこで何をしたかを記録します。監査ログはデフォルトで有効になっていますが、データアクセス ログは明示的に有効にする必要があります。
  • 現在、VPC-SC は、プライベート IP のみで構成された Enterprise インスタンスと Embed インスタンスをサポートしています。

22. クリーンアップ

Looker Cloud Core インスタンスを削除します。次に移動します。

LOOKER → Looker-tutorial → 削除

e5a2e3af9e7ffd40.png

Cloud Shell で、チュートリアルのコンポーネントを削除します。

gcloud compute vpn-tunnels delete analytics-vpc-tunnel0 analytics-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete analytics-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet

gcloud compute routers delete analytics-cr-us-central1 on-prem-cr-us-central1 on-prem-cr-us-central1-nat --region=us-central1 --quiet

gcloud compute instances delete postgres-database --zone=us-central1-a --quiet

gcloud compute networks subnets delete database-subnet-us-central1 --region=us-central1 --quiet

gcloud compute firewall-rules delete looker-access-to-postgres on-prem-ssh --quiet

gcloud dns record-sets delete postgres.analytics.com. --type=A --zone=gcp-private-zone
        
gcloud dns managed-zones delete gcp-private-zone

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute addresses delete psa-range-looker --global --quiet

gcloud compute networks delete analytics-vpc --quiet

23. 完了

これで、ハイブリッド ネットワーキングを介した Looker 接続を構成して検証し、オンプレミス環境とマルチクラウド環境間でのデータ通信を可能にしました。

また、Lookers Connect の「Test」ツールと postgres-database インスタンスの TCPDUMP を使用して、Looker Cloud Core と postgres-database の接続を正常にテストできました。

コスモパップはチュートリアルを素晴らしいと思っています!!

e6d3675ca7c6911f.jpeg

関連情報と動画

リファレンス ドキュメント