Looker PSC サウスバウンド HTTPS インターネット NEG SMTP

1. はじめに

この Codelab では、内部 TCP プロキシ ロードバランサと、サービス コンシューマとして Looker PSC から呼び出される FQDN notifications-pa.googleapis.com を持つインターネット ネットワーク エンドポイント グループ(NEG)を使用して、Lookers SMTP サービスへの下り(南向き)接続を作成します。

Private Service Connect は Google Cloud ネットワーキング機能の一つで、コンシューマーが VPC ネットワーク内からマネージド サービスにプライベート接続でアクセスできるようにします。同様に、マネージド サービス プロデューサーがこれらのサービスを個別の VPC ネットワークにホストし、コンシューマーとのプライベート接続を提供できるようにします。たとえば、図 1 に示すように、Private Service Connect を使用して Looker にアクセスする場合、ユーザーがサービス コンシューマーで、Google がサービス プロデューサーです。

図 1.

145ea4672c3a3b14.png

サウスバウンド アクセス(リバース PSC とも呼ばれます)を使用すると、コンシューマーは公開サービスをプロデューサーとして作成し、Looker がオンプレミス、VPC 内のエンドポイント、マネージド サービスやインターネットにアクセスできるようにします。図 2 に示すように、サウスバウンド接続は、Looker PSC がデプロイされている場所に関係なく、任意のリージョンにデプロイできます。

図 2.

259493afd914f68b.png

学習内容

  • ネットワークの要件
  • Private Service Connect プロデューサー サービスを作成する
  • Looker で Private Service Connect エンドポイントを作成する
  • Looker の SMTP サービスへの接続を確立する

必要なもの

def88091b42bfe4d.png

2. 作成する内容

プロデューサー ネットワーク looker-psc-demo を確立し、Private Service Connect(PSC)を介してサービスとして公開される内部 TCP プロキシ ロードバランサとインターネット NEG をデプロイします。公開後、プロデューサー サービスへのアクセスを検証するために、次の操作を行います。

  • プロデューサーのサービス アタッチメントに関連付けられた PSC エンドポイントを Looker で作成する
  • Looker コンソールを使用して SMTP メール設定を作成する

3. ネットワークの要件

以下は、プロデューサー ネットワークのネットワーク要件の詳細です。この Codelab のコンシューマは Looker PSC インスタンスです。

コンポーネント

説明

VPC(looker-psc-demo)

カスタムモード VPC

PSC NAT サブネット

コンシューマ VPC ネットワークからのパケットは送信元 NAT(SNAT)を使用して変換され、元の送信元 IP アドレスが、プロデューサーの VPC ネットワーク内にある NAT サブネットからの送信元 IP アドレスに変換されます。

PSC 転送ルールのサブネット

リージョン内部 TCP プロキシ ロードバランサの IP アドレスの割り振りに使用されます。

PSC NEG サブネット

ネットワーク エンドポイント グループの IP アドレスの割り当てに使用

プロキシ専用サブネット

各ロードバランサのプロキシには内部 IP アドレスが割り当てられます。プロキシからバックエンド VM またはエンドポイントに送信されるパケットには、プロキシ専用サブネットからの送信元 IP アドレスが含まれています。

インターネット NEG

ロードバランサの外部バックエンドを定義するために使用されるリソース。エンドポイントには、Cloud VPN または Cloud Interconnect 経由以外でも接続できる必要があります。

バックエンド サービス

バックエンド サービスは、ロードバランサとバックエンド リソースのブリッジとして機能します。このチュートリアルでは、バックエンド サービスがインターネット NEG に関連付けられています。

Cloud Router

Cloud NAT は、コントロール プレーンの機能について Cloud Router に依存していますが、BGP セッション管理には依存していません。

Cloud NAT

リージョン インターネット NEG は、インターネット下り(外向き)に Cloud NAT を利用します。

4. Codelab トポロジ

a4eb7693cbdbdfd4.png

5. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell を起動する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。

55efc1aaa7a4d3ad.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

7ffe5cbb04455448.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。この Codelab での作業はすべて、ブラウザ内から実行できます。インストールは不要です。

6. 始める前に

API を有効にする

Cloud Shell で、プロジェクト ID が設定されていることを確認します。

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
echo $project
echo $region

必要なサービスをすべて有効にします。

gcloud services enable compute.googleapis.com

7. プロデューサー VPC ネットワークの作成

VPC ネットワーク

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

gcloud compute networks create looker-psc-demo --subnet-mode custom

サブネットを作成する

PSC サブネットは、ネットワーク アドレス変換のために PSC サービス アタッチメントに関連付けられます。

Cloud Shell で、PSC NAT サブネットを作成します。

gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT

Cloud Shell で、プロデューサー転送ルールのサブネットを作成します。

gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

Cloud Shell で、プロデューサーのリージョン プロキシ専用サブネットを作成します。

gcloud compute networks subnets create $region-proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=looker-psc-demo \
  --range=10.10.10.0/24

Public NAT ゲートウェイを作成する

NAT Gateway は、構成オプション –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB を使用して、リージョン内部 TCP プロキシ ロードバランサによってインターネット下り(外向き)に使用されるため、同じ NATGW は GCE / GKE のインターネット下り(外向き)をサポートしません。GCE / GKE のインターネット下り(外向き)トラフィック用に、–endpoint-types=ENDPOINT_TYPE_VM を使用して追加の NAT GW をデプロイします。

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

gcloud compute routers create looker-psc-demo-cloud-router --network looker-psc-demo --region $region

Cloud Shell で Cloud NAT ゲートウェイを作成し、TCP プロキシ ロードバランサのインターネット下り(外向き)を有効にします。

gcloud compute routers nats create looker-psc-demo-natgw \
  --router=looker-psc-demo-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxy-only-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

ロードバランサの IP アドレスを予約する

Cloud Shell で、ロードバランサの内部 IP アドレスを予約します。

gcloud compute addresses create internet-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

Cloud Shell で、予約済みの IP アドレスを表示します。

gcloud compute addresses describe internet-neg-lb-ip \
  --region=$region | grep -i address:

出力例:

user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

インターネット NEG を設定する

インターネット NEG を作成し、–network-endpoint-type を internet-fqdn-port(外部バックエンドに到達可能なホスト名とポート)に設定します。

Cloud Shell で、github.com に使用するインターネット NEG を作成します。

gcloud compute network-endpoint-groups create smtp-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=looker-psc-demo \
    --region=$region

Cloud Shell で、インターネット NEG smtp-internet-neg を FQDN notifications-pa.googleapis.com とポート 443 で更新します。

gcloud compute network-endpoint-groups update smtp-internet-neg \
    --add-endpoint="fqdn=notifications-pa.googleapis.com,port=443" \
    --region=$region

ネットワーク ファイアウォール ポリシーとファイアウォール ルールを作成する

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

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

次のファイアウォール ルールは、PSC NAT サブネット範囲からネットワーク内のすべてのインスタンスへのトラフィックを許可します。

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

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

8. プロデューサー サービスの作成

ロードバランサのコンポーネントを作成する

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

gcloud compute backend-services create producer-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=smtp-internet-neg --network-endpoint-group-region=$region --region=$region

Cloud Shell で、リクエストをバックエンド サービスに転送するターゲット TCP プロキシを作成します。

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=producer-backend-svc  \
      --region=$region

次の構文で、転送ルール(内部 TCP プロキシ ロードバランサ)を作成します。

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

gcloud compute forwarding-rules create producer-smtp-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=443

サービス アタッチメントを作成する

Cloud Shell で、サービス アタッチメント smtp-svc-attachment を作成します。

gcloud compute service-attachments create smtp-svc-attachment --region=$region --producer-forwarding-rule=producer-smtp-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

次に、Looker で PSC エンドポイントを構成するため、selfLink URI にリストされているサービス アタッチメントを取得してメモします。プロジェクトで始まるものはこれに該当します。

selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/github-svc-attachment-https

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

gcloud compute service-attachments describe smtp-svc-attachment --region=$region

例:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-10-04T14:56:50.409-07:00'
description: ''
enableProxyProtocol: false
fingerprint: KUPXTZjrGkw=
id: '8947818105173563981'
kind: compute#serviceAttachment
name: smtp-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '23100082169578472'
  low: '8947818105173563981'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-smtp-fr

Cloud コンソールで、次の場所に移動します。

ネットワーク サービス → Private Service Connect → 公開サービス

b847b5ee22e3582e.png

b9a7d46c8dea4476.png

9. Looker で PSC エンドポイント接続を確立する

次のセクションでは、Cloud Shell で 1 つのドメインの –psc-service-attachment フラグを使用して、プロデューサー サービス アタッチメントを Looker Core PSC に関連付けます。

Cloud Shell で、次のパラメータを環境に合わせて更新して psc アソシエーションを作成します。

  • INSTANCE_NAME: Looker(Google Cloud コア)インスタンスの名前。
  • DOMAIN_1: notifications-pa.googleapis.com
  • SERVICE_ATTACHMENT_1: サービス アタッチメントの説明時にキャプチャされた URI、smtp-svc-attachment
  • REGION: Looker(Google Cloud コア)インスタンスがホストされるリージョン。

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

gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

例:

gcloud looker instances update looker-psc-instance \
--psc-service-attachment  domain=notifications-pa.googleapis.com,attachment=projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment \
--region=$region

Cloud Shell で、serviceAttachments の connectionStatus が「ACCEPTED」であることを確認して、Looker PSC INSTANCE_NAME で更新します。

gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json

例:

gcloud looker instances describe looker-psc-instance --region=$region --format=json

例:

{
...........................
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "notifications-pa.googleapis.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-10-04T22:02:31.445761128Z"
}

Cloud コンソールで PSC エンドポイントを検証する

Cloud コンソールで PSC 接続を検証できます

Cloud コンソールで、次の場所に移動します。

Looker → Looker インスタンス → 詳細

2d4684d722d31e4b.png

a7593db722f86642.png

10. SMTP 接続をテストする

次の手順では、Looker コンソールを使用して SMTP テストおよびレポート

テストメール

Looker は、デフォルトの SMTP サーバー notifications-pa.googleapis.com を使用してメールを送信します。この場合、追加の手順は必要ありません。通知に別の SMTP サーバーを使用する場合は、カスタム SMTP 構成のセクションをご覧ください。

Looker コンソールを開き、以下に移動します。

[管理] → [プラットフォーム] → [SMTP] → [テストメールを送信] を選択します。

aacb31e399cec9b7.png

Looker から取得したテストメールは次のとおりです。

ff75669fb6993d58.png

生成されたレポートのメール

次のページに移動します。

[Explore] → [System Activity] → [API Usage] → [API Query Type] → [Run]

788f6d6d08f5f055.png

出力例:

cebecdf5f2e968d1.png

結果をメールに送信するには、歯車アイコン

c6ddb0b234b58ed4.png

[送信] を選択すると、新しいウィンドウが開きます。

15b45c5c1bc1b09b.png

メールアドレスを入力して [送信] を選択します。

86970bb94247ed62.png

Looker から取得したテストメールは次のとおりです。

c925c8917f8078b3.png

11. カスタム SMTP 構成

このチュートリアルでは、Looker SMTP サーバーを使用して、FQDN の notifications-pa.googleapis.com とインターネット下り(外向き)を実行する Cloud NAT を介してメール通知を送信します。独自の SMTP サーバーを使用するには、次の変更を加えて新しいサービス アタッチメントを作成します。

インターネット NEG を SMTP サーバー FQDN で更新します。

gcloud compute network-endpoint-groups update smtp-internet-neg \
    --add-endpoint="fqdn=<your SMTP FQDN>,port=443" \
    --region=$region

Looker PSC インスタンスを更新するときに SMTP ドメインを指定します。

  • INSTANCE_NAME: Looker(Google Cloud コア)インスタンスの名前。
  • DOMAIN_1: <SMTP サーバーの FQDN>
  • SERVICE_ATTACHMENT_1: サービス アタッチメント(smtp-svc-attachment)の説明時にキャプチャされた URI
  • REGION: Looker(Google Cloud コア)インスタンスがホストされているリージョン。
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

別のメールサービスを使用するには、[カスタムメール設定を使用] を選択します。

a3fe7a0b66c80402.png

12. クリーンアップ

単一の Cloud Shell ターミナルからラボのコンポーネントを削除する

gcloud compute service-attachments delete smtp-svc-attachment --region=$region -q

gcloud compute forwarding-rules delete producer-smtp-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete producer-backend-svc --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete looker-psc-demo-natgw --router=looker-psc-demo-cloud-router --router-region=$region -q

gcloud compute routers delete looker-psc-demo-cloud-router --region=$region -q

gcloud compute network-endpoint-groups delete smtp-internet-neg --region=$region -q

gcloud compute addresses delete internet-neg-lb-ip --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q

gcloud compute networks delete looker-psc-demo -q

13. 完了

これで、Private Service Connect を利用した Looker コンソールを使用した Looker SMTP サービスへの接続の構成と検証が完了しました。

プロデューサー インフラストラクチャを作成し、プロデューサー サービスへの接続を許可するインターネット NEG、プロデューサー サービス、Looker PSC エンドポイントの作成方法を学習しました。

Cosmopup は Codelab を素晴らしいと思っています!

c911c127bffdee57.jpeg

次のステップ

以下の Codelab をご覧ください。

参考資料と動画

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