エンドポイントを介してリージョン Google API にアクセスする
このドキュメントでは、Private Service Connect エンドポイントを使用して、サポートされている Google API のリージョン エンドポイントに接続する方法について説明します。
他の Private Service Connect 構成については、Private Service Connect をご覧ください。
ロール
リージョン Private Service Connect エンドポイントの作成に必要な権限を取得するには、VPC ネットワークに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Compute ネットワーク管理者のロール(
roles/compute.networkAdmin
) -
DNS 管理者のロール(
roles/dns.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
始める前に
Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。
$ gcloud init
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
Enable the Compute Engine, Network Connectivity Center, and Cloud DNS APIs.
Private Service Connect エンドポイントを介してアクセスするターゲット サービスの API を有効にします。たとえば、
spanner.me-central2.rep.googleapis.com
にアクセスする場合は、Cloud Spanner API を有効にします。Private Service Connect では、API は自動的に有効になりません。下り(外向き)ファイアウォール ルールでエンドポイントへのトラフィックが許可されていることを確認します。VPC ネットワークのデフォルトのファイアウォール構成には暗黙の下り(外向き)許可ルールが含まれ、このトラフィックが許可されます。トラフィックをブロックする優先度の高い下り(外向き)ルールがないことを確認します。
リージョン Private Service Connect エンドポイントを作成する
リージョン Private Service Connect エンドポイントを作成して、ターゲット Google API のリージョン エンドポイントにリクエストを送信できます。
サポートされているリージョン エンドポイントの一覧については、リージョン サービス エンドポイントをご覧ください。
コンソール
Google Cloud コンソールで、[Private Service Connect] ページに移動します。
[エンドポイントを接続] をクリックします。
[ターゲット] で [Google API] を選択します。
[範囲] リストで、[リージョン] を選択します。
[リージョン] リストで、使用するリージョンを選択します。
[ターゲット サービス] リストで、アクセスするサービスを選択します。
[エンドポイント名] にエンドポイントの名前を入力します。
[ネットワーク] で、ネットワークを選択します。
[サブネットワーク] で、サブネットワークを選択します。
[IP アドレス] で、次のいずれかを行い、IP アドレスを構成します。
- [自動割り当て] を選択して、新しい IP アドレスを自動的に割り当てて予約します。
- リストから予約済みの IP アドレスを選択します。
- [IP アドレスを作成] をクリックして、新しい IP アドレスを予約します。
省略可: VPC ネットワーク内のすべてのリージョンからエンドポイントを利用できるようにするには、[グローバル アクセスを有効にする] を選択します。
[エンドポイントを追加] をクリックします。
gcloud
gcloud network-connectivity regional-endpoints create
コマンドを使用します。
gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \ --region=REGION \ --address=ADDRESS \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --subnetwork=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --target-google-api=REP_DNS_NAME
エンドポイントを他のリージョンのリソースで使用できるようにするには、--enable-global-access
フラグを追加します。
次のように置き換えます。
ENDPOINT_NAME
: エンドポイントの名前。REGION
: エンドポイントを作成するリージョン。ADDRESS
: エンドポイントに使用する IPv4 アドレスまたは IPv6 アドレス。省略すると、サブネットワークの IPv4 アドレスが割り振られます。次のいずれかの形式で指定してください。- IPv4 アドレス(例:
10.0.0.2
)。 - IPv4 または IPv6 アドレス リソースの URI(例:
projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
)。
- IPv4 アドレス(例:
PROJECT_ID
: エンドポイントを作成するプロジェクト。NETWORK_NAME
: エンドポイントの VPC ネットワークの名前。SUBNET_NAME
: エンドポイントを接続するサブネット。REP_DNS_NAME
: 接続するリージョン サービス エンドポイントのホスト名。例:spanner.me-central2.rep.googleapis.com
API
projects.locations.regionalEndpoints.create
メソッドを使用します。
HTTP メソッドと URL:
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints?regionalEndpointId=ENDPOINT_NAME
{
"accessType": "REGIONAL",
"address": "ADDRESS",
"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
"subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
"targetGoogleApi": "REP_DNS_NAME"
}
次のように置き換えます。
PROJECT_ID
: エンドポイントのプロジェクト ID。REGION
: エンドポイントを作成するリージョン。ENDPOINT_NAME
: エンドポイントの名前。ADDRESS
: エンドポイントに使用する IPv4 アドレスまたは IPv6 アドレス。省略すると、サブネットワークの IPv4 アドレスが割り振られます。次のいずれかの形式で指定してください。- IPv4 アドレス(例:
10.0.0.2
)。 - IPv4 または IPv6 アドレス リソースの URI(例:
projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
)。
- IPv4 アドレス(例:
NETWORK_NAME
: エンドポイントの VPC ネットワークの名前。SUBNET_NAME
: エンドポイントを接続するサブネットの名前。REP_DNS_NAME
: 接続するリージョン サービス エンドポイントのホスト名。例:spanner.me-central2.rep.googleapis.com
エンドポイントを一覧取得する
構成したエンドポイントの一覧を取得できます。
コンソール
Google Cloud コンソールで、[Private Service Connect] ページに移動します。
[接続エンドポイント] タブをクリックします。
リージョン エンドポイント ターゲットを含むすべてのエンドポイントが表示されます。
gcloud
gcloud network-connectivity regional-endpoints list
コマンドを使用します。
gcloud network-connectivity regional-endpoints list \ --region=REGION
REGION
は、一覧取得するエンドポイントのリージョンに置き換えます。
API
projects.locations.regionalEndpoints.list
メソッドを使用します。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints
次のように置き換えます。
PROJECT_ID
: エンドポイントのプロジェクト ID。REGION
: 一覧取得するエンドポイントのリージョン。
エンドポイントが機能していることを確認する
エンドポイントが構成されている VPC ネットワークとリージョンに仮想マシン(VM)インスタンスを作成します。VM で次のコマンドを実行して、Private Service Connect エンドポイントが機能していることを確認します。エンドポイントは ping(ICMP)リクエストに応答しません。
IPv4 エンドポイントを検証するには、次の操作を行います。
curl --connect-to REP_DNS_NAME:443:ADDRESS:443 \ 'https://REP_DNS_NAME/PATH'
IPv6 エンドポイントを確認するには、次の操作を行います。
curl -6 --connect-to REP_DNS_NAME:443:[ADDRESS]:443 \ 'https://REP_DNS_NAME/PATH'
次のように置き換えます。
REP_DNS_NAME
: ターゲット リージョン エンドポイントの公開 DNS 名(例:spanner.me-central2.rep.googleapis.com
)。ADDRESS
: エンドポイントの IP アドレス。PATH
: このサービスによって提供されるリソースへのパス。たとえば、多くのサービスでは、パス$discovery/rest?version=v1
のディスカバリ ドキュメントが提供されています。
次のリクエストの例では、IP アドレス 192.168.1.100
のエンドポイントが me-central2
のリージョン エンドポイントから Cloud Spanner API ディスカバリ ドキュメントをリクエストできるかどうかをテストします。
curl --connect-to spanner.me-central2.rep.googleapis.com:443:192.168.1.100:443 \ 'https://spanner.me-central2.rep.googleapis.com/$discovery/rest?version=v1'
エンドポイントの限定公開 DNS エントリを作成する
クライアントが Private Service Connect エンドポイントにリクエストを送信できるように、限定公開 DNS エントリを作成する必要があります。
ターゲットのリージョン エンドポイントと同じホスト名(SERVICE.REGION.rep.DOMAIN
)を使用する限定公開ゾーンを作成し、そのゾーンに apex レコードを作成することをおすすめします。
たとえば、Private Service Connect エンドポイントのターゲットが spanner.me-central2.rep.googleapis.com
の場合、spanner.me-central2.rep.googleapis.com
の apex レコードを含む spanner.me-central2.rep.googleapis.com
の限定公開ゾーンを作成します。ドメインの apex にレコードを作成すると、他のリージョン エンドポイントの一般公開ホスト名(logging.me-central2.rep.googleapis.com
など)にアクセスできます。
以降のセクションでは、Cloud DNS を使用して限定公開ゾーンと apex DNS レコードを作成する方法について説明します。
限定公開ゾーンを作成する
コンソール
Google Cloud コンソールで、[DNS ゾーンの作成] ページに移動します。
[ゾーンのタイプ] で [限定公開] を選択します。
[ゾーン名] に名前を入力します。たとえば、Private Service Connect エンドポイントが
spanner.me-central2.rep.googleapis.com
を指している場合は、「spanner-me-central2-rep-googleapis-com
」と入力します。[DNS 名] に、ターゲット リージョン エンドポイントのホスト名を指定し、末尾にドットを付けます。例:
spanner.me-central2.rep.googleapis.com.
(省略可)説明を追加します。
[オプション] で、[デフォルト(限定公開)] を選択します。
限定公開ゾーンを表示する VPC ネットワークを選択します。選択した VPC ネットワークのみが、ゾーン内のレコードを照会できます。
[作成] をクリックします。
gcloud
dns managed-zones
create
コマンドを実行します。
gcloud dns managed-zones create ZONE_NAME \ --dns-name=REP_DNS_NAME. \ --networks=VPC_NETWORK_LIST \ --visibility=private \ --description="Private zone for REP_DNS_NAME"
次のように置き換えます。
ZONE_NAME
: ゾーンの名前(例:spanner-me-central2-rep-googleapis.com
)。DESCRIPTION
: ゾーンの説明REP_DNS_NAME
: ゾーンの DNS サフィックス。ターゲット リージョン エンドポイントのホスト名を使用します(例:spanner.me-central2.rep.googleapis.com
)。VPC_NETWORK_LIST
: ゾーンに対するクエリ実行が許可されている VPC ネットワークのカンマ区切りのリスト。
API
managedZones.create
メソッドを使用して、POST
リクエストを送信します。
HTTP メソッドと URL:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
リクエストの本文(JSON):
{
"name": "ZONE_NAME",
"dnsName": "REP_DNS_NAME.",
"description": "DESCRIPTION",
"visibility": "private",
"privateVisibilityConfig": {
"kind": "dns#managedZonePrivateVisibilityConfig",
"networks": [
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "NETWORK_1_URL"
},
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "NETWORK_2_URL"
}
]
}
}
次のように置き換えます。
PROJECT_ID
: DNS ゾーンのプロジェクト ID。ZONE_NAME
: このリージョン エンドポイント用に作成した限定公開ゾーンの名前。REP_DNS_NAME
: 作成するレコードの FQDN。ターゲットのリージョン エンドポイントのホスト名(例:spanner.me-central2.rep.googleapis.com
)を使用します。DESCRIPTION
: DNS ゾーンの説明。NETWORK_1_URL
とNETWORK_2_URL
: ゾーンに対するクエリ実行が許可されている VPC ネットワークの完全な URL(例:https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME
)。
ゾーンに DNS レコードを追加する
コンソール
Google Cloud コンソールで、Cloud DNS の [ゾーン] ページに移動します。
レコードを追加するマネージド ゾーンの名前をクリックします。
[ゾーンの詳細] ページで、[標準を追加] をクリックします。
[レコードセットの作成] ページの [DNS 名] フィールドは空白のままにします。このフィールドを空白のままにすると、ドメインの apex にリソース レコードが作成されます。
[リソース レコードのタイプ] で [
A
] を選択します。[IPv4 アドレス] フィールドに、Private Service Connect エンドポイントの IP アドレスを入力または選択します。
[作成] をクリックします。
gcloud
リソース レコードセットを追加するには、gcloud dns record-sets create
コマンドを使用します。
gcloud dns record-sets create REP_DNS_NAME \ --rrdatas=ADDRESS \ --type=RECORD_TYPE \ --ttl=TTL \ --zone=ZONE_NAME
次のように置き換えます。
REP_DNS_NAME
: 作成するレコードの FQDN。ターゲットのリージョン エンドポイントのホスト名(例:spanner.me-central2.rep.googleapis.com
)を使用します。ADDRESS
: Private Service Connect エンドポイントの IP アドレス。RECORD_TYPE
: DNS レコードのタイプ(たとえば、IPv4 レコードの場合はA
、IPv6 レコードの場合はAAAA
)。TTL
: リゾルバがこのリソース レコードセットをキャッシュに保存する秒単位の TTL(例:300
)ZONE_NAME
: このリージョン エンドポイント用に作成した限定公開ゾーンの名前。
API
リソース レコードセットを作成するには、resourceRecordSets.create
メソッドを使用します。
HTTP メソッドと URL:
POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME/rrsets
リクエストの本文(JSON):
{
"name": "REP_DNS_NAME.",
"type": "RECORD_TYPE",
"ttl": TTL,
"rrdatas": [ "ADDRESS" ]
}
次のように置き換えます。
PROJECT_ID
: DNS ゾーンのプロジェクト ID。ZONE_NAME
: このリージョン エンドポイント用に作成した限定公開ゾーンの名前。REP_DNS_NAME
: 作成するレコードの FQDN。ターゲットのリージョン エンドポイントのホスト名(例:spanner.me-central2.rep.googleapis.com
)を使用します。RECORD_TYPE
: DNS レコードのタイプ(たとえば、IPv4 レコードの場合はA
、IPv6 レコードの場合はAAAA
)。TTL
: リゾルバがこのリソース レコードセットをキャッシュに保存する秒単位の TTL(例:300
)ADDRESS
: Private Service Connect エンドポイントの IP アドレス。
限定公開のエンドポイント名を使用するようにクライアントを構成する
公開 DNS 名ではなく限定公開 DNS 名を使用するようにクライアントを構成する必要があります。カスタム エンドポイントを使用するように構成する方法については、クライアントまたはクライアント ライブラリのドキュメントをご覧ください。次のページでは、一般的なクライアントの構成手順について説明します。
Python: クライアント オプションで
api_endpoint
を構成できます。Go: ClientOptions で
WithEndpoint
を構成できます。.NET: クライアントのビルダークラスで
Endpoint
を構成できます。gcloud: gcloud CLI で
api_endpoint_overrides
を構成できます。
エンドポイントに関する詳細情報を取得する
エンドポイントの構成の詳細を表示できます。
gcloud
gcloud network-connectivity regional-endpoints describe
コマンドを使用します。
gcloud network-connectivity regional-endpoints describe \ ENDPOINT_NAME --region=REGION
次のように置き換えます。
ENDPOINT_NAME
: エンドポイントの名前。REGION
: エンドポイントのリージョン。
API
projects.locations.regionalEndpoints.get
コマンドを使用します。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME
次のように置き換えます。
PROJECT_ID
: エンドポイントのプロジェクト ID。REGION
: 一覧取得するエンドポイントのリージョン。ENDPOINT_NAME
: エンドポイントの名前。
グローバル アクセス構成を更新する
リージョン エンドポイントのターゲットを持つ Private Service Connect エンドポイントは更新できません。エンドポイントのグローバル アクセス設定を変更する必要がある場合は、エンドポイントを削除し、必要なグローバル アクセス設定を持つ新しいエンドポイントを作成します。
エンドポイントを削除する
エンドポイントを削除できます。
gcloud
gcloud network-connectivity regional-endpoints delete
コマンドを使用します。
gcloud network-connectivity regional-endpoints delete \ ENDPOINT_NAME --region=REGION
次のように置き換えます。
ENDPOINT_NAME
: エンドポイントの名前。REGION
: エンドポイントのリージョン。
API
projects.location.regionalEndpoints.delete
コマンドを使用します。
DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME
次のように置き換えます。
PROJECT_ID
: エンドポイントのプロジェクト ID。REGION
: エンドポイントのリージョン。ENDPOINT_NAME
: エンドポイントの名前。
ハイブリッド ネットワークからエンドポイントにアクセスする
Cloud Interconnect または Cloud VPN トンネル用の VLAN アタッチメントを使用して Google Cloud に接続しているネットワーク上のクライアントは、Private Service Connect エンドポイントにアクセスできます。VLAN アタッチメントまたは Cloud VPN トンネルは、エンドポイントと同じ VPC ネットワーク(または共有 VPC ネットワーク)で終端する必要があります。ピアリングされた VPC ネットワーク内のクライアントはエンドポイントに到達できません。
グローバル アクセスが構成されている場合、VLAN アタッチメントまたは Cloud VPN トンネルからのクライアント トラフィックは、別のリージョンのエンドポイントに到達できます。
VLAN アタッチメントでは、Dataplane v1 と Dataplane v2 の両方がサポートされています。Dataplane のバージョンの詳細については、Dataplane v2 をご覧ください。
相手側のネットワークのシステムを構成して、限定公開 DNS ゾーンにクエリを実行できるようにする必要があります。
Cloud DNS を使用して限定公開 DNS ゾーンを実装した場合は、次の手順を完了します。
他のネットワークが接続する VPC ネットワークにインバウンド サーバー ポリシーを作成します。
他のネットワークが接続する VPC ネットワークで、VLAN アタッチメントまたは Cloud VPN トンネルが配置されているリージョンのインバウンド フォワーダー エントリ ポイントを特定します。
VPC ネットワークに接続する VLAN アタッチメントまたは Cloud VPN トンネルと同じリージョン内のインバウンド フォワーダーのエントリ ポイントにエンドポイントの DNS 名を転送するように、他のネットワークのシステムと DNS ネームサーバーを構成します。