VPC ネットワークに接続する
このページでは、Cloud Run のサービスまたはジョブを VPC ネットワークに接続し、Cloud Run から Compute Engine VM インスタンス、Memorystore インスタンスなどの内部 IP アドレスを持つリソースの下り(送信)トラフィックを許可する方法について説明します。
サーバーレス VPC アクセス コネクタを構成するか、コネクタ不要の Direct VPC 下り(外向き)を使用することで、サービスまたはジョブが VPC ネットワークにトラフィックを送信できるようになります。
始める前に
プロジェクトに VPC ネットワークがない場合は作成します。
共有 VPC を使用する場合は、各プロダクトのサーバーレス VPC アクセスを構成する方法に関するドキュメントをご覧ください。
- Cloud Run: 共有 VPC ネットワークへの接続
- Cloud Run 関数: 共有 VPC ネットワークへの接続
- App Engine: 共有 VPC ネットワークへの接続
Cloud Deployment Manager の使用を禁止する組織のポリシーの制約がある場合、サーバーレス VPC アクセス コネクタの作成または削除はできません。コネクタを作成または削除するには、Deployment Manager の機能が必要です。
プロジェクトに信頼できるイメージのポリシーを設定している場合は、
constraints/compute.trustedimageProjects
組織のポリシーでserverless-vpc-access-images
プロジェクトを許可してください。コネクタのサブネットの要件
各コネクタには、
/28
プライマリ IPv4 アドレス範囲を持つPRIVATE
専用サブネットが必要です。このサブネットは、VM、Private Service Connect、ロードバランサなどの他のリソースでは使用できません。ホスト プロジェクトで共有 VPC ネットワークを使用するサービス プロジェクトにコネクタを作成するには、共有 VPC ネットワークのネットワーク管理者が、コネクタを作成する前にコネクタのサブネットを手動で作成する必要があります。
手動で作成した既存のサブネットをコネクタで使用できるかどうかを判断するには、サブネットの説明を取得します。
gcloud compute networks subnets describe SUBNET --region=REGION
SUBNET はサブネットの名前に、REGION はサブネットを含むリージョンに置き換えます。
出力で、次のことを確認します。
- サブネットは通常のサブネットです。Google Cloud CLI では、purpose の値は
PRIVATE
です。 - サブネットのプライマリ IPv4 アドレス範囲
ipCidrRange
は/28
です。
- サブネットは通常のサブネットです。Google Cloud CLI では、purpose の値は
コネクタが使用する VPC ネットワークを含む同じプロジェクトにサーバーレス VPC アクセス コネクタを作成する場合、コネクタを作成する前に、コネクタのサブネットを手動で作成できます。あるいは、Google Cloud によってコネクタのサブネットが自動的に作成されます。
Google Cloud によってコネクタのサブネットが作成される場合は、次の点に注意してください。
Google Cloud コンソール、Google Cloud CLI、Compute Engine API のいずれを使用しても、サブネットを一覧取得したときに、コネクタ用に自動的に作成されたサブネットは表示されません。
コネクタ用に自動的に作成されたサブネットの説明は取得できません。
自動的に作成されたサブネットは、VPC ネットワークの説明の取得時に表示されるサブネットのリストに含まれています。
既存のサブネットを一覧取得して、使用済みの IP アドレス範囲を確認する方法など、サブネットの詳細についてはサブネットを操作するをご覧ください。
制限事項
IPv6 トラフィックはサポートされません。
コネクタを作成
公共のインターネットを使用せずに VPC ネットワークにリクエストを送信して対応するレスポンスを受信する場合は、サーバーレス VPC アクセス コネクタを使用できます。
コネクタがその VPC ネットワークと同じプロジェクトに配置されている場合、既存のサブネットを使用してコネクタを作成するか、コネクタと新しいサブネットを作成することができます。
コネクタがサービス プロジェクトに配置されていて、共有 VPC ネットワークを使用している場合、コネクタとそれに関連付けられた VPC ネットワークは異なるプロジェクト内にあります。コネクタとその VPC ネットワークが異なるプロジェクトにある場合は、コネクタを作成する前に、共有 VPC ネットワーク管理者が共有 VPC ネットワークにコネクタのサブネットを作成する必要があります。さらに、既存のサブネットを使用してコネクタを作成することが求められます。
サブネットの要件の詳細については、コネクタのサブネットの要件をご覧ください。
マシンタイプやスケーリングなど、コネクタのスループットの詳細については、スループットとスケーリングをご覧ください。
コネクタは、Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して作成できます。
コンソール
サーバーレス VPC アクセスの概要ページに移動します。
[コネクタを作成] をクリックします。
[名前] フィールドに、Compute Engine の命名規則に沿ってコネクタの名前を入力します。ただし、名前の長さは 21 文字未満とし、ハイフン(-)は 2 文字としてカウントする必要があります。
[リージョン] フィールドで、コネクタのリージョンを選択します。これは、サーバーレス サービスのリージョンと一致する必要があります。
サービスまたはジョブが
us-central
またはeurope-west
リージョンにある場合、us-central1
またはeurope-west1
を使用します。[ネットワーク] フィールドで、コネクタを接続する VPC ネットワークを選択します。
[サブネット] フィールドで、次のいずれかのオプションを選択します。
既存のサブネットを使用してコネクタを作成する: [サブネット] フィールドで既存のサブネットを選択します。
コネクタと新しいサブネットを作成する: [サブネット] フィールドで [カスタム IP 範囲] を選択します。次に、未使用の
/28
CIDR(10.8.0.0/28
など)の最初のアドレスを入力します。これは、Google Cloud でコネクタの VPC ネットワークに作成する新しいサブネットのプライマリ IPv4 アドレス範囲として使用します。指定した IP 範囲が、コネクタの VPC ネットワークにすでに存在するルートと競合しないようにしてください。新しいサブネットの名前は aet- という接頭辞で始まります。
(省略可)コネクタを詳細に制御するためのスケーリング オプションを設定するには、[スケーリング設定を表示] をクリックしてスケーリング フォームを表示します。
- コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックの使用量に応じて指定された最大値にスケールアップしますが、トラフィックが減少してもスケールダウンしません。
2
~10
の範囲の値を使用する必要があります。 - [インスタンス タイプ] メニューで、コネクタに使用するマシンタイプを選択するか、デフォルトの
e2-micro
を使用します。インスタンス タイプを選択すると、右側にコスト サイドバーが表示され、帯域幅とコストの見積もりが表示されます。
- コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックの使用量に応じて指定された最大値にスケールアップしますが、トラフィックが減少してもスケールダウンしません。
[作成] をクリックします。
コネクタの使用準備が整うと、コネクタ名の横に緑色のチェックマークが表示されます。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
gcloud
コンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Serverless VPC Access API が有効になっていることを確認します。
gcloud services enable vpcaccess.googleapis.com
次のいずれかのオプションを使用してコネクタを作成します。
より詳しい情報とオプションの引数については、
gcloud
のリファレンスをご覧ください。既存のサブネットを使用してコネクタを作成する:
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region REGION \ --subnet SUBNET_NAME \ --subnet-project HOST_PROJECT_ID \ --min-instances MIN \ --max-instances MAX \ --machine-type MACHINE_TYPE
次のように置き換えます。
CONNECTOR_NAME
: Compute Engine の命名規則に一致するコネクタの名前。ただし、名前の長さは 21 文字未満とし、ハイフン(-)は 2 文字としてカウントする必要があります。REGION
: サーバーレス サービスまたはジョブのリージョンと一致しているコネクタのリージョン。サービスまたはジョブがus-central
またはeurope-west
にある場合は、us-central1
またはeurope-west1
を使用します。SUBNET_NAME
: 既存のサブネットの名前。HOST_PROJECT_ID
: 共有 VPC ホスト プロジェクト ID。コネクタと既存のサブネットが同じプロジェクトに配置されている場合は、--subnet-project
フラグを省略します。MIN
: コネクタに使用するインスタンスの最小数。2
(デフォルト)~9
の範囲の整数を使用します。MAX
: コネクタに使用するインスタンスの最大数。3
~10
(デフォルト)の範囲の整数を使用します。コネクタが最大インスタンス数までスケールアップした場合、スケールダウンは行われません。MACHINE_TYPE
:f1-micro
、e2-micro
、e2-standard-4
のいずれかにする必要があります。
コネクタと新しいサブネットを作成する:
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \ --region REGION \ --network VPC_NETWORK \ --range IP_RANGE --min-instances MIN \ --max-instances MAX \ --machine-type MACHINE_TYPE
次のように置き換えます。
CONNECTOR_NAME
: Compute Engine の命名規則に一致するコネクタの名前。ただし、名前の長さは 21 文字未満とし、ハイフン(-)は 2 文字としてカウントする必要があります。REGION
: サーバーレス サービスまたはジョブのリージョンと一致しているコネクタのリージョン。サービスまたはジョブがus-central
またはeurope-west
にある場合は、us-central1
またはeurope-west1
を使用します。VPC_NETWORK
: コネクタを接続する VPC ネットワークの名前。コネクタと VPC ネットワークを同じプロジェクトに配置する必要があります。IP_RANGE
: Google Cloud でコネクタの VPC ネットワークに作成する新しいサブネットのプライマリ IPv4 アドレス範囲として使用する未使用の/28
CIDR(10.8.0.0/28
など)を指定します。指定した IP 範囲が、コネクタの VPC ネットワークにすでに存在するルートと競合しないようにしてください。新しいサブネットの名前は aet- という接頭辞で始まります。MIN
: コネクタに使用するインスタンスの最小数。2
(デフォルト)~9
の範囲の整数を使用します。MAX
: コネクタに使用するインスタンスの最大数。3
~10
(デフォルト)の範囲の整数を使用します。コネクタが最大インスタンス数までスケールアップした場合、スケールダウンは行われません。MACHINE_TYPE
:f1-micro
、e2-micro
、e2-standard-4
のいずれかにする必要があります。
使用する前に、コネクタが
READY
状態になっていることを確認します。gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \ --region REGION
次のように置き換えます。
CONNECTOR_NAME
: コネクタの名前。これは、前のステップで指定した名前です。REGION
: コネクタのリージョン。これは、前の手順で指定したリージョンです。
出力には、
state: READY
という行が含まれます。
Terraform
Terraform リソースを使用して、vpcaccess.googleapis.com
API を有効にできます。
Terraform モジュールを使用して VPC ネットワークとサブネットを作成し、コネクタを作成できます。
コネクタを使用するようにサーバーレス環境を構成する
サーバーレス VPC アクセス コネクタを作成したら、サーバーレス環境の手順に沿って、コネクタを使用するようにサーバーレス環境を構成します。
コネクタを使用するように Cloud Run を構成する
新しいサービスを作成する場合、または新しいリビジョンをデプロイする場合に、Google Cloud コンソール、Google Cloud CLI、YAML ファイル、または Terraform リソースで、コネクタを使用するようにサービスを構成できます。
コンソール
Google Cloud コンソールで、[Cloud Run] に移動します。
[コンテナをデプロイ] をクリックし、[サービス] を選択して、新しいサービスを構成します。既存のサービスを構成する場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[接続] タブをクリックします。
- [VPC コネクタ] フィールドで、使用するコネクタを選択するか、[なし] を選択してサービスを VPC ネットワークから切断します。
[作成] または [デプロイ] をクリックします。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
デプロイ中にコネクタを指定するには、
--vpc-connector
フラグを使用します。gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
SERVICE
は、実際のサービス名に置き換えます。IMAGE_URL
を置き換えます。CONNECTOR_NAME
は、コネクタの名前に置き換えます。コネクタは、共有 VPC のホスト プロジェクト内にある場合、完全に指定された名前である必要があります。次に例を示します。 ここで、HOST_PROJECT_ID はホスト プロジェクトの ID、CONNECTOR_REGION はコネクタのリージョン、CONNECTOR_NAME はコネクタに付けた名前です。projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
既存のサービスのコネクタを接続、更新、削除するには、必要に応じて次のいずれかのフラグを指定して
gcloud run services update
コマンドを使用します。たとえば、コネクタを接続または更新するには:
gcloud run services update SERVICE --vpc-connector CONNECTOR_NAME
SERVICE
は、実際のサービス名に置き換えます。CONNECTOR_NAME
は、コネクタの名前に置き換えます。
YAML
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
最上位の
spec
属性の下のannotations
属性にあるrun.googleapis.com/vpc-access-connector
属性を追加または更新します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
SERVICE
は、実際の Cloud Run サービスの名前に置き換えます。CONNECTOR_NAME
は、コネクタの名前に置き換えます。コネクタは、共有 VPC のホスト プロジェクト内にある場合、完全に指定された名前である必要があります。次に例を示します。 ここで、HOST_PROJECT_ID はホスト プロジェクトの ID、CONNECTOR_REGION はコネクタのリージョン、CONNECTOR_NAME はコネクタに付けた名前です。projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
次のコマンドを使用して、サービスを新しい構成に置き換えます。
gcloud beta run services replace service.yaml
Terraform
Terraform リソースを使用してサービスを作成し、コネクタを使用するように構成できます。
コネクタを使用するように Cloud Run functions を構成する
Google Cloud コンソールまたは Google Cloud CLI で、コネクタを使用する関数を構成できます。
コンソール
Google Cloud コンソールで Cloud Run functions の概要ページに移動します。
[関数を作成] をクリックします。または、既存の関数をクリックしてその詳細ページに移動し、[編集] をクリックします。
[ランタイム、ビルド、接続の設定] をクリックして詳細設定を表示します。
[接続] タブの [下り(外向き)設定] で、[VPC コネクタ] フィールドにコネクタの名前を入力します。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
gcloud functions deploy
コマンドを使用して関数をデプロイし、--vpc-connector
フラグを指定します。gcloud functions deploy FUNCTION_NAME \ --vpc-connector CONNECTOR_NAME \ FLAGS...
ここで
FUNCTION_NAME
は、関数の名前です。CONNECTOR_NAME
は、コネクタの名前です。 コネクタは、共有 VPC のホスト プロジェクト内にある場合、完全に指定された名前である必要があります。次に例を示します。 ここで、HOST_PROJECT_ID はホスト プロジェクトの ID、CONNECTOR_REGION はコネクタのリージョン、CONNECTOR_NAME はコネクタに付けた名前です。projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
FLAGS...
は、関数のデプロイ時に渡す他のフラグです。
コネクタ経由で転送されるリクエストを制御する方法については、下り(外向き)設定をご覧ください。
コネクタを使用するように App Engine を構成する
Python 2
App Engine の URL 取得サービスの使用を中止します。
デフォルトでは、すべてのリクエストは URL 取得サービスを通じて転送されます。これにより、VPC ネットワークへのリクエストは失敗します。このデフォルトを無効にするには、URL 取得を無効にしてすべての送信リクエストの処理をできないようにするをご覧ください。
必要に応じて、個々のリクエストに
urlfetch
ライブラリを直接使用することもできますが、この方法はおすすめしません。サーバーレス VPC アクセス フィールドを
app.yaml
ファイルに追加します。vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
以下を置き換えます。
PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。 コネクタは、共有 VPC のホスト プロジェクト内にある場合、ホスト プロジェクトの ID である必要があります。REGION
を、コネクタが存在するリージョンに置き換えます。CONNECTOR_NAME
を、コネクタの名前に置き換えます。
サービスをデプロイします。
gcloud app deploy
サービスをデプロイすると、内部 IP アドレスへのリクエストを送信して VPC ネットワーク内のリソースにアクセスできるようになります。
Java 8
App Engine の URL 取得サービス
URLFetchService
の使用を中止します。サーバーレス VPC アクセス要素をサービスの
appengine-web.xml
ファイルに追加します。<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> </vpc-access-connector>
以下を置き換えます。
PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。 コネクタは、共有 VPC のホスト プロジェクト内にある場合、ホスト プロジェクトの ID である必要があります。REGION
を、コネクタが存在するリージョンに置き換えます。CONNECTOR_NAME
を、コネクタの名前に置き換えます。
サービスをデプロイします。
gcloud app deploy WEB-INF/appengine-web.xml
サービスをデプロイすると、内部 IP アドレスへのリクエストを送信して VPC ネットワーク内のリソースにアクセスできるようになります。
Go 1.11
App Engine の URL 取得サービスの使用を中止します。
サーバーレス VPC アクセスは URL 取得をサポートしていません。URL 取得を使用して送信されたリクエストは、サーバーレス VPC アクセスの設定を無視します。代わりに、ソケットを使用して送信接続を行ってください。
サーバーレス VPC アクセス フィールドを
app.yaml
ファイルに追加します。vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
以下を置き換えます。
PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。REGION
を、コネクタが存在するリージョンに置き換えますCONNECTOR_NAME
を、コネクタの名前に置き換えます
サービスをデプロイします。
gcloud app deploy
サービスをデプロイすると、内部 IP アドレスへのリクエストを送信して VPC ネットワーク内のリソースにアクセスできるようになります。
その他のすべてのランタイム
サーバーレス VPC アクセス フィールドを
app.yaml
ファイルに追加します。vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
以下を置き換えます。
PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。 コネクタは、共有 VPC のホスト プロジェクト内にある場合、ホスト プロジェクトの ID である必要があります。REGION
を、コネクタが存在するリージョンに置き換えます。CONNECTOR_NAME
を、コネクタの名前に置き換えます。
サービスをデプロイします。
gcloud app deploy
サービスをデプロイすると、内部 IP アドレスへのリクエストを送信して VPC ネットワーク内のリソースにアクセスできるようになります。
コネクタのファイアウォール ルールを構成する
サービス プロジェクトのコネクタに必要なファイアウォール ルール
スタンドアロン VPC ネットワークまたは共有 VPC ネットワークのホスト プロジェクトでコネクタを作成すると、Google Cloud はコネクタの操作に必要なすべてのファイアウォール ルールを作成します。詳細については、スタンドアロン VPC ネットワークまたは共有 VPC ホスト プロジェクト内のコネクタのファイアウォール ルールをご覧ください。
ただし、サービス プロジェクトでコネクタを作成し、コネクタがホスト プロジェクトの共有 VPC ネットワークをターゲットとする場合は、次の範囲からコネクタの操作に必要なトラフィックを許可するファイアウォール ルールを追加する必要があります。
- サーバーレス インフラストラクチャの IP 範囲:
35.199.224.0/19
- ヘルスチェック プローブの IP 範囲:
35.191.0.0/16
、35.191.192.0/18
、130.211.0.0/22
これらの範囲は、Cloud Run、Cloud Run functions、App Engine スタンダード環境の基盤となる Google インフラストラクチャで使用されます。各サーバーレス リソースが接続先のコネクタとのみ通信するように、これらの IP アドレスからのすべてのリクエストは Google インフラストラクチャから送信されます。
また、コネクタのサブネットから VPC ネットワーク内のリソースへのトラフィックを許可する必要があります。
この操作を行うには、ホスト プロジェクトで次のいずれかのロールが必要です。
- オーナーのロール(
roles/owner
) - Compute セキュリティ管理者のロール(
roles/compute.securityAdmin
) compute.firewalls.create
権限が有効な Identity and Access Management(IAM)のカスタムロール
基本構成の場合、共有 VPC ネットワークに接続されたサービス プロジェクトにあるサーバーレス リソースが、ネットワーク内の任意のリソースにリクエストを送信できるようにルールを適用します。
これらのルールを適用するには、ホスト プロジェクトで次のコマンドを実行します。
Google のサーバーレス インフラストラクチャとヘルスチェック プローブからのリクエストが、ネットワーク内のすべてのコネクタに到達できるようにするファイアウォール ルールを作成します。これらのコマンドで、UDP ポートと TCP ポートはそれぞれプロキシとして、および HTTP ヘルスチェックに使用されます。指定したポートは変更しないでください。
gcloud compute firewall-rules create serverless-to-vpc-connector \ --allow tcp:667,udp:665-666,icmp \ --source-ranges=35.199.224.0/19 \ --direction=INGRESS \ --target-tags vpc-connector \ --network=VPC_NETWORK
gcloud compute firewall-rules create vpc-connector-to-serverless \ --allow tcp:667,udp:665-666,icmp \ --destination-ranges=35.199.224.0/19 \ --direction=EGRESS \ --target-tags vpc-connector \ --network=VPC_NETWORK
gcloud compute firewall-rules create vpc-connector-health-checks \ --allow tcp:667 \ --source-ranges=35.191.0.0/16,35.191.192.0/18,130.211.0.0/22 \ --direction=INGRESS \ --target-tags vpc-connector \ --network=VPC_NETWORK
VPC_NETWORK
は、コネクタを接続する VPC ネットワークの名前に置き換えます。VPC ネットワークに上り(内向き)ファイアウォール ルールを作成し、このネットワークをターゲットとするコネクタからのリクエストを許可します。
gcloud compute firewall-rules create vpc-connector-requests \ --allow tcp,udp,icmp \ --direction=INGRESS \ --source-tags vpc-connector \ --network=VPC_NETWORK
このルールにより、コネクタに対して、ネットワーク内のすべてのリソースへのアクセスが許可されます。サーバーレス VPC アクセスを使用してサーバーレス環境でアクセスできるリソースを制限するには、コネクタ VM による VPC ネットワーク リソースへのアクセスを制限するをご覧ください。
特定のコネクタに対するファイアウォール ルールを作成する
サービス プロジェクトのコネクタに必要なファイアウォール ルールの手順に沿って、すべてのコネクタと、今後作成されるコネクタの両方に適用されるファイアウォール ルールを作成します。これが必要でなく、特定のコネクタだけに対するルールを作成する場合は、それらのコネクタにのみ適用されるようにルールの範囲を設定できます。
ルールの対象範囲を特定のコネクタに限定するには、次のいずれかの仕組みを使用できます。
- ネットワーク タグ: 各コネクタには、
vpc-connector
とvpc-connector-REGION-CONNECTOR_NAME
の 2 つのネットワーク タグがあります。後者のフォーマットを使用して、ファイアウォール ルールの範囲を特定のコネクタに制限します。 - IP 範囲: このルールは上り(内向き)ルールでは機能しないため、下り(外向き)ルールにのみ使用します。コネクタ サブネットの IP 範囲を使用して、ファイアウォール ルールの範囲を単一の VPC コネクタに制限できます。
コネクタ VM による VPC ネットワーク リソースへのアクセスを制限する
VPC ファイアウォール ルールまたはファイアウォール ポリシーのルールを使用して、コネクタのターゲット VPC ネットワーク内のリソースへのアクセスを制限できます。これらの制限は、次のいずれかの方法で実現できます。
- ターゲットがコネクタ VM のアクセスを制限するリソースを表し、ソースがコネクタ VM を表す上り(内向き)ルールを作成します。
- ターゲットがコネクタ VM を表し、宛先がコネクタ VM へのアクセスを制限するリソースを表す下り(外向き)ルールを作成します。
次の例は、各方法を示しています。
上り(内向き)ルールを使用してアクセスを制限する
ネットワーク タグまたは CIDR 範囲を選択して、VPC ネットワークへの受信トラフィックを制御します。
ネットワーク タグ
次の手順は、コネクタのネットワーク タグに基づいて、VPC ネットワークへのアクセスを制限する上り(内向き)ルールを作成する方法を示しています。
ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。
- Compute セキュリティ管理者のロール
compute.firewalls.create
権限が有効にされているカスタム IAM ロール
VPC ネットワーク間のコネクタのトラフィックを拒否します。
コネクタのネットワーク タグからの上り(内向き)を拒否するには、VPC ネットワークで優先度 1000 未満の上り(内向き)ファイアウォール ルールを作成します。これによって、デフォルトでサーバーレス VPC アクセスが VPC ネットワークに作成する暗黙的なファイアウォール ルールがオーバーライドされます。
gcloud compute firewall-rules create RULE_NAME \ --action=DENY \ --rules=PROTOCOL \ --source-tags=VPC_CONNECTOR_NETWORK_TAG \ --direction=INGRESS \ --network=VPC_NETWORK \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
deny-vpc-connector
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。
ah
、all
、esp
、icmp
、ipip
、sctp
。VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。
- ユニバーサル ネットワーク タグ:
vpc-connector
一意のネットワーク タグ:
vpc-connector-REGION-CONNECTOR_NAME
以下のように置き換えます。
- REGION: 制限するコネクタのリージョン
- CONNECTOR_NAME: 制限するコネクタの名前
コネクタ ネットワーク タグの詳細については、ネットワーク タグをご覧ください。
- ユニバーサル ネットワーク タグ:
VPC_NETWORK: VPC ネットワークの名前
PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。
コネクタ トラフィックを受信する必要があるリソースに対するコネクタのトラフィックを許可します。
allow
フラグとtarget-tags
フラグを使用して、VPC コネクタでアクセスする VPC ネットワーク内のリソースに対して上り(内向き)ファイアウォール ルールを作成します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。gcloud compute firewall-rules create RULE_NAME \ --allow=PROTOCOL \ --source-tags=VPC_CONNECTOR_NETWORK_TAG \ --direction=INGRESS \ --network=VPC_NETWORK \ --target-tags=RESOURCE_TAG \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-vpc-connector-for-select-resources
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。これは、前のステップで指定したネットワーク タグと一致する必要があります。
- ユニバーサル ネットワーク タグ:
vpc-connector
一意のネットワーク タグ:
vpc-connector-REGION-CONNECTOR_NAME
以下のように置き換えます。
- REGION: 制限するコネクタのリージョン
- CONNECTOR_NAME: 制限するコネクタの名前
コネクタ ネットワーク タグの詳細については、ネットワーク タグをご覧ください。
- ユニバーサル ネットワーク タグ:
VPC_NETWORK: VPC ネットワークの名前
RESOURCE_TAG: VPC コネクタがアクセスする VPC リソースのネットワーク タグ。
PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。
ファイアウォール ルールの作成に必須のフラグとオプション フラグの詳細については、gcloud compute firewall-rules create
のドキュメントをご覧ください。
CIDR 範囲
次の手順は、コネクタの CIDR 範囲に基づいて、VPC ネットワークへのアクセスを制限する上り(内向き)ルールを作成する方法を示しています。
ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。
- Compute セキュリティ管理者のロール
compute.firewalls.create
権限が有効にされているカスタム IAM ロール
VPC ネットワーク間のコネクタのトラフィックを拒否します。
コネクタの CIDR 範囲からの上り(内向き)を拒否するには、VPC ネットワークで優先度 1000 未満の上り(内向き)ファイアウォール ルールを作成します。これによって、デフォルトでサーバーレス VPC アクセスが VPC ネットワークに作成する暗黙的なファイアウォール ルールがオーバーライドされます。
gcloud compute firewall-rules create RULE_NAME \ --action=DENY \ --rules=PROTOCOL \ --source-ranges=VPC_CONNECTOR_CIDR_RANGE \ --direction=INGRESS \ --network=VPC_NETWORK \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
deny-vpc-connector
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。
ah
、all
、esp
、icmp
、ipip
、sctp
。VPC_CONNECTOR_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲
VPC_NETWORK: VPC ネットワークの名前
PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。
コネクタ トラフィックを受信する必要があるリソースに対するコネクタのトラフィックを許可します。
allow
フラグとtarget-tags
フラグを使用して、VPC コネクタでアクセスする VPC ネットワーク内のリソースに対して上り(内向き)ファイアウォール ルールを作成します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。gcloud compute firewall-rules create RULE_NAME \ --allow=PROTOCOL \ --source-ranges=VPC_CONNECTOR_CIDR_RANGE \ --direction=INGRESS \ --network=VPC_NETWORK \ --target-tags=RESOURCE_TAG \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-vpc-connector-for-select-resources
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。VPC_CONNECTOR_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲
VPC_NETWORK: VPC ネットワークの名前
RESOURCE_TAG: VPC コネクタがアクセスする VPC リソースのネットワーク タグ。
PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。
ファイアウォール ルールの作成に必要なフラグとオプション フラグの詳細については、gcloud compute firewall-rules create
のドキュメントをご覧ください。
下り(外向き)ルールを使用してアクセスを制限する
次の手順は、コネクタのアクセスを制限する下り(外向き)ルールを作成する方法を示しています。
ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。
- Compute セキュリティ管理者のロール
compute.firewalls.create
権限が有効にされているカスタム IAM ロール
コネクタからの下り(外向き)トラフィックを拒否します。
サーバーレス VPC アクセス コネクタに下り(外向き)ファイアウォール ルールを作成し、確立済みのレスポンスを除き、発信先に送信トラフィックを送ることができないようにします。
gcloud compute firewall-rules create RULE_NAME \ --action=DENY \ --rules=PROTOCOL \ --direction=EGRESS \ --target-tags=VPC_CONNECTOR_NETWORK_TAG \ --network=VPC_NETWORK \ --priority=PRIORITY
以下を置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
deny-vpc-connector
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。
ah
、all
、esp
、icmp
、ipip
、sctp
。VPC_CONNECTOR_NETWORK_TAG: 既存のすべての VPC コネクタと今後作成される VPC コネクタにルールを適用する場合は、ユニバーサル VPC コネクタのネットワーク タグを使用します。または、特定のコネクタを制御する場合は、一意の VPC コネクタのネットワーク タグを使用します。
VPC_NETWORK: VPC ネットワークの名前
PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。
コネクタがアクセスするように設定した CIDR 範囲内に宛先が存在する場合に、下り(外向き)トラフィックを許可します。
allow
フラグとdestination-ranges
フラグを使用して、特定の宛先範囲でコネクタからの下り(外向き)トラフィックを許可するファイアウォール ルールを作成します。宛先範囲には、コネクタにアクセスを許可する VPC ネットワーク内のリソースの CIDR 範囲を設定します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。gcloud compute firewall-rules create RULE_NAME \ --allow=PROTOCOL \ --destination-ranges=RESOURCE_CIDR_RANGE \ --direction=EGRESS \ --network=VPC_NETWORK \ --target-tags=VPC_CONNECTOR_NETWORK_TAG \ --priority=PRIORITY
次のように置き換えます。
RULE_NAME: 新しいファイアウォール ルールの名前。例:
allow-vpc-connector-for-select-resources
PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは
tcp
またはudp
です。たとえば、tcp:80,udp
は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow
フラグのドキュメントをご覧ください。RESOURCE_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲
VPC_NETWORK: VPC ネットワークの名前
VPC_CONNECTOR_NETWORK_TAG: 既存のすべての VPC コネクタと今後作成される VPC コネクタにルールを適用する場合は、ユニバーサル VPC コネクタのネットワーク タグを使用します。または、特定のコネクタを制御する場合は、一意の VPC コネクタのネットワーク タグを使用します。前のステップで一意のネットワーク タグを使用した場合は、一意のネットワーク タグを使用します。
PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。
ファイアウォール ルールの作成に必須のフラグとオプション フラグの詳細については、gcloud compute firewall-rules create
のドキュメントをご覧ください。
コネクタを更新する
Google Cloud コンソール、Google Cloud CLI、または API を使用して、コネクタの次の属性を更新、モニタリングできます。
- マシン(インスタンス)タイプ
- インスタンスの最小数と最大数
- 最近のスループット、インスタンス数、CPU 使用率
マシンタイプの更新
コンソール
サーバーレス VPC アクセスの概要ページに移動します。
編集するコネクタを選択して、[編集] をクリックします。
[インスタンスのタイプ] リストで、希望するマシン(インスタンス)タイプを選択します。使用可能なマシンタイプについては、スループットとスケーリングのドキュメントをご覧ください。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
コネクタのマシンタイプを更新するには、ターミナルで次のコマンドを実行します。
次のように置き換えます。gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --machine-type=MACHINE_TYPE
CONNECTOR_NAME
: コネクタの名前。REGION
: コネクタのリージョンの名前。MACHINE_TYPE
: 希望するマシンタイプ。使用可能なマシンタイプについては、スループットとスケーリングのドキュメントをご覧ください。
インスタンスの最小数と最大数を減らす
インスタンスの最小数と最大数を減らすには、次の操作を行います。
- 希望する値で新しいコネクタを作成します。
- 新しいコネクタを使用するようにサービスまたは関数を更新します。
- トラフィックを移行したら、古いコネクタを削除します。
詳細については、サーバーレス VPC アクセス コネクタを作成するをご覧ください。
インスタンスの最小数と最大数を増やす
コンソール
サーバーレス VPC アクセスの概要ページに移動します。
編集するコネクタを選択して、[編集] をクリックします。
[最小インスタンス数] フィールドで、希望するインスタンスの最小数を選択します。
このフィールドの設定可能な最小値は現在の値です。このフィールドの設定可能な最大値は、[最大インスタンス数] フィールドの現在の値から 1 を引いた値になります。たとえば、[最大インスタンス数] フィールドの値が 8 の場合、[最小インスタンス数] フィールドの設定可能な最大値は 7 になります。
[最大インスタンス数] フィールドで、希望するインスタンスの最大数を選択します。
このフィールドの設定可能な最小値は現在の値です。このフィールドの設定可能な最大値は 10 です。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
コネクタのインスタンスの最小数または最大数を増やすには、ターミナルで次のコマンドを実行します。
次のように置き換えます。gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --min-instances=MIN_INSTANCES --max-instances=MAX_INSTANCES
CONNECTOR_NAME
: コネクタの名前。REGION
: コネクタのリージョンの名前。MIN_INSTANCES
: 希望する最小インスタンス数。- このフィールドの設定可能な最小値は
min_instances
の現在の値です。現在の値を確認するには、現在の属性値を確認するをご覧ください。 - このフィールドに設定可能な最大値は、現在の
max_instances
の値から 1 を引いた値になります。これは、min_instances
をmax_instances
より小さくする必要があるためです。たとえば、max_instances
が 8 の場合、このフィールドに設定可能な最大値は 7 です。コネクタがデフォルトのmax-instances
値(10)を使用する場合、このフィールドに設定可能な最大値は 9 になります。max-instances
の値を確認するには、現在の属性値を確認するをご覧ください。
- このフィールドの設定可能な最小値は
MAX_INSTANCES
:- このフィールドの設定可能な最小値は、
max_instances
の現在の値です。現在の値を確認するには、現在の属性値を確認するをご覧ください。 - このフィールドに設定可能な最大値は 10 です。
インスタンスの最大数を増やさずに最小数だけを増やす場合でも、インスタンスの最大数を指定する必要があります。 逆に、インスタンスの最小数を更新せずに最大数を更新する場合でも、インスタンスの最小数を指定する必要があります。インスタンスの最小数または最大数を現在の値のままにするには、現在の値を指定します。現在の値を確認するには、現在の属性値を確認するをご覧ください。
- このフィールドの設定可能な最小値は、
現在の属性値を確認する
コネクタの現在の属性値を確認するには、ターミナルで次のコマンドを実行します。
gcloud compute networks vpc-access connectors describe CONNECTOR_NAME --region=REGION --project=PROJECT
CONNECTOR_NAME
: コネクタの名前。REGION
: コネクタのリージョンの名前。PROJECT
: Google Cloud プロジェクトの名前。
コネクタの使用状況をモニタリングする
使用状況の推移をモニタリングすると、コネクタの設定を調整するタイミングを判断するのに役立ちます。たとえば、CPU 使用率が急激に上昇した場合は、より良い結果を得るためにインスタンスの最大数を増やすことができます。また、スループットが上限に近づいている場合は、より大きなマシンタイプに切り替えることができます。
Google Cloud コンソールを使用してコネクタのスループット、インスタンス数、CPU 使用率の指標の推移を表示するには:
サーバーレス VPC アクセスの概要ページに移動します。
モニタリングするコネクタの名前をクリックします。
表示日数を 1~90 日の間で選択します。
[スループット] グラフで、グラフにカーソルを合わせるとコネクタの最近のスループットが表示されます。
[インスタンス数] グラフで、グラフにカーソルを合わせるとコネクタによって最近使用されたインスタンスの数が表示されます。
[CPU 使用率] グラフで、グラフにカーソルを合わせるとコネクタの最新の CPU 使用率が表示されます。グラフには、CPU 使用率のインスタンス間分布が表示されます(50 、95、99 パーセンタイル)。
コネクタを削除する
コネクタを削除する前に、接続中のサービスまたはジョブがないことを確認してください。
共有 VPC ホスト プロジェクトでコネクタを設定した共有 VPC ユーザーの場合は、gcloud compute networks vpc-access connectors describe
コマンドを使用して、特定のコネクタを使用するサービスまたはジョブが存在するプロジェクトを一覧表示できます。
コネクタを削除するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。
コンソール
Google Cloud コンソールで、サーバーレス VPC アクセスの概要ページに移動します。
削除するコネクタを選択します。
[削除] をクリックします。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
コネクタを削除するには、次の
gcloud
コマンドを使用します。gcloud compute networks vpc-access connectors delete CONNECTOR_NAME --region=REGION
以下を置き換えます。
- CONNECTOR_NAME は、削除するコネクタの名前に置き換えます。
- REGION は、コネクタが配置されているリージョンに置き換えます。
コネクタではなくダイレクト VPC を使用するように Cloud Run 環境を構成する
Cloud Run のサービスが下り(外向き)トラフィックを VPC ネットワークに直接送信できるようにし、Compute Engine VM インスタンスや Memorystore インスタンス、内部 IP アドレスを持つリソースなどへのアクセスを可能にします。
ダイレクト VPC を使用するようにサービスを構成する
ダイレクト VPC 下り(外向き)を使用すると、Cloud Run サービスはサーバーレス VPC アクセス コネクタを使用せずに VPC ネットワークにトラフィックを送信できます。サービス自体と同様に、ネットワーク費用もゼロにスケーリングされます。また、Cloud Run サービス リビジョンに直接ネットワーク タグを追加して、VPC ファイアウォール ルールの適用など、よりきめ細かいネットワーク セキュリティを実現することもできます。
サービスにダイレクト VPC 下り(外向き)を構成するには、Google Cloud コンソール、Google Cloud CLI、YAML、または Terraform を使用します。
コンソール
デプロイ先の新しいサービスを構成する場合は、[サービスを作成] をクリックします。既存のサービスを構成してデプロイする場合は、サービスをクリックし、[新しいリビジョンの編集とデプロイ] をクリックします。
新しいサービスを構成する場合は、必要に応じて最初のサービス設定のページに入力してから、[コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックしてサービス構成ページを開きます。
[ネットワーキング] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリックします。
[VPC に直接トラフィックを送信] をクリックします。
[ネットワーク] フィールドで、トラフィックを送信する VPC ネットワークを選択します。
[サブネット] フィールドで、サービスが IP アドレスを受信するサブネットを選択します。 同じサブネットに複数のサービスをデプロイできます。
省略可: サービスに関連付けるネットワーク タグの名前を入力します。ネットワーク タグは、リビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2
などの異なるネットワーク タグを設定できます。[トラフィック ルーティング] で、次のいずれかを選択します。
- プライベート IP へのリクエストだけを VPC にルーティングし、VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- すべてのトラフィックを VPC にルーティングする。すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
[作成] または [デプロイ] をクリックします。
サービスが VPC ネットワーク上にあることを確認するには、サービスをクリックして、[ネットワーキング] タブをクリックします。ネットワークとサブネットが [VPC] カードに一覧表示されます。
これで、ファイアウォール ルールで許可されるように、Cloud Run サービスから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
gcloud
Google Cloud CLI からコネクタなしで Cloud Run サービスをデプロイするには:
gcloud
コンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Compute Engine API が有効になっていることを確認します。
gcloud services enable compute.googleapis.com
次のコマンドを使用して Cloud Run サービスをデプロイします。
gcloud run deploy SERVICE_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
以下のように置き換えます。
- SERVICE_NAME は、Cloud Run サービスの名前に置き換えます。
- IMAGE_URL: コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/hello:latest
など)。Artifact Registry を使用する場合は、リポジトリ REPO_NAME がすでに作成されている必要があります。URL の形状はLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
です - NETWORK: VPC ネットワークの名前。
-
SUBNET: サブネットの名前。サブネットは
/26
以上である必要があります。VPC 下り(外向き)は IPv4 範囲(RFC 1918、RFC 6598、クラス E)をサポートします。複数のサービスまたはジョブを同じサブネットにデプロイまたは実行できますが、サブネットを既存のコネクタで共有することはできません。 - (省略可)NETWORK_TAG_NAMES: サービスに関連付けるネットワーク タグのカンマ区切り名。サービスの場合、ネットワーク タグはリビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2
などの異なるネットワーク タグを設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic
: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
- REGION: サービスのリージョン。
サービスが VPC ネットワーク上にあることを確認するには、次のコマンドを実行します。
gcloud run services describe SERVICE_NAME \ --region=REGION
以下のように置き換えます。
SERVICE_NAME
は、実際のサービスの名前に置き換えます。REGION
: 前の手順で指定したサービスのリージョン。
出力には、ネットワークの名前、サブネット、下り(外向き)設定が含まれます。次に例を示します。
VPC access: Network: default Subnet: subnet Egress: private-ranges-only
これで、ファイアウォール ルールで許可されるように、Cloud Run サービスから VPC ネットワーク上の任意のリソースにリクエストを送信できます。
YAML
新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。
gcloud run services describe SERVICE --format export > service.yaml
次の属性を更新します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
次のように置き換えます。
- SERVICE_NAME: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
- Cloud Run のリージョンのある REGION は、サブネットのリージョンと一致する必要があります。
- NETWORK: VPC ネットワークの名前。
-
SUBNET: サブネットの名前。サブネットは
/26
以上である必要があります。VPC 下り(外向き)は IPv4 範囲(RFC 1918、RFC 6598、クラス E)をサポートします。複数のサービスまたはジョブを同じサブネットにデプロイまたは実行できますが、サブネットを既存のコネクタで共有することはできません。 - (省略可)NETWORK_TAG_NAMES: サービスに関連付けるネットワーク タグの名前。サービスの場合、ネットワーク タグはリビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2
などの異なるネットワーク タグを設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic
: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
- IMAGE: サービス コンテナ イメージの URL。
環境変数やメモリ上限など他の構成を指定することもできます。
次のコマンドを使用して、サービスを作成または更新します。
gcloud run services replace service.yaml
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
次のコードを
main.tf
ファイルに追加します。
(省略可能)サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします。
ダイレクト VPC を使用するようにジョブを構成する
ダイレクト VPC 下り(外向き)を使用すると、Cloud Run ジョブはサーバーレス VPC アクセス コネクタを使用せずに VPC ネットワークにトラフィックを送信できます。また、Cloud Run ジョブに直接ネットワーク タグを追加して、VPC ファイアウォール ルールの適用など、よりきめ細かいネットワーク セキュリティを実現することもできます。
ジョブにダイレクト VPC 下り(外向き)を構成するには、Google Cloud コンソール、Google Cloud CLI、または YAML を使用します。
コンソール
新しいジョブを構成する場合は、[ジョブ] タブをクリックし、必要に応じて初期ジョブ設定ページを入力します。既存のジョブを構成する場合は、ジョブをクリックして [編集] をクリックします。
[コンテナ、変数とシークレット、接続、セキュリティ] をクリックして、ジョブのプロパティ ページを開きます。
[接続] タブをクリックします。
[アウトバウンド トラフィック用の VPC に接続する] をクリックします。
[VPC に直接トラフィックを送信] をクリックします。
[ネットワーク] フィールドで、トラフィックを送信する VPC ネットワークを選択します。
[サブネット] フィールドで、ジョブが IP アドレスを受信するサブネットを選択します。同じサブネットで複数のジョブを実行できます。
[トラフィック ルーティング] で、次のいずれかを選択します。
- プライベート IP へのリクエストだけを VPC にルーティングし、VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
- すべてのトラフィックを VPC にルーティングする。すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
省略可: サービスに関連付けるネットワーク タグの名前を入力します。ネットワーク タグは、リビジョン レベルで指定されます。サービス リビジョンには、
network-tag-2
などの異なるネットワーク タグを設定できます。省略可: ジョブに関連付けるネットワーク タグの名前を入力します。ジョブの場合、ネットワーク タグは実行レベルで指定されます。ジョブ実行ごとに異なるネットワーク タグ(
network-tag-2
など)を設定できます。[作成] または [更新] をクリックします。
ジョブが VPC ネットワーク上にあることを確認するには、ジョブをクリックして [構成] タブをクリックします。ネットワークとサブネットが [VPC] カードに一覧表示されます。
これで、ファイアウォール ルールで許可されているように、Cloud Run ジョブを実行して、VPC ネットワーク上の任意のリソースにリクエストを送信できます。
gcloud
Google Cloud CLI からコネクタなしで Cloud Run ジョブを作成するには:
gcloud
コンポーネントを最新バージョンに更新します。gcloud components update
プロジェクトで Compute Engine API が有効になっていることを確認します。
gcloud services enable compute.googleapis.com
次のコマンドを使用して Cloud Run ジョブを作成します。
gcloud run jobs create JOB_NAME \ --image=IMAGE_URL \ --network=NETWORK \ --subnet=SUBNET \ --network-tags=NETWORK_TAG_NAMES \ --vpc-egress=EGRESS_SETTING \ --region=REGION
以下のように置き換えます。
- JOB_NAME: Cloud Run ジョブの名前。
- IMAGE_URL は、コンテナ イメージへの参照(
us-docker.pkg.dev/cloudrun/container/job:latest
など)に置き換えます。 - NETWORK は、VPC ネットワークの名前です。
-
SUBNET: サブネットの名前。サブネットは
/26
以上である必要があります。VPC 下り(外向き)は IPv4 範囲(RFC 1918、RFC 6598、クラス E)をサポートします。複数のサービスまたはジョブを同じサブネットにデプロイまたは実行できますが、サブネットを既存のコネクタで共有することはできません。 - (省略可)NETWORK_TAG_NAMES: ジョブに関連付けるネットワーク タグの名前。ジョブの場合、ネットワーク タグは実行レベルで指定されます。ジョブ実行ごとに異なるネットワーク タグ(
network-tag-2
など)を設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic
: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
- REGION: ジョブのリージョン。
ジョブが VPC ネットワーク上にあることを確認するには、次のコマンドを実行します。
gcloud run jobs describe JOB_NAME \ --region=REGION
以下のように置き換えます。
JOB_NAME
: ジョブの名前。REGION
: 前の手順で指定したジョブのリージョン。
出力には次のようなネットワークまたはサブネットの名前が表示されます。
VPC network: Network: default Subnet: default
これで、ファイアウォール ルールで許可されているように、Cloud Run ジョブを実行して、VPC ネットワーク上の任意のリソースにリクエストを送信できます。
YAML
新しいジョブを作成する場合は、この手順をスキップします。既存のジョブを更新する場合は、その YAML 構成をダウンロードします。
gcloud run jobs describe JOB_NAME --format export > job.yaml
次の属性を更新します。
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME annotations: run.googleapis.com/launch-stage: BETA labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
次のように置き換えます。
- JOB_NAME: Cloud Run ジョブの名前。ジョブ名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
- REGION: Cloud Run ジョブのリージョン。サブネットのリージョンと一致する必要があります。
- NETWORK: VPC ネットワークの名前。
-
SUBNET: サブネットの名前。サブネットは
/26
以上である必要があります。VPC 下り(外向き)は IPv4 範囲(RFC 1918、RFC 6598、クラス E)をサポートします。複数のサービスまたはジョブを同じサブネットにデプロイまたは実行できますが、サブネットを既存のコネクタで共有することはできません。 - (省略可)NETWORK_TAG_NAMES: ジョブに関連付けるネットワーク タグの名前。ジョブの場合、ネットワーク タグは実行レベルで指定されます。ジョブ実行ごとに異なるネットワーク タグ(
network-tag-2
など)を設定できます。 - EGRESS_SETTING: 下り(外向き)設定値。
all-traffic
: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。private-ranges-only
: VPC コネクタ経由で内部アドレスにのみトラフィックを送信します。
- IMAGE: ジョブのコンテナ イメージの URL。
次のコマンドを使用して、ジョブを作成または更新します。
gcloud run jobs replace job.yaml
トラブルシューティング
サービス アカウントの権限
Google Cloud プロジェクトでオペレーションを実行するために、サーバーレス VPC アクセスはサーバーレス VPC アクセス サービス エージェントのサービス アカウントを使用します。このサービス アカウントのメールアドレスは、次の形式になります。
service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
このサービス アカウントには、デフォルトでサーバーレス VPC アクセス サービス エージェントのロール(roles/vpcaccess.serviceAgent
)が設定されています。このアカウントの権限を変更すると、サーバーレス VPC アクセスのオペレーションが失敗する可能性があります。
ネットワーク パフォーマンスが低い、または CPU 使用状況でアイドル状態が多い
数千のインスタンスに単一のコネクタを使用すると、パフォーマンスが低下し、CPU 使用状況でアイドル状態が増加する可能性があります。この問題を解決するには、複数のコネクタ間でサービスをシャーディングします。
エラー
サービス アカウントでサービス エージェントのロールが必要であるというエラー
「リソース サービスの使用を制限する」という組織のポリシーの制約を使用して Cloud Deployment Manager(deploymentmanager.googleapis.com
)をブロックすると、次のエラー メッセージが表示されることがあります。
Serverless VPC Access service account (service-<PROJECT_NUMBER>@gcp-sa-vpcaccess.iam.gserviceaccount.com) needs Serverless VPC Access Service Agent role in the project.
組織のポリシーを設定して、拒否リストから Deployment Manager を削除するか、許可リストに追加します。
コネクタ作成エラー
コネクタの作成でエラーが発生した場合は、次の方法をお試しください。
- VPC ネットワーク内で予約されている既存の IP アドレスと重複しない RFC 1918 の内部 IP 範囲を指定します。
- プロジェクトから ID
serverless-vpc-access-images
で Compute Engine VM イメージを使用できるように、プロジェクトに権限を付与します。状況に応じて組織のポリシーを更新する方法については、イメージ アクセスの制約を設定するをご覧ください。
リソースにアクセスできません
コネクタを指定しても、VPC ネットワーク内のリソースにアクセスできない場合は、コネクタの IP アドレス範囲からの上り(内向き)を拒否する、優先度 1000 よりも小さいファイアウォール ルールが VPC ネットワーク上に存在しないことを確認してください。
共有 VPC サービス プロジェクトでコネクタを構成する場合は、ファイアウォール ルールでサーバーレス インフラストラクチャからコネクタへの上り(内向き)が許可されていることを確認してください。
接続拒否エラー
connection refused
または connection timeout
エラーが発生してネットワーク パフォーマンスが低下している場合は、サーバーレス アプリケーションの呼び出し間で接続が制限なしに増加している可能性があります。インスタンスごとに使用される最大接続数を制限するには、接続プールをサポートするクライアント ライブラリを使用します。接続プールの使用方法を説明する詳しい例については、データベース接続を管理するをご覧ください。
リソースが見つからないエラー
VPC ネットワークまたはファイアウォール ルールを削除すると、次のようなメッセージが表示される場合があります。The resource
"aet-uscentral1-subnet--1-egrfw" was not found.
このエラーとそのソリューションについては、VPC ファイアウォール ルールのドキュメントのリソースが見つからないエラーをご覧ください。
次のステップ
- サーバーレス VPC アクセスの監査ロギングを使用して管理アクティビティをモニタリングする。
- VPC Service Controls を使用してサービス境界を作成して、リソースとデータを保護する。
- サーバーレス VPC アクセスに関連付けられている Identity and Access Management(IAM)のロールについて学習します。各ロールに関連付けられている権限の一覧については、IAM のドキュメントのサーバーレス VPC アクセスのロールをご覧ください。
- Memorystore への以下からの接続方法について学習する。