プライベート サービス アクセスの構成

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

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

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

始める前に

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

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

権限

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

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

共有 VPC のシナリオ

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

割り当てと制限

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

IP アドレス範囲の割り振り

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

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

IP アドレス範囲のサイズ

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

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

各サービス プロデューサーには最小サイズの IP アドレス範囲が必要です。Google では、最小サイズは単一の /24 ブロック(256 アドレス)ですが、推奨サイズは /16 ブロック(65,536 アドレス)です。選択するサイズは、使用するサービスやリージョンの数などの要因によって異なります。冗長性のシナリオやレイテンシ低減のために、複数のリージョンで単一のサービスを使用することがあります。

たとえば、3 つの異なるリージョンで 2 つのサービスを使用する場合、サービス プロデューサーは 6 つのサブネットを作成し、それぞれに /24 ブロックを持たせる必要があります。サービスまたはリージョンを追加で使用する予定の場合は、すぐに /20 の割り振りを使い果たす可能性があります。連続する /16 ブロックがない場合は、小さい割り振りから始めて、後でさらに IP アドレスが必要になったら新しい割り振りを追加できます。

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

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

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

考慮事項

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

  • 既存の割り当て範囲、サブネット、カスタム静的ルートと重複しない範囲を選択します。2 つの範囲を重複させることはできません。
  • 自動モードの VPC ネットワークを使用している場合、10.128.0.0/9 と一致または重複する割り当て範囲は作成できません。この範囲は、自動的に作成されたサブネット用です。
  • 現在および将来のニーズを十分に満たせる CIDR ブロックを選択します。範囲のサイズが十分でないことが後で判明した場合は、可能であれば範囲を拡張してください。単一のサービス プロデューサーに複数の割り当てを設定することはできますが、Google で制限が適用されるのは、割り当て可能な IP アドレス範囲のであって、各範囲のサイズ(ネットマスク)ではありません。
  • 複数のサービス プロデューサーに同じ割り当て範囲を再利用しないでください。再利用は可能ですが、IP アドレスが重複する可能性があります。各サービス プロデューサーが把握できるのは自分のネットワークのみであり、他のサービス プロデューサーが使用している IP アドレスを知ることはできません。
  • CIDR ブロックは、割り当てを作成するときに割り当て範囲に 1 つだけ設定できます。IP アドレス範囲を拡張しなければならない場合でも、割り当てにブロックを追加することはできません。代わりに、新しい範囲と既存の範囲を含む大きなブロックを使用することで、別の割り当ての作成や、既存の範囲の再作成ができます。
  • Google による自動作成ではなく(Cloud SQL などで)自分で割り当てを作成する場合も、これと同じ命名規則を使用すれば、他のユーザーまたは Google サービスに、Google 用の割り当てがすでに存在することを伝えられます。Google サービスがお客様に代わって範囲を割り当てる場合は、割り当てに名前を付けるために google-managed-services-[your network name] 形式を使用します。この割り振りが存在する場合、Google サービスは別の割り振りを作成するのではなく既存の割り振りを使用します。

IP 割り振りの作成

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

Console

  1. Google Cloud Console で [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 フラグと 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 \
    --project=my-project

割り当て済みの IP アドレス範囲の一覧表示

--filter フラグを使用して範囲を一覧表示し、プライベート サービス アクセスに使用できる範囲を確認できます。次の例のように、目的が VPC_PEERING の範囲をフィルタリングします。

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

割り振られた IP アドレス範囲の削除

割り振られた IP アドレス範囲を削除する前に、それを使用しているプライベート接続がないことを確認してください。既存のプライベート接続を削除または変更すると、割り当て範囲の関連付けを解除できます。これを行わないと、既存の接続がアクティブのままになり、VPC がサービス プロデューサーのネットワークと重複する IP アドレスを使用できてしまいます。また、選択する IP アドレス範囲が割り当てられていないため、サービスは新しいサブネットを作成できません。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 削除する割り当てが含まれている VPC ネットワークを選択します。
  3. [プライベート サービス接続] タブを選択します。
  4. [プライベート サービス接続] タブで、[サービスに割り当てられた IP 範囲] タブを選択します。
  5. 削除する割り当てを選択します。
  6. [リリース] をクリックすると、割り当てられていた IP アドレス範囲が、ネットワークの利用可能な内部 IP アドレスのプールに返されます。

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

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

gcloud

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

gcloud compute addresses delete NAME \
    --global

プライベート接続の作成

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

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

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

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. サービス プロデューサーに接続する VPC ネットワークを選択します。
  3. [プライベート サービス接続] タブを選択します。
  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択します。
  5. ネットワークとサービス プロデューサーとの間にプライベート接続を作成するには、[接続の作成] をクリックします。
  6. [割り当て] で、他のサービス プロデューサーによって使用されていない 1 つ以上の既存の割り当て範囲を選択します。
  7. [接続] をクリックして接続を作成します。

gcloud

  1. プライベート接続を作成します。

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

    次のプレースホルダを適切な値に置き換えます。

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

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

    • PROJECT_ID: VPC ネットワークを含むプロジェクトの ID。

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

  2. オペレーションが成功したかどうかを確認します。

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

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

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

プライベート接続の一覧表示

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

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 接続が含まれている VPC ネットワークを選択します。
  3. [プライベート サービス接続] タブを選択します。
  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択して、すべてのネットワークのプライベート接続を表示します。

gcloud

VPC ネットワーク内のプライベート接続を一覧表示します。

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

VPC_NETWORKPROJECT_ID は、VPC ネットワークの名前とプロジェクト ID に置き換えます。

プライベート接続の変更

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

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

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

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

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

また、これらの gcloud コマンドを使用することによって、別の割り振り IP 範囲を使用して、削除されたプライベート接続を再作成することもできます。詳細については、削除したプライベート接続の再作成をご覧ください。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 接続が含まれている VPC ネットワークを選択します。
  3. [プライベート サービス接続] タブを選択します。
  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択して、すべてのネットワークのプライベート接続を表示します。
  5. リスト内の接続名をクリックします。
  6. [割り当て] プルダウン メニューで、割り振る範囲を選択します。
  7. [OK] をクリックします。

gcloud

既存のプライベート接続に割り振られた IP アドレス範囲を追加または削除します。

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

次のプレースホルダを適切な値に置き換えます。

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

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

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

  • PROJECT_ID は、ネットワークのプロジェクト ID の名前です。

プライベート接続の削除

プライベート接続を削除するには、対応する VPC ピアリング接続を削除する必要があります。VPC ネットワークはサービス プロデューサーの VPC ネットワークから切断されます。また両方のネットワークの既存のリソースは削除されませんが、プライベート サービスへはアクセスできなくなります。

Console

  1. Google Cloud Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. 削除する接続が含まれている VPC ネットワークを選択します。
  3. [プライベート サービス接続] タブを選択します。
  4. [プライベート サービス接続] タブで、[サービスへのプライベート接続] タブを選択します。
  5. 削除するプライベート接続を選択します。
  6. 削除するには、[削除] をクリックします。
  7. もう一度 [削除] をクリックして、削除を承認します。

gcloud

プライベート接続の VPC ネットワーク ピアリング接続を削除します。

gcloud compute networks peerings delete CONNECTION_NAME \
    --network VPC_NETWORK

CONNECTION_NAMEVPC_NETWORK をそれぞれ、プライベート接続の名前と VPC ネットワークで置き換えます。

削除したプライベート接続の再作成

削除したプライベート接続を再作成できます。

以前に使用した同じ割り振り IP 範囲を使用する場合は、もう一度プライベート接続を作成します。削除する前にプライベート接続に使用していたものと同じ割り振り IP 範囲を指定します。別の割り振り IP 範囲を指定すると、Google Cloud は Cannot modify allocated ranges エラーを返します。

別の割り振り IP 範囲を使用して接続を再作成する場合は、gcloud services vpc-peerings update コマンドを使用してプライベート接続を変更する必要があります。

たとえば、以前に range1 を使用してプライベート接続を設定していた場合は、別の割り振り IP 範囲(range1range2 など)を使用して再作成できます。

gcloud services vpc-peerings update \
    --service=servicenetworking.googleapis.com \
    --ranges=range1,range2 \
    --network=vpc1 \
    --project=my-project-123

range2 を使用して接続を再作成することもできます。この場合、以前のプライベート接続構成の一部である range1 が除外されるため、--force オプションを使用する必要があります。

gcloud services vpc-peerings update \
    --service=servicenetworking.googleapis.com \
    --ranges=range2 \
    --network=vpc1 \
    --project=my-project-123 \
    --force

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

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

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

DNS ピアリングは、次のサービスでサポートされています。

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

サービス プロデューサーと DNS のピアリング

gcloud

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

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 サフィックスです。

DNS ピアリング構成の一覧表示

gcloud

VPC ネットワーク内でピアリングされた DNS ドメインを一覧表示します。

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

次のプレースホルダを適切な値に置き換えます。

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

DNS ピアリング構成の削除

gcloud

ピアリングされた DNS ドメインを削除します。

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 ネットワーク経由でオンプレミス ネットワークにトラフィックを戻すことができるようになります。