1. はじめに
Looker(Google Cloud コア)を利用すると、Google Cloud コンソールから Looker インスタンスを簡単にプロビジョニング、構成、管理できます。インスタンス管理タスクの中には、コンソールから実行されるものもあります。
Looker(Google Cloud コア)インスタンスには、次の 3 つのネットワーク構成を利用できます。
- パブリック: ネットワーク接続で、インターネットからアクセス可能な外部 IP アドレスを使用します。
- プライベート: ネットワーク接続で、Google がホストする内部 Virtual Private Cloud(VPC)IP アドレスを使用します。
- パブリックとプライベート: ネットワーク接続で、パブリック IP アドレスとプライベート IP アドレスの両方を使用します。この場合、受信トラフィックはパブリック IP 経由でルーティングされ、送信トラフィックはプライベート IP 経由でルーティングされます。
このチュートリアルでは、Looker のオンプレミス VPC への接続を HA VPN 経由でサポートする包括的なエンドツーエンドのプライベート ネットワーク をデプロイします。このネットワークは、マルチクラウドとオンプレミスの接続の要件を満たすように複製できます。
Looker(Google Cloud コア)は、次の条件を満たすインスタンスのプライベート IP をサポートしています。
- インスタンスのエディションは、Enterprise または Embed にする必要があります。
作成するアプリの概要
このチュートリアルでは、マルチクラウドとオンプレミスへのハイブリッド接続を備えたスタンドアロン VPC に、包括的なプライベート Looker ネットワークのデプロイを構築します。
オンプレミス環境を表す on-prem-vpc という VPC ネットワークを設定します。このデプロイでは、on-prem-vpc は存在しません。代わりに、オンプレミス データセンターまたはクラウド プロバイダへのハイブリッド ネットワーキングが使用されます。
チュートリアルの主な手順は次のとおりです。
- us-central1 にスタンドアロン VPC を作成する
- IP サブネットをプライベート サービス アクセスに割り当てる
- スタンドアロン VPC に Looker インスタンスをデプロイする
- on-prem-vpc とハイブリッド ネットワーキングを作成する
- BGP 経由で Looker IP 範囲をアドバタイズして検証する
- Looker と Postgresql のデータ通信を統合して検証する
Figure1

学習内容
- VPC と関連するハイブリッド ネットワーキングを作成する方法
- スタンドアロン VPC に Looker をデプロイする方法
- on-prem-vpc と関連するハイブリッド ネットワーキングを作成する方法
- HA VPN 経由で on-prem-vpc を analytics-vps に接続する
- ハイブリッド ネットワーキングで Looker サブネットをアドバタイズする方法
- ハイブリッド ネットワーキング インフラストラクチャをモニタリングする方法
- Postgresql データベースを Looker Cloud Core と統合する方法
必要なもの
- Google Cloud プロジェクト
IAM 権限
2. 始める前に
チュートリアルをサポートするようにプロジェクトを更新する
このチュートリアルでは、$variables を使用して、Cloud Shell での gcloud 構成の実装を支援します。
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-database インスタンスを作成します。
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 割り振りを作成する
アドレス範囲と接頭辞長(サブネット マスク)を指定するには、addresses フラグと prefix-length フラグを使用します。たとえば、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 は必須ではありません。

Cloud Console で、提供されたスクリーンショットに基づいてインスタンスを作成します。
[LOOKER] → [インスタンスを作成] に移動します。
前に作成した OAuth クライアント ID とシークレットを入力します。



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

6. OAuth 2.0 クライアント ID を更新する
次のセクションでは、インスタンス URL に /oauth2callback を追加して、以前に作成した OAuth クライアント ID の承認済みのリダイレクト URI を更新する必要があります。
完了したら、インスタンス URL を使用して Looker UI にログインできます。
Cloud Console で、[API とサービス] → [認証情報] に移動します。
OAuth 2.0 クライアント ID を選択し、インスタンス URL を更新します(次の例を参照)。

7. Looker へのアクセスを検証する
Cloud Console で Looker に移動し、Looker UI を開くインスタンス URL を選択します。

起動すると、次のスクリーンショットのようなランディング ページが表示され、Looker Cloud Core へのアクセスが確認されます。

8. ハイブリッド接続
次のセクションでは、Border Gateway Protocol(BGP)を使用して、Virtual Private Cloud(VPC)とピア ネットワーク間でルートを動的に交換できる Cloud Router を作成します。
Cloud Router は、Cloud VPN トンネル経由で BGP セッションを設定してネットワークを接続できます。新しいサブネット IP アドレス範囲を自動的に学習し、ピア ネットワークに通知します。
このチュートリアルでは、Looker へのプライベート接続を示すために、analytics-vpc と on-prem-vpc の間に HA VPN をデプロイします。
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 を作成する
各ゲートウェイが作成されると、ゲートウェイ インターフェースごとに 1 つずつ、自動的に 2 つの外部 IPv4 アドレスが割り振られます。これらの 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 ゲートウェイ] に移動します。

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 トンネル 1 を作成する
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 トンネル 1 を作成する
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 トンネル] に移動します。

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 トンネルの詳細を表示します。

analytics-vpc が HA VPN 経由で学習したルートを検証する
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 からルートを学習したことを確認する

on-prem-vpc が HA VPN 経由でルートを学習していないことを確認する
analytics-vpc にはサブネットがないため、Cloud Router はサブネットを on-prem-vpc にアドバタイズしません。コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [on-prem-vpc] → [ルート] → [リージョン] → [us-central1] → [表示] に移動します。

10. Looker サブネットをオンプレミスにアドバタイズする
Looker プライベート サービス アクセス(PSA)サブネットは、サブネットが VPC ではなく PSA に割り当てられているため、analytics-cr-us-central1 Cloud Router によって自動的にアドバタイズされません。
オンプレミス環境にアドバタイズされ、ワークロードが Looker にアクセスするために使用される PSA サブネット 192.168.0.0/22(psa-range-looker)の analytics-cr-central1 からカスタムルート アドバタイズを作成する必要があります。
コンソールで [ハイブリッド接続] → [クラウド ルーター] → [analytics-cr-us-central1] に移動し、[編集] を選択します。
[アドバタイズされたルート] セクションで、[カスタムルートの作成] オプションを選択し、次の例に基づいてフィールドを更新して、[完了] を選択し、[保存] をクリックします。

11. on-prem-vpc が Looker サブネットを学習したことを確認する
on-prem-vpc は、analytics-cr-us-central1 からカスタム ルート アドバタイズとしてアドバタイズされているため、Looker PSA サブネットにアクセスできるようになります。
コンソールを使用して、[VPC ネットワーク] → [VPC ネットワーク] → [on-prem-vpc] → [ルート] → [リージョン] → [us-central1] → [表示] に移動します。
analytics-vpc からアドバタイズされた Looker ルートを確認します。

12. 現在の VPC ピアリングを検証する
Looker Cloud Core と analytics-vpc の間の接続は、BGP を介して学習したカスタムルートの交換を可能にする VPC ピアリングを介して行われます。このチュートリアルでは、analytics-vpc が on-prem-vpc で学習したルートを Looker に公開する必要があります。この機能を有効にするには、VPC ピアリングでカスタムルートをエクスポートするための更新が必要です。
現在インポートおよびエクスポートされているルートを検証します。
[VPC ネットワーク] → [VPC ネットワーク ピアリング] → [servicenetworking-googleapis-com] に移動します。

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

[EXPORTED ROUTES] を選択すると、ピアリングされた VPC ネットワークにエクスポートされたルートがないことがわかります。これは、1)サブネットが analytics-vpc で構成されていない、2)[カスタムルートのエクスポート] が選択されていないためです。

13. VPC ピアリングを更新する
[VPC ネットワーク] → [VPC ネットワーク ピアリング] → [servicenetworking-googleapis-com] → [編集] に移動します。
[カスタムルートをエクスポート → 保存] を選択します。

14. 更新された VPC ピアリングを検証する
エクスポートされたルートを検証します。
[VPC ネットワーク] → [VPC ネットワーク ピアリング] → [servicenetworking-googleapis-com] に移動します。
[EXPORTED ROUTES] を選択すると、オンプレミス VPC ルート(データベース サブネット 172.16.10.0/27)が analytics-vpc によって Looker をホストするピアリングされた VPC ネットワーキングにエクスポートされていることがわかります。

15. Looker postgres-database の作成
次のセクションでは、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)を pg_hba.conf ファイルの IPv4 ローカル接続の下に挿入します。

sudo nano /etc/postgresql/15/main/pg_hba.conf
次のセクションで、次のスクリーンショットのように、すべての「*」IP アドレスをリッスンするように postgresql.conf のコメントを解除します。
sudo nano /etc/postgresql/15/main/postgresql.conf
テスト前:

テスト後:

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 内で、パスワード looker を使用してユーザー looker を作成します。
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 インスタンスと通信できるようにするロギング付きの上り(内向き)ファイアウォールを作成します。
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 へのアクセスは、サービス ネットワーキングとのピアリングによってサポートされます。
次のセクションでは、postgres-database インスタンスの完全修飾ドメイン名(postgres.analytics.com))と IP アドレスの A レコードで構成される限定公開 DNS ゾーンを analytics-vpc に作成します。
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 Console を使用して、オンプレミスの postgres-database インスタンスへのデータベース接続を作成します。
Cloud Console で Looker に移動し、Looker UI を開くインスタンス URL を選択します。

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

[ADMIN] → [DATABASE] → [CONNECTIONS] に移動し、[ADD CONNECTION] を選択します。
以下のスクリーンショットに従って接続の詳細を入力し、[接続] を選択します。

接続が成功しました

20. Looker の接続を検証する
次のセクションでは、Looker の「test」アクションと TCPDUMP を使用して、オンプレミス 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-database に正常に接続されます。

OS ターミナルに戻り、TCPDUMP が psc-range-looker がオンプレミスの postgres-database インスタンスに接続していることを特定したことを検証します。
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 → 削除

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 接続を構成して検証し、オンプレミス環境とマルチクラウド環境間のデータ通信を有効にしました。
また、Looker の Connect の [Test] ツールと postgres-database インスタンスの TCPDUMP を使用して、Looker Cloud Core と postgres-database の接続を正常にテストすることもできました。
Cosmopup はチュートリアルが大好きです。
