1. はじめに
プライベート接続に限定公開サービス アクセスを使用する Looker(Google Cloud コア)インスタンスのみが、プライベート IP とパブリック IP の構成をサポートしています。
プライベート IP(限定公開サービス アクセス)接続とパブリック IP 接続の両方を持つ Looker(Google Cloud コア)インスタンスにはパブリック URL があり、受信トラフィックはすべてパブリック IP 接続を経由します。送信トラフィックは VPC を介してルーティングされます。VPC は、図 1 に示すように、プライベート IP トラフィックのみを許可するように構成できます。
Figure1
github.com への通信はパブリック IP アドレスに解決されるため、限定公開またはパブリックと限定公開としてデプロイされた Looker インスタンスからは到達できません。
この Codelab では、内部 TCP プロキシ ロードバランサと、Looker PSA から呼び出されるインターネット ネットワーク エンドポイント グループ(NEG)を使用して、GitHub へのサウスバウンド HTTPS 接続を行います。
学習内容
- ネットワークの要件
- テスト接続を使用して Looker から GitHub への接続を確立する
必要なもの
- オーナー権限を持つ Google Cloud プロジェクト
- GitHub アカウントとリポジトリ
- GitHub 個人アクセス トークン(従来版)
- パブリックとプライベート、またはプライベートのみ有効になっている既存の Looker PSA インスタンス
2. 作成するアプリの概要
内部 TCP プロキシ ロードバランサと、github.com の解決済み IP アドレスで構成されたインターネット NEG をデプロイします。この NEG は、Looker によって解決された github.com 組織へのインターネット下り(外向き)トラフィックに Cloud NAT を利用します。
3. ネットワークの要件
ネットワーク要件の内訳は次のとおりです。
コンポーネント | 説明 |
VPC($vpc_network) | カスタムモード VPC |
転送ルールのサブネット | リージョン内部 TCP プロキシ ロードバランサの IP アドレスの割り振りに使用されます。 |
プロキシ専用サブネット | 各ロードバランサのプロキシ には内部 IP アドレスが割り当てられます。プロキシからバックエンド VM またはエンドポイントに送信されるパケットには、プロキシ専用サブネットからの送信元 IP アドレスが含まれています。 |
インターネット NEG | ロードバランサの外部バックエンドを定義するために使用されるリソース。エンドポイントには、Cloud VPN または Cloud Interconnect 経由以外でも接続できる必要があります。 |
バックエンド サービス | バックエンド サービスは、ロードバランサとバックエンド リソース間のブリッジとして機能します。このチュートリアルでは、バックエンド サービスがインターネット NEG に関連付けられています。 |
Cloud Router | Cloud NAT は、コントロール プレーン機能に Cloud Router を使用しますが、BGP セッションの管理には使用しません。 |
Cloud NAT | リージョン インターネット NEG は、インターネット下り(外向き)に Cloud NAT を利用します。 |
4. Codelab トポロジ
5. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_ID
と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell を起動する
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
Google Cloud Console で、右上のツールバーにある Cloud Shell アイコンをクリックします。
プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。
この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 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]
vpc_network=[VPC Name]
echo $project
echo $region
echo $vpc-network
必要なサービスをすべて有効にします。
gcloud services enable compute.googleapis.com
7. VPC ネットワーク コンポーネント
VPC ネットワーク
このチュートリアルの前提条件は既存の PSA Looker インスタンスであるため、関連付けられた VPC はすでに作成されています。
Cloud Shell で、転送ルールのサブネットを作成します。
gcloud compute networks subnets create psa-fr-subnet --network $vpc_network --range 172.16.20.0/28 --region $region --enable-private-ip-google-access
Cloud Shell で、リージョン プロキシ専用サブネットを作成します。
gcloud compute networks subnets create $region-proxyonly-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=$vpc_network \
--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 $vpc_network-cloud-router --network $vpc_network --region $region
Cloud Shell で、TCP プロキシ ロードバランサのインターネット下り(外向き)を有効にする Cloud NAT ゲートウェイを作成します。
gcloud compute routers nats create $vpc_network-natgw \
--router=$vpc_network-cloud-router \
--endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
--nat-custom-subnet-ip-ranges=$region-proxyonly-subnet \
--auto-allocate-nat-external-ips \
--region=$region
ロードバランサの IP アドレスを予約する
Cloud Shell で、後で github.com の DNS A レコードとして使用するロードバランサの内部 IP アドレスを予約します。
gcloud compute addresses create internet-neg-lb-ip \
--region=$region \
--subnet=psa-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
8. インターネット NEG
インターネット NEG によって参照される外部エンドポイントを構成するには、INTERNET_FQDN_PORT または INTERNET_IP_PORT の 2 つの方法があります。INTERNET_IP_PORT(オプション 1)形式を選択した場合は、パブリック インターネットでルーティング可能な IP アドレスのみを使用できます。INTERNET_FQDN_PORT(オプション 2)形式を選択した場合は、エンドポイントのスコープに応じて、FQDN をパブリック インターネットでルーティング可能な IP アドレスまたはプライベート IP アドレスに解決できます。
オプション 1: IP アドレスを使用してインターネット NEG を設定する
インターネット NEG には、Github.com の解決済み IP アドレスが必要です。最適なパフォーマンスを得るには、ローカル ターミナルを開いて dig を実行し、github.com の IP アドレスを取得します。
ローカル ターミナルの例では、解決された IP アドレス 140.82.113.4 が生成されます。
bash-3.2$ dig github.com ; <<>> DiG 9.10.6 <<>> github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64801 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 60 IN A 140.82.113.4 ;; Query time: 409 msec ;; SERVER: ::1#53(::1) ;; WHEN: Thu Sep 26 15:50:45 CDT 2024 ;; MSG SIZE rcvd: 65
インターネット NEG を作成し、-network-endpoint-type を internet_ip_port に設定します。
Cloud Shell で、github.com に使用するインターネット NEG を作成します。
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_IP_PORT \
--network=$vpc_network \
--region=$region
Cloud Shell で、インターネット NEG github-internet-neg を更新し、github.com の解決済み IP アドレスとポート 443 を指定します。
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=[your-resolved-ip],port=443" \
--region=$region
例:
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="ip=140.82.113.4,port=443" \
--region=$region
オプション 2: FQDN を使用してインターネット NEG を設定する
必要に応じて、インターネット NEG を作成し、-network-endpoint-type を internet_FQDN_port に設定します。
Cloud Shell で、github.com に使用するインターネット NEG を作成します。
gcloud compute network-endpoint-groups create github-internet-neg \
--network-endpoint-type=INTERNET_FQDN_PORT \
--network=$vpc_network \
--region=$region
Cloud Shell で、インターネット NEG github-internet-neg を FQDN github.com で更新します。
gcloud compute network-endpoint-groups update github-internet-neg \
--add-endpoint="fqdn=github.com,port=443" \
--region=$region
9. GitHub サービスを作成します
ロードバランサのコンポーネントを作成する
Cloud Shell で次の操作を行います。
gcloud compute backend-services create psa-backend-svc --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-services add-backend psa-backend-svc --network-endpoint-group=github-internet-neg --network-endpoint-group-region=$region --region=$region
Cloud Shell で、リクエストをバックエンド サービスに転送するターゲット TCP プロキシを作成します。
gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
--backend-service=psa-backend-svc \
--region=$region
次の構文で、転送ルール(内部 TCP プロキシ ロードバランサ)を作成します。
Cloud Shell で次の操作を行います。
gcloud compute forwarding-rules create psa-github-fr \
--load-balancing-scheme=INTERNAL_MANAGED \
--network-tier=PREMIUM \
--network=$vpc_network \
--subnet=psa-fr-subnet \
--address=internet-neg-lb-ip \
--target-tcp-proxy=producer-lb-tcp-proxy \
--target-tcp-proxy-region=$region \
--region=$region \
--ports=443
10. GitHub DNS ゾーン
次のセクションでは、内部 TCP プロキシ ロードバランサの IP アドレスで構成される A レコードを使用して、GitHub.com の DNS レスポンス ポリシーを作成します。
その後、DNS ピアリングは github.com ゾーンを Looker PSA と共有し、インターネット NEG と Cloud NAT を組み合わせて内部ロードバランサを介して GitHub に接続できるようになります。
Cloud Shell で、レスポンス ポリシー ゾーンを作成します。
gcloud dns --project=$project response-policies create github-com --description="" --networks="$vpc_network"
Cloud Shell で、TCP プロキシ ロードバランサの IP アドレス([insert-your-ip-address])で構成される DNS A レコードを作成します。
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="[insert-your-ip-address]"
例:
gcloud dns --project=$project response-policies rules create github --response-policy="github-com" --dns-name="github.com." --local-data=name="github.com.",type="A",ttl=300,rrdatas="172.16.20.2"
DNS ピアリングを更新する
このセクションでは、「gcloud services peered-dns-domains create」構文を使用して、プライベート サービス接続のピアリングされた DNS ドメインを作成します。このドメインは、サービス プロデューサーの VPC ネットワークから送信された特定の Namespace 内のレコードのリクエストをコンシューマの VPC ネットワークに送信して解決します。
Cloud Shell で、Looker が github.com をクエリするピアリングされた DNS ドメインを作成します。
gcloud services peered-dns-domains create github-com --project=$project --network=$vpc_network --dns-suffix=github.com.
11. GitHub への接続をテストする
次の手順では、Looker Console を使用してプロジェクトを作成し、github.com への HTTPS 接続を検証します。
12. 新しいプロジェクトの作成
開発モードを有効にする
Looker Console で、次の場所に移動します。
開発モードを有効にします(ページ左下)。有効にすると、[You are in Development Mode] というバナーが表示されます。
新しいプロジェクトの作成
Cloud コンソールで、次の場所に移動します。
開発 → プロジェクト
新しい LookML プロジェクトを選択する
プロジェクト名を指定し、[Blank Project] を選択して [Create Project] をクリックします。
[Configure Git] を選択します。
Git を構成する
リポジトリの URL を HTTPS GitHub の詳細で更新し、URL に .git を追加して、[続行] を選択します。
例:
GitHub のユーザー名と個人用のアクセス トークン(従来版)で選択内容を更新し、[設定のテストとファイナライズ] を選択します。
Git アクションを選択する
[Test Git Connection] を選択します。
Git 接続テストを検証する
13. クリーンアップ
1 つの Cloud Shell ターミナルからラボ コンポーネントを削除します。
gcloud compute forwarding-rules delete psa-github-fr --region=$region -q
gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q
gcloud compute backend-services delete psa-backend-svc --region=$region -q
gcloud compute routers nats delete $vpc_network-natgw --router=$vpc_network-cloud-router --router-region=$region -q
gcloud compute routers delete $vpc_network-cloud-router --region=$region -q
gcloud compute network-endpoint-groups delete github-internet-neg --region=$region -q
gcloud compute addresses delete internet-neg-lb-ip --region=$region -q
gcloud compute networks subnets delete psa-fr-subnet $region-proxyonly-subnet --region=$region -q
gcloud services peered-dns-domains delete github-com --network=$vpc_network -q
gcloud dns --project=$project response-policies rules delete github --response-policy="github-com" -q
gcloud dns response-policies update github-com --networks= -q
gcloud dns response-policies delete github-com
14. 完了
これで、Looker Console を使用して GitHub への接続を正常に構成し、検証できました。
Cosmopup はコードラボが大好きです。