プライベート サービス アクセスを構成する

プライベート サービス アクセスは、VPC ネットワークと Google またはサードパーティが所有するネットワークとのプライベート接続です。Google またはサードパーティ(サービスを提供しているエンティティ)は、サービス プロデューサーとも呼ばれます。プライベート接続を使用すると、VPC ネットワーク内の VM インスタンスとアクセスするサービスで、内部 IP アドレスを使用して排他的に通信できるようになります。VM インスタンスは、インターネット アクセスまたは外部 IP アドレスがなくても、プライベート サービス アクセスを介してサービスにアクセスできます。

プライベート サービス アクセスおよびその他のプライベート アクセス オプションの詳細については、サービスのプライベート アクセス オプションをご覧ください。

全体像として、プライベート サービス アクセスを使用するには、VPC ネットワークで IP アドレス範囲(CIDR ブロック)を割り振ってから、サービス プロデューサーへのプライベート接続を作成する必要があります。

始める前に

プライベート接続を確立するには、前提条件となる次の手順を行います。

  • 使用しているサービスでプライベート サービス アクセスがサポートされていることを確認します。
  • サービス プロデューサーのネットワークへの接続に使用する既存の VPC ネットワークが必要です。VM インスタンスは、この VPC ネットワークを使用してプライベート接続経由でサービスに接続する必要があります。
  • プロジェクトで Service Networking API有効にします。API はプライベート接続を作成するために必要です。
  • Google Cloud プロジェクトを作成するか、既存のプロジェクトを選択します。Google Cloud プロジェクトの作成方法については、プロジェクトの作成と管理をご覧ください。
  • このガイドの gcloud コマンドラインのサンプルを実行する場合は、gcloud CLI をインストールします。

権限

プロジェクト オーナーと Compute ネットワーク管理者のロールroles/compute.networkAdmin)を持つ IAM メンバーが、割り振られた IP アドレス範囲を作成し、プライベート接続を管理できます。

ロールの詳細については、VPC IAM ロールのドキュメントをご覧ください。

共有 VPC のシナリオ

共有 VPC を使用している場合は、割り当てられた IP 範囲とプライベート接続をホスト プロジェクトに作成します。通常、ホスト プロジェクトのネットワーク管理者がこれらの作業を行う必要があります。ホスト プロジェクトの設定後、サービス プロジェクト内の VM インスタンスはプライベート接続を使用できます。

割り当てと制限

プライベート接続は VPC ピアリング接続として実装されているため、VPC ネットワーク ピアリングに適用されるのと同じ割り当てと制限が、プライベート サービス アクセスにも適用されます。

サービスに割り振られた IP アドレス範囲

プライベート接続を作成する前に、サービス プロデューサーの VPC ネットワークで使用される IPv4 アドレス範囲を割り振る必要があります。これにより、VPC ネットワークとサービス プロデューサーのネットワークとの間に IP アドレスの衝突がなくなります。各サービス プロデューサーに対して割り振り範囲を作成します。

VPC ネットワークに範囲を割り振ると、その範囲はサブネット(プライマリとセカンダリの範囲)とカスタム静的ルートの宛先には適用されません。

プライベート サービス アクセスでの IPv6 アドレス範囲の使用はサポートされていません。

IP アドレス範囲のサイズ

プライベート サービス アクセスの範囲(クリックして拡大)

サービス プロデューサーが自分の接続側にサブネットを作成すると、そのサブネットの IP アドレス範囲に割り当てからの空き範囲が選択されます。

各サービス プロデューサーには最小サイズの IP アドレス範囲が必要です。Google では、最小サイズは単一の /24 ブロック(256 アドレス)ですが、推奨サイズは /16 ブロック(65,536 アドレス)です。

選択するサイズは、以下のようないくつかの要因によって決まります。

  • 使用するサービスとリージョンの数。
  • 使用するサービスの要件。
    • サービスの最小 IP アドレス範囲サイズ。
    • サービス プロバイダが、作成するサービスのインスタンスごとに個別の IP 範囲を必要とするかどうか、またはサービスの複数のインスタンスに対して同じ IP 範囲を使用できるかどうか。

連続する /16 ブロックがない場合は、小さい割り振りから始めて、後でさらに IP アドレスが必要になったら新しい割り振りを追加できます。

サービス プロデューサーのサブネットについて

プライベート接続を確立し、プライベート IP アドレスを持つリソースを作成すると、サービスはそのリソースをプロビジョニングするためのサブネットを作成します。サービスは割り当て範囲から使用可能な IP アドレス範囲を選択します。サービス プロデューサーのサブネット IP アドレス範囲を選択または変更することはできません。サブネットは、サブネット内のすべてのリソースを削除する場合にのみ、サービスによって削除されます。

追加のリソースをプロビジョニングすると、サービスは以前に作成した既存のリージョン サブネットにそれらをプロビジョニングします。サブネットがいっぱいの場合、サービスはそのリージョンに新しいサブネットを作成します。

考慮事項

IP アドレス範囲を割り当てる前に、次の点を考慮してください。

  • 現在のサブネット範囲と将来のサブネット範囲から完全に分離された割り当て範囲を選択します。これには、VPC ネットワーク ピアリングを使用して接続されたネットワークのサブネット範囲と、同じ Network Connectivity Center ハブに接続された VPC スポークのサブネット範囲が含まれます。
  • カスタム静的ルートまたは動的ルートの宛先と完全に一致しない範囲、または宛先を含まない範囲を選択します。

    サービス プロデューサーが、割り当てられた範囲の未使用部分を新しいリソースの候補として選択すると、割り当てられた範囲と完全に一致する、またはその範囲内に収まるカスタムルート宛先がすべて除外されます。VPC ネットワークに割り振られた範囲があり、割り振られた範囲と一致する宛先または範囲内に収まる宛先を含むカスタムルートがあると、割り振られた範囲で使用可能な部分が少なくなります。この構成では、予期しない割り振りエラーが発生する可能性があります。

    たとえば、10.0.0.0/16 の割り当て範囲を作成する場合、次のように適用されます。

    • 10.0.0.0/16 の宛先を含むカスタムルートが存在する場合、または後で作成された場合、10.0.0.0/16 範囲はすべて使用不能と見なされます。サービス プロデューサーが割り当てられた範囲を使用しようとすると、Google Cloud は割り振りの枯渇エラーを返します。

    • 10.0.0.0/20 の宛先を持つカスタムルートが存在する場合、または後で作成された場合、割り当てられた 10.0.0.0/16 範囲の 10.0.0.0/20 部分は使用不能と見なされます。サービス プロデューサーが割り当てられた範囲を使用しようとしたときに、割り当てられた範囲の使用可能な部分がサービス プロデューサーに十分でない場合、Google Cloud は割り当て枯渇エラーを返します。

    • 10.0.0.0/8 の宛先を含むカスタムルートが存在する場合、または後で作成された場合、10.0.0.0/16 に割り当てられた範囲の可用性に影響はありません。

  • 他の IP アドレスのニーズと競合しない範囲を選択します。

    • 一部の Google プロダクトやサードパーティ プロダクトでは、ゲスト オペレーティング システム内でのルーティングに 172.17.0.0/16 が使用されます。たとえば、デフォルトの Docker ブリッジ ネットワークではこの範囲が使用されます。172.17.0.0/16 を使用するプロダクトに依存している場合は、プライベート サービス アクセスの割り振り範囲で 172.17.0.0/16 を使用しないでください。
    • 自動モードの VPC ネットワークを使用している場合、10.128.0.0/9 と一致または重複する割り当て範囲は作成できません。Google では、今後作成されるリージョンのサブネットも含め、自動的に作成されるサブネット10.128.0.0/9 範囲を使用します。
  • 現在および将来のニーズを十分に満たせる CIDR ブロックを選択します。範囲のサイズが十分でないことが後で判明した場合は、可能であれば範囲を拡張してください。単一のサービス プロデューサーに複数の割り当てを設定することはできますが、Google で制限が適用されるのは、割り振り可能な IP アドレス範囲のであって、各範囲のサイズ(ネットマスク)ではありません。

  • プライベート接続に追加の割り当て範囲を追加すると、サービス プロデューサーが提供するサービスに新しいサービス リソースを作成するときに、使用可能な IP アドレスの範囲が拡張されます。特定のサービスで使用するために、プライベート接続内の特定の割り当て範囲を予約することはできません。

  • 複数のサービス プロデューサーに同じ割り当て範囲を再利用しないでください。再利用は可能ですが、IP アドレスが重複する可能性があります。各サービス プロデューサーが把握できるのは自分のネットワークのみであり、他のサービス プロデューサーが使用している IP アドレスを知ることはできません。

  • CIDR ブロックは、割り当てを作成するときに割り当て範囲に 1 つだけ設定できます。IP アドレス範囲を拡張しなければならない場合でも、割り当てにブロックを追加することはできません。代わりに、新しい範囲と既存の範囲を含む大きなブロックを使用することで、別の割り当ての作成や、既存の範囲の再作成ができます。

  • Google による自動作成ではなく(Cloud SQL などで)自分で割り当てを作成する場合も、これと同じ命名規則を使用すれば、他のユーザーまたは Google サービスに、Google 用の割り当てがすでに存在することを伝えられます。Google サービスがお客様に代わって範囲を割り当てる場合は、割り当てに名前を付けるために google-managed-services-[your network name] 形式を使用します。この割り振りが存在する場合、Google サービスは、別の割り振りを作成せずに既存の割り振りを使用します。

  • プライベート接続は VPC ネットワーク ピアリング接続として実装されているため、VPC ネットワーク ピアリングの上限など、ピアリング接続の動作と制約がプライベート接続にも適用されます。

  • VPC を使用する既存のサービス インスタンスの内部 IP アドレスを変更する予定がある場合は、その変更作業によってサービスが中断される可能性があることを考慮してください。たとえば、サービス インスタンスを削除して再作成する必要がある場合があります。詳細については、関連するマネージド サービスのドキュメントをご覧ください。たとえば、Cloud SQL を使用している場合は、既存の Cloud SQL インスタンスのプライベート IP アドレスを変更するをご覧ください。

IP 割り振りを作成する

以下では、割り振る IP アドレス範囲の作成方法について説明します。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. サービス プロデューサーに接続する VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブを選択します。

  4. [プライベート サービス接続] タブで、[サービスに割り当てられた IP 範囲] タブを選択します。

  5. [割り当て IP 範囲] をクリックします。

  6. 割り当て範囲の [名前] と [説明] を入力します。

  7. 割り当ての [IP 範囲] を指定します。

    • IP アドレス範囲を指定するには、[カスタム] を選択してから、CIDR ブロック(192.168.0.0/16 など)を入力します。
    • 接頭辞長を指定して利用可能な範囲を Google に選択させるには、[自動] を選択して接頭辞長(16 など)を入力します。
  8. [割り当て] をクリックして、割り当て範囲を作成します。

gcloud

VPC ネットワークに割り振る範囲を作成するには、addresses create リソースを使用します。

  • アドレス範囲と接頭辞長(サブネット マスク)を指定するには、addresses フラグと prefix-length フラグを使用します。たとえば、CIDR ブロック 192.168.0.0/16 を割り当てるには、アドレスに 192.168.0.0 を指定し、接頭辞長に 16 を指定します。

    gcloud compute addresses create RESERVED_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --addresses=192.168.0.0 \
        --prefix-length=16 \
        --description="DESCRIPTION" \
        --network=VPC_NETWORK
    
  • 接頭辞長(サブネット マスク)だけを指定するには、prefix-length フラグを使用します。アドレス範囲を省略すると、VPC ネットワークで使用されていないアドレス範囲が自動的に選択されます。次の例では、16 ビットの接頭辞長を使用して、未使用の IP アドレス範囲を選択しています。

    gcloud compute addresses create RESERVED_RANGE_NAME \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=16 \
        --description="DESCRIPTION" \
        --network=VPC_NETWORK
    

次のように置き換えます。

  • RESERVED_RANGE_NAME: 割り振り範囲の名前(my-allocated-range など)。

  • DESCRIPTION: 範囲の説明(allocated for my-service など)。

  • VPC_NETWORK: VPC ネットワークの名前(my-vpc-network など)。

次の例では、my-network VPC ネットワーク内の VM インスタンスがプライベート サービス アクセスを使用して、それをサポートする Google サービスにアクセスできるように Google にプライベート接続を作成します。

gcloud compute addresses create google-managed-services-my-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --description="peering range for Google" \
    --network=my-network

Terraform

VPC ネットワークに割り振り範囲を作成するには、google_compute_global_address リソースを使用します。

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

プロジェクトの compute.globalAddresses.list 権限に関するエラーが表示された場合は、サービス アカウント権限をご覧ください。

割り振られた IP アドレス範囲を一覧表示する

割り振られた IP アドレス範囲を一覧表示するには、addresses list コマンドを使用します。

gcloud compute addresses list --global --filter="purpose=VPC_PEERING"

プライベート接続を作成する

割り振り範囲を作成したら、サービス プロデューサーへのプライベート接続を作成できます。プライベート接続は、VPC ネットワークとサービス プロデューサーのネットワークとの VPC ネットワーク ピアリング接続を確立します。

プライベート接続は、VPC ネットワークとサービス プロデューサーとの 1 対 1 の関係です。単一のサービス プロデューサーで複数のサービスを提供する場合でも、プロデューサーのすべてのサービスに対して必要なプライベート接続は 1 つのみです。

単一のサービス プロデューサーで複数のサービスを提供し、異なるサービス リソースに使用する割り当て範囲を制御する場合は、それぞれ独自のプライベート接続を持つ複数の VPC ネットワークを使用できます。この構成では、新しいマネージド サービス リソースの作成時に特定のネットワークを選択して、関連付けられた割り当て範囲を新しいリソースに使用できます。

複数のサービス プロデューサーに接続する場合は、各サービス プロデューサーに固有の割り当てを使用します。この方法は、各サービス プロデューサーのネットワーク設定(ルートやファイアウォール ルールなど)を管理するのに役立ちます。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. サービス プロデューサーに接続する VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブを選択します。

  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択します。

  5. ネットワークとサービス プロデューサーとの間にプライベート接続を作成するには、[接続の作成] をクリックします。

  6. [割り当て] で、他のサービス プロデューサーによって使用されていない 1 つ以上の既存の割り当て範囲を選択します。

  7. [接続] をクリックして接続を作成します。

gcloud

  1. vpc-peerings connect コマンドを使用します。

    gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=RESERVED_RANGE_NAME \
        --network=VPC_NETWORK
    

    次のように置き換えます。

    • RESERVED_RANGE_NAME: 1 つ以上の割り振り範囲の名前。

    • VPC_NETWORK: VPC ネットワークの名前。

    このコマンドは、長時間実行オペレーションを開始し、オペレーション名を戻します。

  2. オペレーションが成功したかどうかを確認するには、vpc-peerings operations describe コマンドを使用します。

    gcloud services vpc-peerings operations describe \
        --name=OPERATION_NAME
    

    OPERATION_NAME は、前の手順から返されたオペレーション名に置き換えます。

プライベート接続を作成するときに、複数の割り振り範囲を指定できます。たとえば、範囲が不足している場合は、割り当て範囲を追加で指定できます。サービスは指定された範囲内のすべての IP アドレスを、指定された順序で使用します。

Terraform

プライベート接続を作成するには、google_service_networking_connection リソースを使用します。

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

プライベート接続を一覧表示する

プライベート接続を作成した後、その存在をリストで確認できます。リストには、各接続に関連付けられている割り当て範囲のリストも表示されます。たとえば、接続に割り当てた範囲を覚えていない場合は、リストを参照して確認できます。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 接続が含まれている VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブを選択します。

  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択して、すべてのネットワークのプライベート接続を表示します。

gcloud

vpc-peerings list コマンドを使用します。

gcloud services vpc-peerings list \
    --network=VPC_NETWORK

VPC_NETWORK は、VPC ネットワークの名前に置き換えます。

プライベート接続を変更する

既存のプライベート接続では、トラフィックを中断することなく、割り振られた IP アドレス範囲を追加または削除できます。たとえば、規模を変更するときに、既存の範囲が不足しそうな場合は、割り振り範囲を追加できます。

Google Cloud コンソールでは、割り振られた IP 範囲を削除することはできません。割り振り範囲を削除するには、gcloud コマンドを使用して接続を変更します。プライベート接続から範囲を削除すると、以下が適用されます。

  • 割り振り範囲とプライベート接続の関連付けは解除されますが、削除されることはありません。

  • 既存のサービス プロデューサー リソースが、削除された範囲を引き続き使用する場合があります。

  • プライベート サービス アクセスが、新しいサブネットの割り振りの際に、削除された範囲を使用することはありません。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 接続が含まれている VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブを選択します。

  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択して、すべてのネットワークのプライベート接続を表示します。

  5. リスト内の接続名をクリックします。

  6. [割り当て] プルダウン メニューで、割り振る範囲を選択します。

  7. [OK] をクリックします。

gcloud

既存のプライベート接続に IP アドレス範囲を割り振ったり削除するには、vpc-peerings update コマンドを使用します。

gcloud services vpc-peerings update \
    --service=servicenetworking.googleapis.com \
    --ranges=RESERVED_RANGE_NAME \
    --network=VPC_NETWORK \
    [--force]

次のように置き換えます。

  • RESERVED_RANGE_NAME: プライベート接続に割り振る 1 つ以上の割り振り範囲の名前のリスト。

    RESERVED_RANGE_NAME は、以前の割り振り範囲のリストを置き換えます。以前にこのプライベート接続に関連付けられた範囲を省略すると、その範囲は接続から削除されます。範囲を削除するには、--force オプションを使用する必要があります。

  • VPC_NETWORK: VPC ネットワークの名前。

割り振られた IP アドレス範囲を削除する

割り振られた IP アドレス範囲を削除する前に、その範囲がプライベート接続で使用されているかどうかを確認してください。

割り振られた IP アドレス範囲が使用されている場合は、まずプライベート接続を変更して範囲を削除します。次に、割り振られた IP アドレス範囲を削除します。

割り振られて使用されている IP アドレスを削除し、プライベート接続を変更しない場合は、以下が適用されます。

  • 既存の接続がアクティブのままになり、VPC ネットワークがサービス プロデューサーのネットワークと重複する IP アドレスを使用できるようになります。

  • プライベート接続に関連付けられ、唯一割り振られている IP アドレス範囲を削除すると、選択可能な割り振り済みの IP アドレス範囲がなくなるため、サービスは新しいサブネットを作成できません。

  • 後で、割り振り済みの IP アドレス範囲として、削除した範囲と一致するか重複する IP アドレス範囲を作成すると、その範囲はプライベート接続に追加できなくなります。

この問題を回避するには、割り振られている使用中の IP アドレス範囲を削除するときに、プライベート接続を必ず変更してください。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 削除する割り振り範囲の VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブを選択します。

  4. [プライベート サービス接続] タブで、[サービスに割り当てられた IP 範囲] タブを選択します。

  5. 削除する割り当てを選択します。

  6. [リリース] をクリックすると、割り当てられていた IP アドレス範囲が、ネットワークの利用可能な内部 IP アドレスのプールに返されます。

    割り当て IP アドレス範囲がまだ既存の接続に割り当てられている場合は、割り当てをリリースする前に追加の確認を入力する必要があります。

  7. もう一度 [リリース] をクリックして、削除を承認します。

gcloud

割り振りの名前を指定して割り振りを削除します。

gcloud compute addresses delete NAME \
    --global

NAME は、削除する割り振り範囲の名前に置き換えます。

プライベート接続を削除する

プライベート接続を削除する前に、その接続を介してアクセスするすべてのサービス インスタンスを削除する必要があります。たとえば、Cloud SQL へのアクセスに使用されるプライベート接続を削除するには、その接続を使用する Cloud SQL インスタンスを先に削除する必要があります。サービス インスタンスを削除すると、サービス プロデューサーのリソースが削除されますが、この処理は直ちに行われるとは限りません。一部のサービス プロデューサーでは、待機期間が経過してから削除が行われます。この待機期間中はプライベート接続を削除できません。サービス プロデューサーのリソースが削除されるのを待ってから、接続を削除してください。

たとえば、Cloud SQL インスタンスを削除すると、成功のレスポンスが返されますが、4 日間待機した後でサービス プロデューサーのリソースが削除されます。この待機期間中にサービスの削除を中止する場合は、リソースの復元をリクエストできます。待機期間中に接続を削除しようとすると、削除は失敗し、リソースがまだサービス プロデューサーによって使用中であることを知らせるメッセージが表示されます。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 削除する接続が含まれている VPC ネットワークを選択します。

  3. [プライベート サービス接続] タブを選択します。

  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択します。

  5. 削除するプライベート接続を選択します。

  6. 削除するには、[削除] をクリックします。

  7. もう一度 [削除] をクリックして、削除を承認します。

gcloud

プライベート接続の VPC ネットワーク ピアリング接続を削除するには、vpc-peerings delete コマンドを使用します。

gcloud services vpc-peerings delete \
    --service=servicenetworking.googleapis.com \
    --network=VPC_NETWORK

VPC_NETWORK は、VPC ネットワークの名前に置き換えます。

プライベート DNS ゾーンをサービス プロデューサーと共有する

Cloud DNS のプライベート ゾーンは VPC ネットワークに限定れたゾーンです。サービス プロデューサー ネットワークがプライベート ゾーンから名前を解決できるようにする場合は、2 つのネットワーク間に DNS ピアリングを構成します。

DNS ピアリングを構成するときに、VPC ネットワークと DNS サフィックスを指定します。サービス プロデューサーがこの DNS サフィックスを持つアドレスを解決する必要がある場合、サービス プロデューサーはそのクエリを VPC ネットワークに転送して解決します。

DNS ピアリングは、Cloud SQL を除いたサポートされているサービスに対応しています。

DNS ピアリングを有効にする場合は、プロジェクトで Cloud DNS API有効にする必要があります。

DNS とサービス プロデューサーをピアリングする

gcloud

VPC ネットワークとサービス プロバイダ ネットワークの間に DNS ピアリングを設定するには、peered-dns-domains create コマンドを使用します。

gcloud services peered-dns-domains create PEERING_NAME \
    --network=VPC_NETWORK \
    --dns-suffix=DNS_SUFFIX

次のように置き換えます。

  • PEERING_NAME: この DNS ピアリング構成の名前。

  • VPC_NETWORK: プライベート サービス アクセスを使用してサービス プロデューサーに接続している VPC ネットワークの名前。

  • DNS_SUFFIX: サービス プロデューサーとピアリングする DNS サフィックス。ドットを含む完全な DNS ドメイン名を指定する必要があります。たとえば、example.com. は有効な DNS サフィックスです。

Terraform

VPC ネットワークとサービス プロバイダ ネットワークの間に DNS ピアリングを設定するには、google_service_networking_peered_dns_domain リソースを使用します。


## Uncomment this block after adding a valid DNS suffix

# resource "google_service_networking_peered_dns_domain" "default" {
#   name       = "example-com"
#   network    = google_compute_network.peering_network.name
#   dns_suffix = "example.com."
#   service    = "servicenetworking.googleapis.com"
# }

DNS ピアリング構成を一覧表示する

gcloud

peered-dns-domains list コマンドを使用します。

gcloud services peered-dns-domains list \
    --network=VPC_NETWORK

VPC_NETWORK は、VPC ネットワークの名前に置き換えます。

DNS ピアリング構成を削除する

gcloud

peered-dns-domains delete コマンドを使用します。

gcloud services peered-dns-domains delete PEERING_NAME \
    --network=VPC_NETWORK

次のように置き換えます。

  • PEERING_NAME: DNS ピアリング構成の名前。

  • VPC_NETWORK: VPC ネットワークの名前。

トラブルシューティング

私の割り当てはどれくらい使われていますか?

サービス プロデューサーとのプライベート接続を作成するときは、使用する IP アドレス範囲を割り当てます。サービス プロデューサーから複数のサービスを使用する場合、各サービスは割り当て範囲から IP アドレスのチャンクを予約します。どのサービスがどの IP アドレスを使用しているかを確認できます。たとえば、どのサービスが大きな IP ブロックを使用しているかを知ることができ、IP アドレスが枯渇するのを防止できます。

特定の IP アドレス範囲を使用しているサービスを表示するには:

  1. プライベート接続を一覧表示します。
  2. 関連するサービス プロデューサーに接続するピアリング接続名を探します。
  3. VPC ネットワークのルートを一覧表示します。
  4. ネクストホップがピアリング接続名と一致しているルートを探します。ルートの宛先範囲は、各サービスが使用している IP アドレスを示します。

IP アドレス範囲の枯渇

特定のプライベート接続では、割り振られた IP アドレス空間が枯渇した場合に、Google Cloud はエラー Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. を返します。

このエラーは、割り当てられた範囲が十分でない場合や、カスタムの静的ルートまたは動的ルートにより、割り当てられた範囲が完全に使用されていない場合に表示されることがあります。ルーティングの考慮事項の詳細については、考慮事項をご覧ください。

この場合は、既存の割り振りを拡張するか、新しい割り振りを追加できます。拡張した割り振りは、既存の範囲を含む連続した IP アドレス範囲でなければなりません。割り当てのサイズに制限はありませんが、作成できる割り当ての数には制限があるため、割り当てを拡張することをおすすめします。

既存の割り当てを拡張するには:

  1. プライベート接続を一覧表示し、拡張する必要がある割り当て範囲の名前を記録します。
  2. 既存の割り当て範囲を削除します。
  3. 削除した範囲と同じ名前を使用して、新しい割り当て範囲を作成します。削除した IP アドレス範囲を含む IP アドレス範囲を指定します。これにより、以前の割り当て範囲を使用している既存のピアリング済みリソースは、VPC ネットワーク内のリソースと競合することなく、同じ IP アドレスを引き続き使用できます。たとえば、以前の割り当て範囲が 192.168.0.0/20 だった場合は、新しい割り当て範囲を 192.168.0.0/16 として作成します。

既存のプライベート接続に割り当て範囲を追加するには:

  1. 新しい割り当て範囲を作成します。この範囲は、既存の割り当て範囲と連続している必要はありません。
  2. 割り当て範囲を既存のプライベート接続に追加します。

オンプレミス ホストがサービス プロデューサーのネットワークと通信できません。

サービス プロデューサーのネットワークに、オンプレミス ネットワークにトラフィックを転送する正しいルートが存在しない可能性があります。デフォルトでは、サービス プロデューサーのネットワークは、VPC ネットワークからのサブネット ルートのみを学習します。このため、サブネット IP 範囲以外からのリクエストは、サービス プロデューサーで破棄されます。

VPC ネットワークでピアリング接続を更新して、サービス プロデューサーのネットワークへのカスタムルートをエクスポートします。ルートをエクスポートすると、VPC ネットワーク内のすべての有効な静的ルートと動的ルート(オンプレミス ネットワークへのルートなど)がサービス プロデューサーのネットワークに送信されます。サービス プロデューサーのネットワークは、これらのルートを自動的にインポートします。これにより、VPC ネットワーク経由でオンプレミス ネットワークにトラフィックを戻すことができるようになります。

サービス アカウントの権限

IP 割り振りの作成時にプロジェクトの compute.globalAddresses.list 権限に関するエラーが表示された場合や、プライベート接続の作成、一覧表示、変更中に Error 400: Precondition check failed などのエラーが発生した場合、Service Networking API サービス アカウントの Identity and Access Management(IAM)ロールに問題がある可能性があります。このサービス アカウントは、Service Networking API を有効にすると自動的に作成されます。アカウントがプロビジョニングされ、[IAM] ページに表示されるまでに時間がかかる場合があります。

コンソール

サービス アカウントに正しい IAM ロールが割り当てられていることを確認するには、次の操作を行います。

  1. Google Cloud コンソールの [IAM] ページに移動します。

    [IAM] に移動

  2. [Google 提供のロール付与を含みる] チェックボックスをオンにします。

  3. [名前] 列で、サービス ネットワーキング サービス エージェント プリンシパルを見つけて、対応する行にある プリンシパルを編集します」をクリックします。

  4. [ロール] フィールドに、サービス ネットワーキング サービス エージェント ロール(roles/servicenetworking.serviceAgent)があることを確認します。

  5. サービス ネットワーキング サービス エージェント ロールが存在しない場合は、[ロールを追加] または [別のロールを追加] をクリックします。

  6. [ロールを選択] をクリックします。

  7. [フィルタ] テキスト ボックスに「Service Networking Service Agent」と入力します。

  8. リストから [サービス ネットワーキング サービス エージェント] を選択し、[保存] をクリックします。

gcloud

Service Networking API サービス アカウントを作成するには、add-iam-policy-binding コマンドを使用します。

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

次のように置き換えます。

  • HOST_PROJECT_NAME: ホスト プロジェクトの名前。
  • HOST_PROJECT_NUMBER: ホスト プロジェクトの番号。

IP 割り当ての更新後もピアリング サブネット ルートが表示される

プライベート サービス接続に割り当てられた IP アドレス範囲を更新した後も、VPC ネットワークのルーティング テーブルに古いピアリング サブネット ルートが引き続き表示される場合があります。ルートが表示されるのは、IP アドレス範囲がまだ使用中であるためです。

この問題を解決するには、次の操作を行います。

IP アドレス範囲が使用されなくなると、ピアリング サブネット ルートは自動的に削除されます。リソースが削除されてから、サービス プロデューサーがリソースを完全に削除するまでに時間がかかることがあります。たとえば、古い IP アドレス範囲が Cloud SQL インスタンスで使用されている場合、サービス プロデューサーがインスタンスを完全に削除するまでに最大で 4 日かかります。削除が完了すると、ピアリング サブネット ルートが削除されます。