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

プライベート サービス アクセスは、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 アドレス)です。

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

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

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

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

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

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

考慮事項

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

  • 既存の割り当て範囲、サブネット、カスタム静的ルートと重複しない範囲を選択します。2 つの範囲を重複させることはできません。
  • 自動モードの VPC ネットワークを使用している場合、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 サービスは別の割り振りを作成するのではなく既存の割り振りを使用します。

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 つのみです。

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

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

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 コマンドを使用して接続を変更します。プライベート接続から範囲を削除すると、以下が適用されます。

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

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

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

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 の名前です。

プライベート接続の削除

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

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

Console

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

gcloud

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

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

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

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

  • PROJECT_ID はオブジェクトの ID に置き換えます。

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

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

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

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

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