バックエンド経由でグローバル Google API にアクセスする
このページでは、クロスリージョン内部アプリケーション ロードバランサに基づく Private Service Connect バックエンドを使用して、グローバル Google API にアクセスする方法について説明します。
この構成では、Private Service Connect バックエンドが提供する可視性と制御を適用しながら、1 つ以上の個別のグローバル Google API をターゲットにできます。
- Virtual Private Cloud(VPC)と接続されたオンプレミス ネットワークにローカルなカスタムホスト名を構成して、選択したグローバル Google API にトラフィックを転送できます。
- バックエンドにはどのリージョンからでもアクセスできます。バックエンドは、任意のリージョンにある Private Service Connect ネットワーク エンドポイント グループ(NEG)にトラフィックをロードバランスできます。
- ピアリングされた VPC ネットワークからバックエンドにトラフィックを送信できます。
利用可能なグローバル Google API の一覧については、グローバル Google API のターゲットをご覧ください。
始める前に
-
グローバル Google API にアクセスするようにバックエンドを構成するために必要な権限を取得するには、Google Cloud プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。
-
Compute 管理者(
roles/compute.admin
) - Certificate Manager オーナー(
roles/certificatemanager.owner
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
-
Compute 管理者(
プロジェクトで Compute Engine API を有効にします。
プロジェクトで Certificate Manager API を有効にします。
認証局(CA)の秘密鍵と署名付き証明書を作成します。ステップ 1: 秘密鍵と証明書を作成するの手順に沿って操作します。秘密鍵と証明書は、Certificate Manager でセルフマネージド SSL 証明書を作成するために必要です。
作成した秘密鍵と署名付き証明書を使用して、クロスリージョン内部アプリケーション ロードバランサの証明書リソースを作成します。証明書をアップロードするときに、スコープを
all-regions
に設定する必要があります。詳細については、セルフマネージド証明書を Certificate Manager にアップロードするをご覧ください。証明書リソースは、ロードバランサのターゲット HTTPS プロキシを構成するために必要です。プロキシ専用サブネットを作成します(まだ存在しない場合)。クロスリージョン内部アプリケーション ロードバランサの転送ルールを作成する VPC ネットワークとリージョンには、プロキシ専用のサブネットが 1 つ必要です。このサブネットは、そのネットワークとリージョン内のすべての内部アプリケーション ロードバランサで使用されます。
Private Service Connect NEG を作成する
アクセスするグローバル Google API ごとに、Private Service Connect NEG を作成します。Private Service Connect NEG は、グローバル Google API への接続に使用される場合でもリージョンになります。
Private Service Connect NEG は、作成後に更新できません。
コンソール
Google Cloud コンソールで、[ネットワーク エンドポイント グループの作成] ページに移動します。
[ネットワーク エンドポイント グループの作成] ページで、ネットワーク エンドポイント グループの名前を入力します。
[ネットワーク エンドポイント グループの種類] で、[Private Service Connect NEG(リージョン)] を選択します。
[ターゲット] で [グローバル Google API] を選択します。
ネットワーク エンドポイント グループのリージョンを選択します。
ネットワーク エンドポイント グループのターゲット サービスを選択します。
[作成] をクリックします。
gcloud
network-endpoint-groups create
コマンドを使用します。
gcloud compute network-endpoint-groups create NEG_NAME \ --network-endpoint-type=private-service-connect \ --psc-target-service=TARGET_SERVICE \ --region=REGION
次のように置き換えます。
NEG_NAME
: ネットワーク エンドポイント グループの名前。TARGET_SERVICE
: 接続するグローバル Google API ターゲット(pubsub.googleapis.com
など)。サポートされているグローバル Google API ターゲットのリストをご覧ください。REGION
: ネットワーク エンドポイント グループを作成するリージョン。
API
regionNetworkEndpointGroups.insert
メソッドに POST
リクエストを送信します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups { "name": "NEG_NAME", "networkEndpointType": "PRIVATE_SERVICE_CONNECT", "pscTargetService": "TARGET_SERVICE" }
次のように置き換えます。
PROJECT_ID
: ネットワーク エンドポイント グループのプロジェクト ID。REGION
: ネットワーク エンドポイント グループを作成するリージョン。NEG_NAME
: ネットワーク エンドポイント グループの名前。TARGET_SERVICE
: 接続するグローバル Google API ターゲット(pubsub.googleapis.com
など)。サポートされているグローバル Google API ターゲットのリストをご覧ください。
ロードバランサを構成する
グローバル Google API にアクセスするには、クロスリージョン内部アプリケーション ロードバランサを構成します。
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
- [クロスリージョンまたはシングル リージョンのデプロイ] では、[クロスリージョン ワークロードに最適] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
- ロードバランサの名前を入力します。
ロードバランサのネットワークを選択します。
ロードバランサを作成するリージョンにプロキシ専用サブネットを含める必要があります。
フロントエンドの構成
- [フロントエンドの構成] をクリックします。
- ロードバランサの転送ルールの名前を入力します。
- [プロトコル] フィールドで、[HTTPS(HTTP/2 と HTTP/3 を含む)] を選択します。
- ロードバランサのサブネットワークのサブネットワーク リージョンを選択します。
- ロードバランサのサブネットワークを選択します。
- [IP アドレス] をクリックして、次のいずれかを行います。
- エフェメラル IP アドレスを自動的に割り当てるには、[エフェメラル(自動)] を選択します。
- エフェメラル IP アドレスを選択するには、[エフェメラル(カスタム)] を選択し、ロードバランサのサブネットの IP アドレス範囲からカスタム エフェメラル IP アドレスを入力します。
- 静的内部 IP アドレスを予約して使用するには、[IP アドレスを作成] をクリックし、次の操作を行います。
- IP アドレスの名前を入力します。
- [静的 IP アドレス] をクリックして、次のいずれかを行います。
- 静的 IP アドレスを自動的に割り当てるには、[自動的に割り当てる] を選択します。
- 特定の IP アドレスを構成するには、[ユーザー指定] を選択し、ロードバランサのサブネットの IP アドレス範囲から [カスタム IP アドレス] を入力します。
- [予約] をクリックします。
- HTTPS トラフィックを許可するように、[ポート] フィールドが
443
に設定されていることを確認します。 - [証明書] リストをクリックし、セルフマネージド証明書を選択します。
- [完了] をクリックします。
バックエンドの構成
- [バックエンドの構成] をクリックします。
アクセスするグローバル Google API ごとに、グローバル バックエンド サービスを作成します。グローバル バックエンド サービスを作成する手順は次のとおりです。
- [バックエンド サービスの作成または選択] メニューから [バックエンド サービスを作成] を選択します。
- バックエンド サービスの名前を入力します。
- [バックエンド タイプ] を [Private Service Connect ネットワーク エンドポイント グループ] に設定します。
- [Private Service Connect のターゲット タイプ] を [グローバル Google API] に設定します。
- プロトコルに [HTTPS] を選択します。
[バックエンド] セクションで、[新しいバックエンド] メニューをクリックし、Private Service Connect ネットワーク エンドポイント グループを選択します。
新しい Private Service Connect ネットワーク エンドポイント グループを作成する必要がある場合は、[PSC NEG を作成] をクリックします。
[完了] をクリックします。
[作成] をクリックします。
追加する各バックエンド サービスが [バックエンド サービスの作成または選択] メニューで選択されていることを確認して、[OK] をクリックします。
ルーティング ルール
受信 HTTPS リクエストを特定のバックエンド サービスに転送するためのルールのセットは、URL マップと呼ばれます。URL マップの詳細については、URL マップの概要をご覧ください。
ロードバランサにバックエンド サービスを 1 つだけ構成する場合は、デフォルトのルーティング ルールで十分です。確認と完了に進んでください。
複数のバックエンド サービスを構成する場合は、バックエンド サービスごとに 1 つのパスマッチャーを作成する必要があります。各ホストルールが参照できるパスマッチャーは 1 つだけです。また、2 つ以上のホストルールが同じパスマッチャーを参照できます。
- バックエンド サービスが複数ある場合は、[ルーティング ルール] をクリックします。
- [単純なホストとパスのルール] を選択します。
- バックエンドごとに、次の操作を行います。
- [ホストとパスのルールを追加] をクリックします。
- [ホスト] に、このサービスにリクエストを送信するために使用するホストの名前を入力します(例:
pubsub.example.com
)。 - [パス] に、パスを入力します(例:
/*
)。 - [バックエンド] で、バックエンド サービスを選択します。
確認と完了
- [確認と完了] をクリックして構成を確認します。
- [作成] をクリックします。
gcloud
アクセスするグローバル Google API ごとに、次の操作を行います。
バックエンド サービスを作成するには、
gcloud compute backend-services create
コマンドを使用します。gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --global
BACKEND_SERVICE_NAME
は、バックエンド サービスの名前に置き換えます。対応するバックエンド サービスに NEG を追加するには、
gcloud compute backend-services add-backend
コマンドを使用します。gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-region=REGION \ --global
次のように置き換えます。
NEG_NAME
: Private Service Connect NEG の名前。REGION
: Private Service Connect NEG のリージョン。
ロードバランサのグローバル URL マップを作成するには、
gcloud compute url-maps create
コマンドを使用します。URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。1 つのバックエンド サービスを使用してロードバランサを構成している場合は、そのバックエンド サービスをデフォルトとして設定します。複数のバックエンド サービスを使用するようにロードバランサを構成する場合は、URL サービスのデフォルトのバックエンド サービスの 1 つを選択します。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME
次のように置き換えます。
URL_MAP_NAME
: URL マップの名前。DEFAULT_BACKEND_SERVICE_NAME
: ロードバランサのデフォルト バックエンド サービスの名前。このデフォルトは、リクエストされたホスト名に一致するホストルールがない場合に使用されます。
省略可: 複数のバックエンド サービスを使用するようにロードバランサを構成する場合は、この手順を完了します。URL マップが 1 つのバックエンド サービスのみを参照している場合は、この手順をスキップします。
URL マップにバックエンド サービスを追加するには、
gcloud compute url-maps add-path-matcher
コマンドを使用します。バックエンド サービスごとに、パスマッチャーと 1 つ以上のホストルールを追加します。バックエンド サービスごとに 1 つのパスマッチャーを作成する必要があります。各ホストルールが参照できるパスマッチャーは 1 つだけです。また、2 つ以上のホストルールが同じパスマッチャーを参照できます。
gcloud compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=PATH_MATCHER \ --default-service=BACKEND_SERVICE_NAME \ --new-hosts=HOSTNAMES
次のように置き換えます。
PATH_MATCHER
: パスマッチャーの名前。BACKEND_SERVICE_NAME
: バックエンド サービスの名前。HOSTNAMES
: バックエンド サービスにリクエストを送信する 1 つ以上のホスト名(例:pubsub.example.com
)。複数のホスト名をカンマ区切りリストで指定できます。
ターゲット HTTPS プロキシを作成するには、
gcloud compute target-https-proxies create
コマンドを使用します。gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME
次のように置き換えます。
PROXY_NAME
: ターゲット HTTPS プロキシの名前。URL_MAP_NAME
: URL マップの名前。CERTIFICATE_NAME
: 証明書リソースの名前。
ロードバランサのグローバル転送ルールを作成するには、
gcloud compute forwarding-rules create
コマンドを使用します。gcloud compute forwarding-rules create RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --address=IP_ADDRESS \ --ports=443 \ --target-https-proxy=PROXY_NAME \ --subnet=SUBNET \ --subnet-region=SUBNET_REGION \ --global
次のように置き換えます。
RULE_NAME
: 転送ルールの名前。NETWORK
: 転送ルールの VPC ネットワーク。このネットワークには、ロードバランサを作成するリージョンにプロキシ専用サブネットを含める必要があります。IP_ADDRESS
: 転送ルールの内部 IP アドレス。転送ルールのサブネットの IP アドレス範囲内になければなりません。特定のエフェメラル IP アドレスを使用するには、IP アドレスを入力します(例:10.0.0.5
)。静的内部 IP アドレスを使用するには、IP アドレスの名前を入力します。Google Cloud にエフェメラル IP アドレスを選択させるには、このフラグを省略します。SUBNET
: 転送ルールのサブネット。SUBNET_REGION
: 転送ルールのサブネットのリージョン。
API
アクセスするグローバル Google API ごとに、次の操作を行います。
グローバル バックエンド サービスを作成するには、
backendServices.insert
メソッドにPOST
リクエストを送信します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices { "loadBalancingScheme": "INTERNAL_MANAGED", "name": "BACKEND_SERVICE_NAME", "protocol": "HTTPS" }
次のように置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト ID。BACKEND_SERVICE_NAME
: バックエンド サービスの名前。
対応するバックエンド サービスに NEG を追加するには、
backendServices.patch
メソッドにPATCH
リクエストを送信します。PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME { "backends": [ { "group": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG_NAME" } ] }
次のように置き換えます。
REGION
: NEG のリージョン。NEG_NAME
: 追加するネットワーク エンドポイント グループの名前。
ロードバランサのグローバル URL マップを作成するには、
urlMaps.insert
メソッドにPOST
リクエストを送信します。URL マップでは、デフォルトのバックエンド サービスを参照する必要があります。1 つのバックエンド サービスを使用してロードバランサを構成している場合は、そのバックエンド サービスをデフォルトとして設定します。複数のバックエンド サービスを使用するようにロードバランサを構成する場合は、URL サービスのデフォルトのバックエンド サービスの 1 つを選択します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps { "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/DEFAULT_BACKEND_SERVICE_NAME", "name": "URL_MAP_NAME" }
次のように置き換えます。
DEFAULT_BACKEND_SERVICE_NAME
: ロードバランサのデフォルトの名前。このデフォルトは、リクエストされたホスト名に一致するホストルールがない場合に使用されます。URL_MAP_NAME
: URL マップの名前。
複数のバックエンド サービスを使用するようにロードバランサを構成する場合は、この手順を完了します。URL マップが 1 つのバックエンド サービスのみを参照している場合は、この手順をスキップします。
URL マップにバックエンド サービスを追加するには、
urlMaps.patch
メソッドにPATCH
リクエストを送信します。バックエンド サービスごとに、パスマッチャーと 1 つ以上のホストルールを追加します。バックエンド サービスごとに 1 つのパスマッチャーを作成する必要があります。各ホストルールが参照できるパスマッチャーは 1 つだけです。また、2 つ以上のホストルールが同じパスマッチャーを参照できます。
1 つの API リクエストで複数のパスマッチとホストルールを追加できます。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME { "pathMatchers": [ { "name": "PATH_MATCHER_NAME_1", "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_1" }, { "name": "PATH_MATCHER_NAME_2", "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_2" } ], "hostRules": [ { "hosts": ["HOSTNAME_1"], "pathMatcher": "PATH_MATCHER_NAME_1" }, { "hosts": ["HOSTNAME_2"], "pathMatcher": "PATH_MATCHER_NAME_2" } ] }
次のように置き換えます。
PATH_MATCHER_NAME_1
: 最初のパスマッチャーの名前。BACKEND_SERVICE_NAME_1
: 最初のバックエンド サービスの名前。PATH_MATCHER_NAME_2
: 2 番目のパスマッチャーの名前。BACKEND_SERVICE_NAME_2
: 2 番目のバックエンド サービスの名前。HOSTNAME_1
: 最初のサービスにリクエストを送信するホスト名(例:pubsub.example.com
)。HOSTNAME_2
: 2 番目のサービスにリクエストを送信するホスト名。
ターゲット HTTPS プロキシを作成するには、
targetHttpsProxies.insert
メソッドにPOST
リクエストを送信します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies { "name": "PROXY_NAME", "sslCertificates": [ "https://certificatemanager.googleapis.com/v1/projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME" ], "urlMap": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME" }
次のように置き換えます。
PROJECT_ID
: プロジェクトの ID。PROXY_NAME
: ターゲット HTTPS プロキシの名前。CERTIFICATE_NAME
: 証明書リソースの名前。URL_MAP_NAME
: URL マップの名前。
ロードバランサのグローバル転送ルールを作成するには、
globalForwardingRules.insert
メソッドにPOST
リクエストを送信します。転送ルールのネットワークには、転送ルールのリージョンのサブネットにプロキシ専用サブネットを含める必要があります。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "IPAddress": "IP_ADDRESS", "loadBalancingScheme": "INTERNAL_MANAGED", "name": "FORWARDING_RULE_NAME", "network": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME", "portRange": "443", "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME", "target": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies/PROXY_NAME" }
次のように置き換えます。
IP_ADDRESS
: 転送ルールの内部 IP アドレス。転送ルールのサブネットの IP アドレス範囲内になければなりません。特定のエフェメラル IP アドレスを使用するには、IP アドレスを指定します(例:10.0.0.5
)。静的内部 IP アドレスを使用するには、IP アドレスの名前を指定します。Google Cloud にエフェメラル IP アドレスを選択させるには、このフィールドを省略します。FORWARDING_RULE_NAME
: 転送ルールの名前。NETWORK_NAME
: 転送ルールの VPC ネットワークの名前。このネットワークには、ロードバランサを作成するリージョンにプロキシ専用サブネットを含める必要があります。SUBNET_REGION
: 転送ルールのサブネットのリージョン。SUBNET_NAME
: 転送ルールのサブネットの名前。
構成を確認する
バックエンドがグローバル Google API に接続されていることをテストするには、次の操作を行います。
- バックエンドを構成した VPC ネットワークに仮想マシン(VM)インスタンスがない場合は、作成します。
- 暗黙の IPv4 下り(外向き)許可ルールをオーバーライドするファイアウォール ルールまたはファイアウォール ポリシーが作成されていないことを確認します。
- VM に接続します。
VM から
curl
を使用して、各 API をクエリできることを確認します。このコマンドではHost
ヘッダーを設定し、ユーザー定義の IP アドレスを指定して DNS の解決をバイパスします。-k
フラグを使用して証明書の検証をスキップできます。自己署名証明書を使用してターゲット HTTPS プロキシを構成した場合、または証明書に署名した認証局の証明書が VM に存在しない場合は、検証のスキップが必要になることがあります。curl -iv --resolve HOSTNAME:443:IP_ADDRESS \ 'https://HOSTNAME/RESOURCE_URI'
次のように置き換えます。
HOSTNAME
: URL マップで構成したホスト名(例:pubsub.example.com
)。IP_ADDRESS
: ロードバランサの転送ルールの IP アドレス。RESOURCE_URI
: 検証に使用するリソースの URI の残り。たとえば、ロードバランサが Pub/Sub のリージョン エンドポイントにリクエストを転送している場合は、$discovery/rest?version=v1
を使用できます。
DNS レコードを構成する
転送ルールの IP アドレスを参照するように、URL マップに追加したホストの DNS レコードを構成します。Cloud DNS を使用して DNS を管理している場合は、レコードの追加、変更、削除をご覧ください。それ以外の場合は、DNS サーバーで DNS レコードを構成します。
たとえば、次のような構成を作成したとします。
ターゲット サービス
pubsub.googleapis.com
を使用する Private Service Connect NEG。この Private Service Connect NEG をバックエンドとして使用するクロスリージョン内部アプリケーション ロードバランサ。
pubsub.example.com
のホストルールを定義する URL マップ。
この構成を正しく機能させるには、pubsub.example.com
が転送ルールの IP アドレスを参照する DNS レコードを作成する必要があります。
この構成では、pubsub.example.com
に送信されたリクエストはロードバランサに送信され、ロードバランサから pubsub.googleapis.com
に転送されます。
バックエンドにリクエストを送信するようにクライアントを構成する
パブリック サービス エンドポイントではなくバックエンド経由でリクエストを送信するには、ロードバランサの URL マップで定義したホスト名(pubsub.example.com
など)にリクエストを送信するようにクライアントを構成する必要があります。カスタム エンドポイントを使用するように構成する方法については、クライアントまたはクライアント ライブラリのドキュメントをご覧ください。次のページでは、一般的なクライアントの構成手順について説明します。
Python: クライアント オプションで
api_endpoint
を構成できます。Go: ClientOptions で
WithEndpoint
を構成できます。.NET: クライアントのビルダークラスで
Endpoint
を構成できます。gcloud: gcloud CLI で
api_endpoint_overrides
を構成できます。