Google API 用の Private Service Connect

1. はじめに

Private Service Connect を使用すると、VPC ネットワーク内のグローバル内部 IP アドレスを使用してプライベート エンドポイントを作成できます。これらの内部 IP アドレスには、storage-pscendpoint.p.googleapis.com や bigtable-adsteam.p.googleapis.com などの意味のある名前で DNS 名を割り当てることができます。API リクエストを storage.googleapis.com などの公開サービス エンドポイントに送信する代わりに、VPC ネットワークに対してプライベートで内部的な Private Service Connect エンドポイントにリクエストを送信できます。

これらの名前と IP アドレスは VPC ネットワークの内部用で、Cloud VPN トンネルまたは Cloud Interconnect アタッチメント(VLAN)経由で接続しているオンプレミス ネットワークでも使用できます。

どのトラフィックがどのエンドポイントに向かうかを制御し、トラフィックが Google Cloud 内にとどまることを確認できます。

学習内容

  • Private Service Connect のユースケース
  • ネットワークの要件
  • サポートされている API
  • Private Service Connect エンドポイントを作成する
  • Cloud Storage バケットを作成する
  • Cloud DNS プライベート ゾーンを作成して更新する
  • パブリック googleapis にアクセスするための NAT GW を作成する
  • BOTO 構成ファイルを作成して更新する
  • PSC サービス エンドポイントに対して解決された VM1 で gsutil list を実行する
  • パブリック googleapis.com に対して解決された VM2 で gsutil list を実行する
  • Tcpdump を使用して DNS の解決を検証する

必要なもの

  • DNS、nano エディタまたは vi エディタの知識

2. Private Service Connect のユースケース

同じ VPC ネットワーク内に複数の Private Service Connect エンドポイントを作成できます。特定のエンドポイントへの帯域幅に制限はありません。Private Service Connect エンドポイントはグローバル内部 IP アドレスを使用するため、VPC ネットワーク内のすべてのリソースで使用できます。

複数のエンドポイントが存在する場合、Cloud Router とファイアウォール ルールを使用して異なるネットワーク パスを指定できます。

  • Private Service Connect エンドポイント経由の Google API へのアクセスを一部の VM に許可し、残りの VM には許可しないように、ファイアウォール ルールを作成できます。
  • インターネットへのトラフィックを許可しないファイアウォール ルールを VM インスタンスに設定できます。この場合、Private Service Connect エンドポイントに送信されたトラフィックは Google に送信されます。
  • Cloud VPN トンネルまたは Cloud Interconnect 相互接続のアタッチメント(VLAN)を使用して VPC に接続されているオンプレミス ホストがある場合は、一部のリクエストをトンネルまたは VLAN 経由で送信し、他のリクエストをパブリック インターネット経由で送信できます。この構成を行うと、限定公開の Google アクセスでサポートされていないサービス(Google ブックスなど)でトンネルや VLAN を回避できます。この構成を作成するには、Private Service Connect エンドポイントを作成し、Private Service Connect エンドポイントの IP アドレスを Cloud Router のカスタム ルート アドバタイズを使用してアドバタイズします。さらに、Cloud DNS インバウンド転送ポリシーを有効にします。一部のリクエストは、Private Service Connect エンドポイントの名前を使用して Cloud VPN トンネルまたは Cloud Interconnect 相互接続のアタッチメント(VLAN)経由で送信され、残りのリクエストはデフォルトの DNS 名を使用してインターネット経由で送信されます。
  • 複数の Cloud Interconnect アタッチメント(VLAN)を使用して、オンプレミス ネットワークを VPC ネットワークに接続する場合、図 2 のように、オンプレミスからの一部のトラフィックを VLAN 経由で送信し、残りのトラフィックを VLAN 以外で送信できます。これにより、Google の広域ネットワークではなく独自の広域ネットワークを使用し、地理的要件を満たすようにデータの移動を制御できます。この構成を作成するには、2 つの Private Service Connect エンドポイントを作成します。最初の VLAN を管理する Cloud Router の BGP セッションで、最初のエンドポイントにカスタムルート アドバタイズを作成します。2 番目の VLAN を管理する Cloud Router の BGP セッションで、2 番目のエンドポイントに別のカスタム ルート アドバタイズを作成します。Private Service Connect エンドポイント名を使用するように構成されたオンプレミス ホストは、対応する Cloud Interconnect 相互接続のアタッチメント(VLAN)経由でトラフィックを送信します。
  • アクティブ/アクティブ トポロジでは、複数の Cloud Interconnect アタッチメント(VLAN)を使用できます。VLAN を管理する Cloud Router の BGP セッションで、カスタムルート アドバタイズを使用して同じ Private Service Connect エンドポイントの IP アドレスをアドバタイズすると、オンプレミス システムからエンドポイントに送信されるパケットは、ECMP を使用して VLAN 間でルーティングされます。

5e142c2fbf6f010e.png

図 1.Private Service Connect、Cloud Router、オンプレミス ホストを構成することで、Google API へのトラフィックの送信に使用する Cloud Interconnect 相互接続のアタッチメント(VLAN)を制御できます。

3. ネットワークの要件

Private Service Connect を使用するには、外部 IP アドレスのない仮想マシン(VM)インスタンスのプライマリ インターフェースが、プライベート Google アクセスが有効になっているサブネット内に存在する必要があります。

外部 IP アドレスを持つ VM は、そのサブネットで限定公開の Google アクセスが有効かどうかに関係なく、Private Service Connect エンドポイントを使用して Google API とサービスにアクセスできます。Private Service Connect エンドポイントへの接続は Google のネットワーク内にとどまります。

Private Service Connect エンドポイントは、ピアリングされた VPC ネットワークからアクセスできません。

サポートされている API

Private Service Connect エンドポイントを作成するときに、アクセスする API のバンドル(all-apis または vpc-sc)を選択します。

API バンドルを使用すると、 プライベート Google アクセス VIP で利用できるのと同じ API にアクセスできます。

  • all-apis バンドルを使用すると、private.googleapis.com と同じ API にアクセスできます。
  • vpc-sc バンドルを使用すると、restricted.googleapis.com と同じ API にアクセスできます。

4. Codelab のトポロジとユースケース

2ac275eb86f26338.png

図 1 - Codelab のトポロジ

Codelab のユースケース -

お客様は、Cloud Storage のデータ転送に、プライベート(相互接続)アクセスとパブリック googleapis アクセスの両方を必要としています。お客様の要件を満たすために、一意の /32 アドレス、BOTO 構成、DNS レコードの更新で構成される Private Service Connect をデプロイします。仮想マシン 1 は、Cloud Storage バケットへのアクセスに PSC を使用します。一方、VM2 は NAT GW 経由でパブリック googleapis.com IP 範囲を使用します。

ラボのすべての側面は Google Cloud Platform 内にデプロイされますが、同じユースケースはトラフィック分離を必要とするハイブリッド クラウド デプロイにも適用できます。

5. 設定と要件

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

  1. Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。

MrEseyJH4tg9PuS3GzJa72onCqawwQiRm04c0YjnpR6WD3IciP1ICDh5e5RoxrG3tc5y44_Ynn9GB0Igjo3sTE0BlsAnCxJdhXn7egP3tX4rkzkub7ZCjOKc70kJvl07REnmPb3TGgHgKQ1sLCGDGbz0e3RCc-FNa3fQliCtq67H-Oj9jzzYn_upkmNN1lOMQrQm8Jdvo6EEYAvSwDEjpH37bIG9ouBJcmS_xFYV1IHJoyAhsasS1SfYtZkO-RBwWPXRrr3Zt4r31ETcjJeQKHAY2ncSMFGZ2vGxcMEcNoIy_cuWGCaWAsrH0KsOVwkV5e93Ypfcq3sQ_HPIrV-NSocegQN2PnRUku_CVi1MM89O6qHIU6E32ZypJPxojkbRTJXET5JvtskIXgzFMk18-4NnNjzCJA

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは $300 の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

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

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

yEqEFRN4OGfeGJEfJplSt5sGY95BluU78i3Lk0Opo9caOYfrWUPBi_RglIfo9x078tH5Z_Obgq1wOhrEPV8k5OvMgI5e3aam1a7teXuimwTy-evcupc34_UEMmfAFkV-hnXwl559rg

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

BxRCLVCDNXX4OxwHppzaY9ghvuFTsgsozreyEHvRK9GPfsh3sW-kdwev6_gZdkX5FWPvb7M_Vp4FoyjFWwZxBMK6CLXiPwJgFbhz8Tgec-tyQR7GEdNjGMBca052yM8ga0UqzdHAmw

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

6. 始める前に

API を有効にする

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

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

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

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com

7. VPC ネットワークの作成

VPC ネットワーク

Cloud Shell から

gcloud compute networks create psc-lab --subnet-mode custom

出力

Created
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
psc-lab  CUSTOM       REGIONAL

サブネットの作成

Cloud Shell から

gcloud compute networks subnets create psclab-subnet \
        --network psc-lab --range 10.0.0.0/24 --region us-central1 

–enable-private-ip-google-access

出力

Created
NAME             REGION       NETWORK  RANGE
psclab-subnet  us-central1  psc-lab  10.0.0.0/24

ファイアウォール ルールを作成する

Cloud Shell から

gcloud compute firewall-rules create psclab-ssh \
        --network psc-lab --allow tcp:22 --source-ranges=35.235.240.0/20

出力

NAME        NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
psclab-ssh  psc-lab  INGRESS    1000      tcp:22        False

Cloud NAT インスタンスを作成する

Cloud Router の作成

Cloud Shell から

gcloud compute routers create crnat \
    --network psc-lab \
    --asn 65000 \
    --region us-central1

Cloud NAT の作成

Cloud Shell から

gcloud compute routers nats create cloudnat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region us-central1

8. Private Service Connect エンドポイントを作成する

Private Service Connect エンドポイント IP <pscendpointip> を構成する場合は、VPC で定義されていない一意の IP アドレスを指定する必要があります。

Cloud Shell から

gcloud beta compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=<pscendpointip> \
    --network=psc-lab

ラボの期間中、‘pscendpointip' を保存します。

(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")

pscendpointip=$(gcloud compute addresses list --filter=name:psc-ip --format="value(address)")
echo $pscendpointip

エンドポイントを Google API およびサービスに接続する転送ルールを作成します。

Cloud Shell から

gcloud beta compute forwarding-rules create pscendpoint \
    --global \
    --network=psc-lab \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

構成済みの Private Service Connect エンドポイントを一覧表示します。

Cloud Shell から

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

構成済みの Private Service Connect エンドポイントの説明を取得します。

Cloud Shell から

gcloud compute forwarding-rules describe \
    pscendpoint --global

9. バケットを作成する

Cloud Storage バケットを作成し、BUCKET_NAME をグローバルに一意の名前に置き換えます。

Cloud Shell から

gsutil mb  -l us-central1 -b on gs://BUCKET_NAME

ラボの期間中、‘BUCKET_NAME' を保存します。

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

10. DNS 構成

Google Cloud Storage を使用するアプリケーションがあるとします。Private Service Connect を使用しない場合、アプリケーションは ‘storage.googleapis.com' に接続する可能性があります。これはデフォルトでパブリック アドレスに解決されます。Private Service Connect を使用すると、‘storage-psclab.p.googleapis.com' などの名前を作成して使用できます。名前とアドレスは、VPC ネットワークと接続されたオンプレミス ネットワークに対してプライベートです。

DNS の Private Service Connect は、SERVICE-ENDPOINT.p.googleapis.com という命名規則に従います。上記の例では、「storage」が SERVICE、「psclab」が ENDPOINT です。SERVICE と ENDPOINT の間に「-」を含めることが不可欠です。

Private Service Connect エンドポイントを使用して Cloud Storage にアクセスするには、Private Service Connect エンドポイント IP アドレスを参照する DNS(A)レコード storage-psclab.p.googleapis.com を作成します。

DNS プライベート ゾーンを作成する

gcloud dns --project=$projectname managed-zones create psc-dns-zone --description="" --dns-name="p.googleapis.com." --visibility="private" --networks="psc-lab"

DNS A レコードを作成する

gcloud dns --project=$projectname record-sets transaction start --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction add $pscendpointip --name=storage-pscendpoint.p.googleapis.com. --ttl=300 --type=A --zone=psc-dns-zone

gcloud dns --project=$projectname record-sets transaction execute --zone=psc-dns-zone

11. 仮想マシンを作成する

Private Service Connect の検証に使用する仮想マシン(psc-instance-1)を作成します。

Cloud Shell から

  gcloud compute instances create psc-instance-1 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

VM インスタンス(psc-instance-1)にログインします。

Cloud Shell 経由で VM に SSH 接続します。

gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

[+] を3 回 クリックして、追加の Cloud Shell ターミナルを作成します(下のスクリーンショット)。

69ea94e1527912bb.png

パブリック Googleapis の検証に使用する仮想マシン(psc-instance-2)を作成します。

タブ 2 から

  gcloud compute instances create psc-instance-2 \
    --subnet psclab-subnet \
    --zone us-central1-a \
    --image=centos-7-v20210122 \
    --image-project=centos-cloud \
    --no-address \
    --metadata=startup-script=yum\ install\ tcpdump\ -y$'\n'yum\ install\ bind-utils\ -y$'\n'yum\ install\ nano\ -y 

タブ 2 から Cloud Shell 経由で VM に SSH 接続します。

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

タブ 3 から Cloud Shell 経由で psc-instance-1 に SSH 接続します。

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-1" --project "$projectname"

タブ 4 から Cloud Shell 経由で psc-instance-2 に SSH 接続します。

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


gcloud compute ssh --zone "us-central1-a" "psc-instance-2" --project "$projectname"

12. 既存の Gsutil の動作を確認する

タブ 4(psc-instance-2)から tcpdump を起動して DNS トラフィックをモニタリングします。

sudo tcpdump -vv -i eth0 port 53

タブ 2(psc-instance-2)からストレージ バケットの DNS ルックアップを検査します。

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
gsutil -D ls gs://$BUCKET_NAME

gsutil デバッグを検査します。DNS の解決には HOST storage.googleapis.com が使用されます。

<snip>
send: 'GET /storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\nHost: storage.googleapis.com\r\ncontent-length: 0\r\nauthorization: Bearer ya29.c.KpkB7wfaMjfc_WXEKCeNF4Md0fEHnfDU7tqBf3cd0u43yEmYXqj8fX_X5wWdNdDVH6k1EkjeAeIJDzKGvyjPOkf1Io2kVeUqYX69sDv53huW1NslffjAHKchbZ0CP3Cg83TS3Pa55jLcuE0TLbYycVrgSbD3H90LaapUGbWD3kj4IsJLf9J8R98Bqobu8HZwwqk92hlZ4zVzRqOM\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

タブ 4(psc-instance-2)から、ストレージ バケットにアクセスするときに GoogleAPI.com パブリック DNS A レコードが使用されていることを確認します。

metadata.google.internal.domain > psc-instance-2.c.yourprojectname.internal.33973: [udp sum ok] 36442 q: A? storage.googleapis.com. 11/0/0 storage.googleapis.com. A 108.177.111.128, storage.googleapis.com. A 142.250.128.128, storage.googleapis.com. A 74.125.70.128, storage.googleapis.com. A 74.125.201.128, storage.googleapis.com. A 64.233.183.128, storage.googleapis.com. A 173.194.198.128, storage.googleapis.com. A 172.217.219.128, storage.googleapis.com. A 142.250.136.128, storage.googleapis.com. A 209.85.234.128, storage.googleapis.com. A 172.217.212.128, storage.googleapis.com. A 172.217.214.128

13. Gsutil の動作を変更する

前の手順で、プライベート DNS ゾーンと PSC エンドポイント IP アドレスにマッピングされた A レコードを作成しました。次の手順では、psc-instance-1 で VM BOTO ファイルを更新して、gsutil の動作を制御します。

タブ 1(psc-instance-1)の VM インスタンス ターミナルからデフォルトの BOTO 構成を表示します。

[psc-instance ~]$ more  /etc/boto.cfg

出力(project_id は異なります)

[GSUtil]
default_project_id  = 234086459238
default_api_version = 2

[GoogleCompute]
service_account = default

nano エディタまたは VI エディタを使用して BOTO 構成を更新します。すべてのエントリをコピーして貼り付けてください。

例: sudo nano /etc/boto.cfg

または

例: sudo vi /etc/boto.cfg

VM インスタンス ターミナル タブ 1(psc-instance-1)から

[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

構成を検証します。[Credentials] の順序は DNS ルックアップに不可欠です。

more /etc/boto.cfg
[Credentials]
gs_host = storage-pscendpoint.p.googleapis.com
gs_host_header = storage.googleapis.com
gs_json_host = storage-pscendpoint.p.googleapis.com
gs_json_host_header = www.googleapis.com

[GSUtil]
default_project_id  = 234086459238
default_api_version = 2

[GoogleCompute]
service_account = default

14. 更新された gsutil ルックアップの動作を確認する

タブ 3(psc-instance-1)から tcpdump を起動して DNS トラフィックをモニタリングします。

sudo tcpdump -vv -i eth0 port 53

タブ 1(psc-instance-1)からストレージ バケットの gsutil ルックアップを検査します。

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

gsutil -D ls gs://$BUCKET_NAME

デバッグログで、Private Service Connect エンドポイント「pscendpoint」を介してストレージ バケットにアクセスできることを確認します。

出力:

<snip>
INFO 0131 22:14:18.795986 base_api.py] Making http GET to https://storage-pscendpoint.p.googleapis.com/storage/v1/b/$BUCKET_NAME/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000
INFO 0131 22:14:18.796415 base_api.py] Headers: {u'Host': 'www.googleapis.com',
 'accept': 'application/json',
 'accept-encoding': 'gzip, deflate',
 'content-length': '0',
 'user-agent': 'apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0'}
INFO 0131 22:14:18.796502 base_api.py] Body: (none)
connect: (storage-pscendpoint.p.googleapis.com, 443)
send: 'GET /storage/v1/b/psc-bucket/o?delimiter=%2F&projection=noAcl&versions=False&fields=prefixes%2CnextPageToken%2Citems%2Fname&alt=json&maxResults=1000 HTTP/1.1\r\ncontent-length: 0\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nuser-agent: apitools Python/2.7.5 gsutil/4.57 (linux2) analytics/disabled interactive/True command/ls google-cloud-sdk/324.0.0\r\nhost: www.googleapis.com\r\nauthorization: Bearer ya29.c.KpkB7wd3XWiYeRyTuth5_HPlNV-hPwc2Nn7RSIeMpzrpa_j4EsMPl2m_mDGKAcGHvYIgiC5bT2UVQirAPpSbbpToa6G6lkaBbH5SZwHwgNXYfisp5Ww1UjXe4rTa69a_Wp0WesafcwPNnYzDo3xf5VGh3iGhySA04kTXuyT--MgOU8U-XLII2LJQxUWlV8KEdrvyCuqRb-jsDdk_\r\n\r\n'
reply: 'HTTP/1.1 200 OK\r\n'
<snip>

タブ 3(psc-instance-1)から、ストレージ バケットにアクセスしようとするときに使用される DNS A レコードが PSC エンドポイント IP であることを確認します。

@psc-instance-1 ~]$ sudo tcpdump -vv -i eth0 port 53
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
05:02:33.936256 IP (tos 0x0, ttl 64, id 55416, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0xcceb!] 34796+ A? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.936269 IP (tos 0x0, ttl 64, id 55417, offset 0, flags [DF], proto UDP (17), length 82)
    psc-instance-1.c.yourprojectname.internal.42296 > metadata.google.internal.domain: [bad udp cksum 0x5e4e -> 0x3ebd!] 5632+ AAAA? storage-pscendpoint.p.googleapis.com. (54)
05:02:33.944018 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 98)
    metadata.google.internal.domain > psc-instance-1.c.yourprojectname.42296: [udp sum ok] 34796 q: A? storage-pscendpoint.p.googleapis.com. 1/0/0 storage-pscendpoint.p.googleapis.com. A 10.10.110.10 (70)
05:02:33.946005 IP (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 175)

Private Service Connect エンドポイント IP が DNS の解決に使用されるようになったことを確認します。

タブ 1 から

nslookup storage-pscendpoint.p.googleapis.com

出力

@psc-instance ~]$ nslookup storage-pscendpoint.p.googleapis.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
Name:   storage-pscendpoint.p.googleapis.com
Address: <pscip>

15. クリーンアップ手順

VM インスタンスを終了します(すべてのタブ)。

exit

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

gcloud compute routers nats delete cloudnat --router=crnat --region=us-central1 --quiet

gcloud compute routers delete crnat --region=us-central1 --quiet

gcloud beta compute forwarding-rules delete pscendpoint --global --quiet

gcloud beta compute addresses delete psc-ip --global --quiet

gsutil rm -r gs://$BUCKET_NAME

gcloud compute instances delete psc-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete psc-instance-2 --zone=us-central1-a --quiet

gcloud compute firewall-rules delete psclab-ssh --quiet

gcloud compute networks subnets delete psclab-subnet --region us-central1 --quiet

gcloud compute networks delete psc-lab --quiet

コンソールで、正しいプロジェクトが表示されていることを確認し、[ネットワーキング サービス] → [Cloud DNS] を選択します。

d0ed4bd585006e45.png

[psc-dns-zone] を特定してクリックします。

903532e68a262111.png

レコードセット「storage-pscendpoint.p.googleapis.com」を選択し、[レコードセットを削除] をクリックします。

e89394b43ddb5ce2.png

[ゾーンを削除] をクリックしてラボのクリーンアップを完了します。

b2a612d7b3a80030.png

16. 完了

以上で、この Codelab は完了です。

学習した内容

  • Private Service Connect のユースケース
  • ネットワークの要件
  • サポートされている API
  • Private Service Connect エンドポイントを作成した
  • Cloud Storage バケットを作成した
  • Cloud DNS プライベート ゾーンを作成した
  • BOTO 構成ファイルを更新した
  • NAT GW を作成した
  • PSC サービス エンドポイントに対して解決される VM1 で gsutil list を実行する
  • パブリック googleapis.com に対して解決される VM2 で gsutil list を実行する
  • Tcpdump を使用して DNS の解決を検証する