サービス接続ポリシーを構成する

このページでは、ネットワーク管理者がサービス接続ポリシーを構成して、マネージド サービスへのプライベート接続を自動化する方法について説明します。

始める前に

  • デプロイするマネージド サービスがサービス接続ポリシーをサポートしていることを確認します。サービス接続ポリシーを使用してサービスをデプロイできるようにする機能は、制限付きプレビューで利用できます。サービス接続ポリシーをサポートするサービスの詳細については、サポート サービスをご覧ください。

  • 接続をデプロイするマネージド サービス インスタンスのサービスクラスの名前を知っている必要があります。

  • Private Service Connect エンドポイントについて確認します。

  • Virtual Private Cloud(VPC)ネットワークサブネットが必要です。

  • プロジェクトで Compute Engine API有効にする必要があります。

  • プロジェクトで Network Connectivity API有効にする必要があります。

  • Private Service Connect エンドポイントがデプロイされているコンシューマ プロジェクトで Service Consumer Management API有効にする必要があります。この API を使用すると、Google Cloud で、Private Service Connect エンドポイントをデプロイするネットワーク接続サービス アカウントを作成できます。

必要なロール

ネットワークを構成してサービス接続ポリシーを作成するために必要な権限を取得するには、プロジェクトに対する Compute ネットワーク管理者roles/compute.networkAdmin)IAM ロールを付与するよう管理者に依頼してください。

共有 VPC でサービス接続ポリシーを使用するには、サービス プロジェクトとホスト プロジェクトに Network Connectivity サービス アカウントのロールを付与する必要があります。これらのサービス アカウントは、サービス接続ポリシーの作成時に自動的に構成されますが、ロールは手動で削除できます。権限がないことを示すエラーが表示された場合は、サービス アカウント管理者がロールを再度付与する必要があります。詳細については、共有 VPC のサービス アカウントの構成をご覧ください。

サービス接続ポリシーを作成する

サービス接続ポリシーを使用すると、指定したサービスクラスに、プロデューサー VPC ネットワークとコンシューマ VPC ネットワークの間の Private Service Connect 接続の作成を許可できます。

サービスクラス、リージョン、VPC ネットワークの組み合わせごとに作成できるポリシーは 1 つだけです。ポリシーは、特定の組み合わせに対するサービス接続の自動化を指示します。ポリシーを構成するときは、サブネットを選択します。サブネットは、ポリシーを介して作成されたエンドポイントの IP アドレスを割り振るために使用されます。ポリシーが同じリージョンを共有している場合は、複数の接続ポリシーで同じサブネットを再利用できます。

たとえば、3 つの異なるリージョンで 2 つのサービスを使用してサービス接続の自動化を使用する場合は、6 つのポリシーを作成します。少なくとも 3 つのサブネットを使用できます(リージョンごとに 1 つ)。

サービス接続ポリシーを作成した後に更新できるのは、ポリシーのサブネットと接続上限のみです。他のフィールドを更新する場合は、ポリシーを削除して、新しいポリシーを作成します。

コンソール

  1. Google Cloud Console で、[Private Service Connect] ページに移動します。

    [Private Service Connect] に移動

  2. [CONNECTION POLICIES] タブをクリックします。

  3. [Create connection policy] をクリックします。

  4. 接続ポリシーの [名前] を入力します。

  5. サービスクラスを指定します。

    • Google サービスの場合は、次の操作を行います。
      1. [Source service class] で [Google サービス] を選択します。
      2. [サービスクラス] メニューからサービスクラスを選択します。
    • サードパーティのサービスの場合は、次の操作を行います。
      1. [Source service class] で [サードパーティのサービス] を選択します。
      2. [サービスクラス] に、サービスクラス名を入力します。
  6. [ターゲット エンドポイント スコープ] セクションで、このポリシーを適用する [ネットワーク] と [リージョン] を選択します。

  7. [ポリシー] セクションの [サブネットワーク] メニューから 1 つ以上のサブネットを選択します。サブネットは、エンドポイントの IP アドレスを割り振るために使用されます。

  8. 省略可: ポリシーの接続上限を指定します。上限により、この接続ポリシーを使用して作成できるエンドポイントの数が決まります。指定しない場合は上限なしになります。

  9. [ポリシーを作成] をクリックします。

gcloud

service-connection-policies create コマンドを使用します。

gcloud network-connectivity service-connection-policies create POLICY_NAME \
    --network=NETWORK \
    --project=PROJECT_ID \
    --region=REGION \
    --service-class=SERVICE_CLASS \
    --subnets=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETS \
    --psc-connection-limit=LIMIT \
    --description=DESCRIPTION

次のように置き換えます。

  • POLICY_NAME: サービス接続ポリシーの名前。
  • NETWORK: このポリシーを適用するネットワーク。
  • PROJECT_ID: VPC ネットワークのプロジェクトのプロジェクト ID または番号。共有 VPC ネットワークの場合、サービス接続ポリシーはホスト プロジェクトにデプロイする必要があります。サービス プロジェクトではサポートされません。
  • REGION: このポリシーを適用するリージョン。サービスの接続を自動化するすべてのリージョンに同じポリシーが必要です。
  • SERVICE_CLASS: プロデューサーが提供するサービスクラスのリソース識別子。
  • SUBNETS: Private Service Connect エンドポイントの IP アドレスを割り振るために使用される 1 つ以上の通常のコンシューマ サブネット。これらの IP アドレスは自動的に割り振られ、マネージド サービス インスタンスの作成と削除に応じてサブネットのプールに返されます。サブネットは、サービス接続ポリシーと同じリージョンに存在する必要があります。ポリシーが同じリージョンを共有している場合は、複数の接続ポリシーで同じサブネットワークを再利用できます。複数のサブネットを入力する場合は、カンマ区切りリストで指定します。
  • LIMIT: このポリシーを使用して作成できるエンドポイントの最大数。指定しない場合は上限なしになります。
  • DESCRIPTION: サービス接続ポリシーの説明(省略可)。

たとえば、次のコマンドは、managed-services サブネットから IP アドレスを割り振る gcp-database-service サービスクラスのサービス接続ポリシーを作成します。 このポリシーを使用して、最大 10 個の Private Service Connect エンドポイントを作成できます。エンドポイントは、マネージド サービス インスタンスと同じ組織のプロジェクト内に作成する必要があります。

gcloud network-connectivity service-connection-policies create gcp-database-cxn-policy \
    --network=default \
    --project=my-project \
    --region=us-central1 \
    --service-class=gcp-database-service \
    --subnets=managed-service-subnet \
    --psc-connection-limit=10

Terraform

Terraform リソースを使用してサービス接続ポリシーを作成できます。

# Create a VPC network
resource "google_compute_network" "default" {
  name                    = "consumer-network"
  auto_create_subnetworks = false
}

# Create a subnetwork
resource "google_compute_subnetwork" "default" {
  name          = "consumer-subnet"
  ip_cidr_range = "10.0.0.0/16"
  region        = "us-central1"
  network       = google_compute_network.default.id
}

# Create a service connection policy
resource "google_network_connectivity_service_connection_policy" "default" {
  name          = "service-connection-policy"
  location      = "us-central1"
  service_class = "gcp-memorystore-redis"
  network       = google_compute_network.default.id
  psc_config {
    subnetworks = [google_compute_subnetwork.default.id]
    limit       = 2
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

API

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: オブジェクトの ID。
  • REGION: サービス接続ポリシーのリージョン。
  • POLICY_NAME: サービス接続ポリシーの名前。
  • DESCRIPTION: サービス接続ポリシーの説明(省略可)。
  • NETWORK: サービス接続ポリシーのネットワーク。
  • LIMIT: このポリシーを使用して作成できるエンドポイントの最大数。指定しない場合は上限なしになります。
  • SUBNET: Private Service Connect エンドポイントの IP アドレスを割り振るために使用される 1 つ以上の通常のコンシューマ サブネット。これらの IP アドレスは自動的に割り振られ、マネージド サービス インスタンスの作成と削除に応じてサブネットのプールに返されます。サブネットは、サービス接続ポリシーと同じリージョンに存在する必要があります。ポリシーが同じリージョンを共有している場合は、複数の接続ポリシーで同じサブネットワークを再利用できます。複数のサブネット URL をカンマ区切りのリストで入力できます。
  • SERVICE_CLASS: プロデューサーが提供するサービスクラスのリソース識別子。

HTTP メソッドと URL:

POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies?serviceConnectionPolicyId=POLICY_NAME

リクエストの本文(JSON):

{
  "description": "DESCRIPTION",
  "network": "projects/PROJECT_ID/global/networks/NETWORK",
  "pscConfig": {
    "limit": "LIMIT",
    "subnetworks": [
      "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
    ]
  },
  "serviceClass": "SERVICE_CLASS"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/project-id/locations/us-central1/operations/operation-1692118768698-602f91a204523-8c6a2d93-d5c20a6a",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T16:59:29.236110917Z",
    "target": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

サービス接続ポリシーを一覧取得する

コンソール

  1. Google Cloud Console で、[Private Service Connect] ページに移動します。

    [Private Service Connect] に移動

  2. [CONNECTION POLICIES] タブをクリックします。

  3. 接続ポリシーが表示されます。

gcloud

service-connection-policies list コマンドを使用します。

gcloud network-connectivity service-connection-policies list \
    --region=REGION

REGION は、サービス接続ポリシーを一覧表示するリージョンに置き換えます。

API

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: オブジェクトの ID。
  • REGION: サービス接続ポリシーを一覧表示するリージョン。

HTTP メソッドと URL:

GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "serviceConnectionPolicies": [
    {
      "name": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-1",
      "createTime": "2023-08-15T15:33:54.712819865Z",
      "updateTime": "2023-08-15T15:33:54.945630882Z",
      "description": "descriptor",
      "network": "projects/project-id/global/networks/network-two",
      "serviceClass": "service-class",
      "infrastructure": "PSC",
      "pscConfig": {
        "subnetworks": [
          "projects/project-id/regions/us-west1/subnetworks/us-west1-subnet"
        ],
        "limit": "12"
      },
      "etag": "zCqDFBG1dS7B4gNdJKPR98YMUXpSrBIz0tZB_hwOIZI"
    },
    {
      "name": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-2",
      "createTime": "2023-08-15T16:59:29.230257109Z",
      "updateTime": "2023-08-15T16:59:29.508994923Z",
      "description": "descriptor",
      "network": "projects/project-id/global/networks/custom-test",
      "serviceClass": "service-class",
      "infrastructure": "PSC",
      "pscConfig": {
        "subnetworks": [
          "projects/project-id/regions/us-central1/subnetworks/subnet-one"
        ],
        "limit": "25"
      },
      "etag": "nB603i61nRGMZpNjWoWMM6wRzsgM8QN9C9v5QFLyOa8"
    }
  ]
}

サービス接続ポリシーの説明を取得する

コンソール

  1. Google Cloud Console で、[Private Service Connect] ページに移動します。

    [Private Service Connect] に移動

  2. [CONNECTION POLICIES] タブをクリックします。

  3. 表示するサービス接続ポリシーをクリックします。

gcloud

service-connection-policies describe コマンドを使用します。

gcloud network-connectivity service-connection-policies describe POLICY_NAME \
    --region=REGION

以下を置き換えます。

  • POLICY_NAME: 説明を取得するサービス接続ポリシーの名前。
  • REGION: 説明を取得するサービス接続ポリシーのリージョン。

API

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: オブジェクトの ID。
  • REGION: サービス接続ポリシーのリージョン。
  • POLICY_NAME: 詳細を取得するサービス接続ポリシーの名前。

HTTP メソッドと URL:

GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
  "createTime": "2023-08-15T16:59:29.230257109Z",
  "updateTime": "2023-08-15T16:59:29.508994923Z",
  "description": "description",
  "network": "projects/project-id/global/networks/custom-test",
  "serviceClass": "gcp-memorystore-redis",
  "infrastructure": "PSC",
  "pscConfig": {
    "subnetworks": [
      "projects/project-id/regions/us-central1/subnetworks/subnet-one"
    ],
    "limit": "25"
  },
  "etag": "nB603i61nRGMZpNjWoWMM6wRzsgM8QN9C9v5QFLyOa8"
}

サービス接続ポリシーを更新する

サービス接続ポリシーのサブネットと接続上限を更新できます。

サービス接続ポリシーからサブネットを削除すると、次のようになります。

  • 既存の Private Service Connect エンドポイントは影響を受けません。
  • 新しいエンドポイントは、削除されたサブネットを使用しません。

サービス接続ポリシーの接続上限を更新すると、次のようになります。

  • 既存のエンドポイントは影響を受けません。
  • 新しい接続制限が、ポリシーに関連付けられている既存のエンドポイント数よりも少ない場合、サービス接続の自動化により、このポリシーを使用する新しいエンドポイントの作成がブロックされます。
  • 新しい接続上限が、ポリシーに関連付けられている既存のエンドポイントの数よりも大きい場合は、以前に接続上限によってブロックされていたエンドポイントを作成できます。

サービス接続ポリシーを更新して接続制限を指定しない場合、更新されたポリシーには接続上限がありません。

コンソール

  1. Google Cloud Console で、[Private Service Connect] ページに移動します。

    [Private Service Connect] に移動

  2. [CONNECTION POLICIES] タブをクリックします。

  3. 編集するサービス接続ポリシーをクリックします。

  4. [編集] をクリックします。

  5. ポリシーのサブネットワークを更新する手順は次のとおりです。

    1. [サブネットワーク] をクリックしてから、このポリシーに関連付けるサブネットワークを選択します。
    2. [OK] をクリックします。
  6. ポリシーの接続上限を更新するには、[接続上限] フィールドに新しい値を入力します。

  7. [ポリシーの更新] をクリックします。

gcloud

service-connection-policies update コマンドを使用します。

gcloud network-connectivity service-connection-policies update POLICY_NAME \
    --region=REGION
    --project=PROJECT_ID
    --subnets=SUBNETS
    --psc-connection-limit=LIMIT
  • POLICY_NAME: サービス接続ポリシーの名前。
  • REGION: サービス接続ポリシーのリージョン。ポリシーのリージョンは更新できません。
  • PROJECT_ID: ポリシーのプロジェクトのプロジェクト ID または番号。
  • SUBNETS: Private Service Connect エンドポイントの IP アドレスを割り振るために使用される 1 つ以上の通常のコンシューマ サブネット。これらの IP アドレスは自動的に割り振られ、マネージド サービス インスタンスの作成と削除に応じてサブネットのプールに返されます。サブネットは、サービス接続ポリシーと同じリージョンに存在する必要があります。ポリシーが同じリージョンを共有している場合は、複数の接続ポリシーで同じサブネットワークを再利用できます。複数のサブネットを入力する場合は、カンマ区切りリストで指定します。
  • LIMIT: このポリシーを使用して作成できるエンドポイントの最大数。指定しない場合は上限なしになります。

API

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: オブジェクトの ID。
  • REGION: サービス接続ポリシーのリージョン。 ポリシーのリージョンは更新できません。
  • POLICY_NAME: サービス接続ポリシーの名前。
  • LIMIT: このポリシーを使用して作成できるエンドポイントの最大数。指定しない場合は上限なしになります。
  • SUBNET: Private Service Connect エンドポイントの IP アドレスを割り振るために使用される 1 つ以上の通常のコンシューマ サブネット。これらの IP アドレスは自動的に割り振られ、マネージド サービス インスタンスの作成と削除に応じてサブネットのプールに返されます。サブネットは、サービス接続ポリシーと同じリージョンに存在する必要があります。ポリシーが同じリージョンを共有している場合は、複数の接続ポリシーで同じサブネットワークを再利用できます。複数のサブネット URL をカンマ区切りのリストで入力できます。
  • NETWORK: サービス接続ポリシーのネットワーク。

HTTP メソッドと URL:

PATCH https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME

リクエストの本文(JSON):

{
  "pscConfig": {
    "limit": "LIMIT",
    "subnetworks": [
      "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
    ]
  },
  "network": "projects/PROJECT_ID/global/networks/NETWORK"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/project-id/locations/us-central1/operations/operation-1692118768698-602f91a204523-8c6a2d93-d5c20a6a",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T16:59:29.236110917Z",
    "target": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

サービス接続ポリシーを削除する

サービスの使用が終了した場合、または接続の自動化を停止したい場合は、サービス接続ポリシーを削除できます。有効な Private Service Connect 接続が関連付けられているポリシーは削除できません。サービス接続ポリシーを削除する前に、関連するすべてのサービス インスタンスを廃止して、すべてのアクティブな接続を削除してください。

コンソール

  1. Google Cloud Console で、[Private Service Connect] ページに移動します。

    [Private Service Connect] に移動

  2. [CONNECTION POLICIES] タブをクリックします。

  3. 削除するサービス接続ポリシーを選択して、[削除] をクリックします。

gcloud

service-connection-policies delete コマンドを使用します。

gcloud network-connectivity service-connection-policies delete POLICY_NAME \
    --region=REGION

以下を置き換えます。

  • POLICY_NAME: 削除するサービス接続ポリシーの名前。
  • REGION: 削除するサービス接続ポリシーのリージョン。

API

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: オブジェクトの ID。
  • REGION: サービス接続ポリシーのリージョン。
  • POLICY_NAME: 削除するサービス接続ポリシーの名前。

HTTP メソッドと URL:

DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "name": "projects/project-id/locations/us-central1/operations/operation-1692128792549-602fb6f98194a-e0275435-36edc095",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T19:46:32.605032867Z",
    "target": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

共有 VPC のサービス アカウントを構成する

共有 VPC でサービス接続ポリシーを使用すると、サービス アカウントは自動的に構成されますが、ロールは手動で削除できます。権限がないことを示すエラーが表示された場合は、ロールを再度付与してみてください。

必要なロールを付与するには、サービス アカウント管理者が次の操作を行います。

サービス プロジェクトでサービス アカウントにロールを付与する

gcloud

  1. Network Connectivity サービス エージェントのロールroles/networkconnectivity.serviceAgent)をサービス プロジェクトの Network Connectivity サービス アカウントに付与します。サービス プロジェクトに対するロールを付与します。

    gcloud projects add-iam-policy-binding SERVICE_PROJECT_NUMBER \
        --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
        --role=roles/networkconnectivity.serviceAgent
    

    SERVICE_PROJECT_NUMBER は、サービス プロジェクトのプロジェクト番号に置き換えます。

  2. サービス プロジェクトの Network Connectivity サービス アカウントに Compute ネットワーク ユーザーのロールroles/compute.networkUser)を付与します。次のいずれかを行います。

    • ホスト プロジェクトに対するロールを付与します。

      gcloud projects add-iam-policy-binding HOST_PROJECT_NUMBER \
          --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
          --role=roles/compute.networkUser
      

      HOST_PROJECT_NUMBER は、ホスト プロジェクトのプロジェクト番号に置き換えます。

    • サービス接続ポリシーに関連付けられているホスト プロジェクト内の各サブネットにロールを付与します。サブネットごとに次のコマンドを使用します。

      gcloud compute networks subnets add-iam-policy-binding SUBNET \
          --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
          --role=roles/compute.networkUser \
          --region=REGION \
          --project=HOST_PROJECT_NUMBER
      

      次のように置き換えます。

      • SUBNET: サービス接続ポリシーに関連付けられているサブネットの名前。
      • REGION: サブネットのリージョン。

ホスト プロジェクトのサービス アカウントにロールを付与する

gcloud

  1. Network Connectivity サービス エージェントのロール(roles/networkconnectivity.serviceAgent)をホスト プロジェクトの Network Connectivity サービス アカウントに付与します。ホスト プロジェクトに対するロールを付与します。

    gcloud projects add-iam-policy-binding HOST_PROJECT_NUMBER \
        --member=serviceAccount:service-HOST_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
        --role=roles/networkconnectivity.serviceAgent
    

    HOST_PROJECT_NUMBER は、ホスト プロジェクトのプロジェクト番号に置き換えます。

次のステップ