1. はじめに
Private Service Connect を使用すると、サービス プロデューサーは、ある VPC ネットワークから別の VPC ネットワークにサービスを限定公開できます。コンシューマは、PSC エンドポイントまたは PSC バックエンドからプロデューサー サービスにアクセスできます。
この Codelab では、PSC バックエンドに焦点を当てます。PSC バックエンドは、Google Cloud プロキシ ロードバランサ(アプリケーションまたはネットワーク)と組み合わせて使用されます。PSC バックエンドを使用すると、次のようなコンシューマ側のきめ細かい制御が可能になります。
- 高度なオブザーバビリティとロギング
- Cloud Armor の統合
- カスタム URL
- 高度なトラフィック管理
- カスタム TLS 証明書
この Codelab では、グローバル外部アプリケーション ロードバランサを使用して Private Service Connect バックエンドを作成し、別のネットワーク内のプロデューサー サービスにプライベートにアクセスする方法について説明します。
学習内容
- グローバル外部アプリケーション ロードバランサに関連付けられた PSC バックエンドを作成して構成する
- Apache マネージド ウェブサービスを構成し、Service Attachment を介して PSC サービスとして公開する
- SSL 証明書を作成して、内部アプリケーション ロードバランサと外部アプリケーション ロードバランサで SSL を終端する
- PSC サービスにアクセスするための Cloud DNS 公開ゾーンを構成する
必要なもの
- オーナー権限を持つ Google Cloud プロジェクト
2. テスト環境
作成する環境は、コンシューマ VPC とプロデューサー VPC で構成されます。プロデューサー VPC で、オープンソースの Apache ウェブサービスを構築するインスタンス テンプレートからマネージド インスタンス グループをデプロイします。また、test-vm をデプロイして、サービスのローカル機能が適切に動作することを確認します。Apache サービスを Service Attachment を介して PSC プロデューサー サービスとして公開します。
コンシューマ VPC に、Apache サービスを指す PSC バックエンド サービスを持つグローバル外部アプリケーション ロードバランサをデプロイします。次に、一般公開 DNS ゾーンを設定して、一般公開インターネットで PSC サービスにアクセスします。
3. 設定と要件
セルフペース型の環境設定
- 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 での作業はすべて、ブラウザ内から実行できます。インストールは不要です。
4. 始める前に
API を有効にする
Cloud Shell で、プロジェクト ID が設定されていることを確認します。
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
必要なサービスをすべて有効にする
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. プロデューサー VPC の設定
VPC ネットワークの作成
Cloud Shell から
gcloud compute networks create producer-vpc --subnet-mode custom
サブネットを作成する
2 つの汎用サブネットがプロデューサー VPC にデプロイされます。service-subnet は、Apache ウェブサービス VM とロードバランサ転送ルールのデプロイに使用されます。test-client-subnet は別のリージョンにあり、VM をデプロイしてグローバル アクセスが有効になっている Apache サービスをテストするために使用されます。
Cloud Shell から
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region
Cloud Shell から
gcloud compute networks subnets create test-client-subnet \ --network=producer-vpc \ --range=10.0.1.0/28 \ --region=us-east4
また、リージョン内部アプリケーション ロードバランサで使用するプロキシ専用サブネットもデプロイする必要があります。
Cloud Shell から
gcloud compute networks subnets create central-proxy-subnet \ --network=producer-vpc \ --range=10.100.101.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
PSC サービスをデプロイする場合、一意のサービスごとに、サービス アタッチメントに関連付ける対応する PSC NAT サブネットが必要です。このサブネットのサイズは、接続が予想されるエンドポイントの数に応じて適切に設定する必要があります。
Cloud Shell から
gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Cloud NAT を作成する
プロデューサー サービスに適したパッケージをインストールするには、Cloud NAT が必要です。
Cloud Shell から
gcloud compute routers create central-cr \ --network=producer-vpc \ --region=$region
Cloud Shell から
gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
ネットワーク ファイアウォールのポリシーとルールを作成する
Cloud Shell から
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create \ --firewall-policy producer-vpc-policy \ --network producer-vpc \ --name network-producer-vpc \ --global-firewall-policy
IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。
- IAP を使用してアクセス可能にするすべての VM インスタンスに適用します。
- IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可します。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。
Cloud Shell から
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "SSH with IAP" \ --direction INGRESS \ --src-ip-ranges 35.235.240.0/20 \ --layer4-configs tcp:22 \ --global-firewall-policy
ロードバランサのプロキシ専用サブネット(2000)からロードバランサのバックエンドへの上り(内向き)トラフィックを許可するには、2 つの追加のファイアウォール ルールが必要です。また、バックエンド インスタンスでロードバランサのヘルスチェックを許可するルールも必要です(2001)。
Cloud Shell から
gcloud compute network-firewall-policies rules create 2000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow traffic from load balancer proxy subnet" \ --direction INGRESS \ --src-ip-ranges 10.100.101.0/24 \ --layer4-configs tcp:443 \ --global-firewall-policy gcloud compute network-firewall-policies rules create 2001 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow load balancer health checks" \ --direction INGRESS \ --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \ --layer4-configs tcp:443 \ --global-firewall-policy
6. Apache ウェブサービスを作成する
「PSC Service」を表示する簡単な Apache ウェブサービスを作成します。
インスタンス テンプレートを作成する
Cloud Shell から
gcloud compute instance-templates create apache-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2enmod ssl sudo a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
MIG のヘルスチェックを作成する
Cloud Shell から
gcloud compute health-checks create https service-mig-healthcheck \ --port=443 \ --global
マネージド インスタンス グループを作成する
Cloud Shell から
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=apache-service-template \ --health-check=service-mig-healthcheck gcloud compute instance-groups managed set-named-ports psc-service-mig \ --named-ports=https:443 \ --region=$region
7. 自己署名証明書を作成する
こちらの手順のステップ 1 を完了して、自己署名証明書を作成します。すべてのコマンドは Cloud Shell で実行できます。手順 1 が完了したら、このページに戻ってください。COMMON NAME は EXAMPLE.COM で構成する必要があります。
ロードバランサに関連付ける証明書リソースを作成します。証明書パラメータと秘密鍵パラメータは、特定のファイル名に置き換えます。
Cloud Shell から
gcloud compute ssl-certificates create producer-service-cert \ --certificate=<your-producer-certfile.cert> \ --private-key=<your-producer-keyfile.pem> \ --region=$region
8. 内部リージョン アプリケーション ロードバランサを作成する
次に、サービスのロードバランサ コンポーネントを作成します。ここでは内部リージョン アプリケーション ロードバランサを使用していますが、任意の Google Cloud 内部ロードバランサを使用できます。TLS の処理については、該当するロードバランサのドキュメントをご覧ください。
ロードバランサの転送ルールに使用する内部 IP アドレスを作成し、後でサービスへのテスト呼び出しを行うときに使用する IP をメモします。
Cloud Shell から
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
ロードバランサのヘルスチェックを作成します。
Cloud Shell から
gcloud compute health-checks create https lb-apache-service-hc \ --region=$region \ --port-name=https
バックエンド サービスを作成します。
Cloud Shell から
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
URL マップを作成します。
Cloud Shell から
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
ターゲット HTTPS プロキシを作成します。
Cloud Shell から
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
転送ルールを作成します。
Cloud Shell から
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. テスト用 VM を作成し、ローカルでサービスをテストする
Service Attachment を作成する前に、別のリージョンにテスト クライアント VM を作成して、ロードバランサがグローバル アクセスと TLS で正しく構成されていることをテストします。
Cloud Shell から
gcloud compute instances create vm-client \ --zone=us-east4-a \ --subnet=test-client-subnet \ --no-address
プロビジョニングが完了するまで 1 分ほど待ち、インスタンスに SSH 接続します。
Cloud Shell から
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
ロードバランサ経由で 443 経由で接続して、Apache Service をテストします。内部 IP アドレスは、前に予約してメモしたものです。
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
予想される結果
PSC Service
VM を終了します。
vm-client から
exit
10. サービス アタッチメントを作成する
この例では、このプロジェクトからの PSC 接続のみを許可するようにサービス アタッチメントを構成します。1 つ以上の特定のプロジェクトまたはネットワークを許可するように構成できますが、両方を許可することはできません。最大接続数は 5 に設定されています。各プロジェクトまたはネットワークに上限を設定する必要があります。
Cloud Shell から
gcloud compute service-attachments create apache-service-attachment \ --region=$region \ --producer-forwarding-rule=apache-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$project=5 \ --nat-subnets=psc-nat-subnet
次のステップで PSC バックエンドの構成に使用する Service Attachment URI(selfLink)をメモしておいてください。これは、Cloud Shell で次のコマンドを実行することで取得できます。
Cloud Shell から
gcloud compute service-attachments describe apache-service-attachment \ --region $region
projects で始まる URI をコピーします。
例: projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. コンシューマ VPC の設定
VPC ネットワークを作成する
Cloud Shell から
gcloud compute networks create consumer-vpc --subnet-mode custom
サブネットの作成
Private Service Connect ネットワーク エンドポイント グループ(NEG)をデプロイするコンシューマ側にサブネットが必要です。
Cloud Shell から
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.0.0.0/28
12. 外部 IP を予約し、コンシューマ側の自己署名証明書を作成する
外部 IP
後でロードバランサの転送ルールに使用する外部静的 IP アドレスを作成し、Cloud Shell 変数に IP アドレスをキャプチャします。
Cloud Shell から
gcloud compute addresses create external-psc-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global export externalip=$(gcloud compute addresses describe external-psc-ip \ --format="get(address)" \ --global) echo $externalip
コンシューマの自己署名証明書
こちらの手順のステップ 1 をもう一度行って、自己署名証明書を作成します。すべてのコマンドは Cloud Shell で実行できます。手順 1 が完了したら、このページに戻ってください。独自のパブリック DNS ゾーンを所有する代わりに、nip.io というオープンソースのパブリック ワイルドカード DNS サービスを使用します。PSC サービスのパブリック URL は、先ほど構成した外部 IP アドレスを使用します。YOUR COMMON NAME MUST BE CONFIGURED WITH <YOUR-EXTERNAL-IP.nip.io>
外部ロードバランサに関連付ける証明書リソースを作成します。証明書パラメータと秘密鍵パラメータは、特定のファイル名に置き換えます。
Cloud Shell から
gcloud compute ssl-certificates create consumer-service-cert \ --certificate=<your-consumer-certfile.cert> \ --private-key=<your-consumer-keyfile.pem> \ --global
13. ロードバランサ コンポーネントを作成する
バックエンド サービスとして新しく作成した Service Attachment を指す PSC NEG を使用して、グローバル外部アプリケーション ロードバランサを作成します。
前の手順でメモしたサービス アタッチメント URI を用意します。以下の psc-target-service を URI に置き換えます。
Cloud Shell から
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
バックエンド サービスを作成します。
Cloud Shell から
gcloud compute backend-services create apache-pscneg-bes \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend apache-pscneg-bes \ --network-endpoint-group=apache-psc-neg \ --network-endpoint-group-region=$region \ --global
URL マップを作成する
Cloud Shell から
gcloud compute url-maps create consumer-url-map \ --default-service=apache-pscneg-bes \ --global
ターゲット HTTPS プロキシを作成します。
Cloud Shell から
gcloud compute target-https-proxies create psc-https-proxy \ --url-map=consumer-url-map \ --ssl-certificates=consumer-service-cert
転送ルールを作成する
Cloud Shell から
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. 一般公開 DNS ゾーンを作成する
Cloud Shell から
gcloud dns managed-zones create "psc-service" \ --dns-name=$externalip.nip.io. \ --description="public dns for psc service" \ --visibility=public
Cloud Shell から
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. コンシューマの PSC 接続をテストする
パブリック DNS が伝播されるまで 7 ~ 10 分待ってからテストします。
Cloud Shell から
curl https://$externalip.nip.io -k
ブラウザまたはデスクトップ ターミナルに https://<YOUR-EXTERNAL-IP>.nip.io と入力して、ブラウザからテストすることもできます。
予想される結果
PSC Service
16. クリーンアップ手順
1 つの Cloud Shell ターミナルからラボ コンポーネントを削除する
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute routers nats delete central-nat --router=central-cr --region $region -q gcloud compute routers delete central-cr --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. 完了
以上で、この Codelab は完了です。
学習した内容
- グローバル外部アプリケーション ロードバランサに関連付けられた PSC バックエンドを作成して構成する
- Apache マネージド ウェブサービスを構成し、Service Attachment を介して PSC サービスとして公開する
- SSL 証明書を作成して、内部アプリケーション ロードバランサと外部アプリケーション ロードバランサで SSL を終端する
- PSC サービスにアクセスするように Cloud DNS 公開ゾーンを構成する