共有 VPC を使用して内部アプリケーション ロードバランサを設定する

このドキュメントでは、共有 VPC 環境で内部アプリケーション ロードバランサを設定するための 2 つのサンプル構成を示します。

  • 最初の例では、1 つのサービス プロジェクトにロードバランサのすべてのコンポーネントとバックエンドを作成します。
  • 2 番目の例では、ロードバランサのフロントエンド コンポーネントと URL マップを 1 つのサービス プロジェクト内に作成し、ロードバランサのバックエンド サービスとバックエンドを別のサービス プロジェクト内に作成します。このタイプのデプロイは、URL マップが別のプロジェクトのバックエンド サービスを参照するため、プロジェクトにまたがるサービスの参照と呼ばれます。

どちらの例でも、ロードバランサの作成を開始する前に、同じ事前構成を使用して権限を付与し、共有 VPC を設定する必要があります。

これ以外にも、内部アプリケーション ロードバランサでサポートされる共有 VPC 構成があります。その他の有効な共有 VPC アーキテクチャについては、共有 VPC アーキテクチャをご覧ください。

共有 VPC ネットワークを使用しない場合は、内部アプリケーション ロードバランサを設定するをご覧ください。

準備

  1. 共有 VPC の概要を確認します。
  2. 内部アプリケーション ロードバランサの概要と、共有 VPC アーキテクチャのセクションをご覧ください。

必要な権限

共有 VPC ネットワークにロードバランサを設定するには、管理者が初期設定とプロビジョニングを行う必要があります。初期設定後、サービス プロジェクトのオーナーは、次のいずれかを行います。

  • ロードバランサのすべてのコンポーネントとそのバックエンドをサービス プロジェクトにデプロイします。
  • 別のサービスまたはホスト プロジェクトの URL マップから参照可能なサービス プロジェクトに、ロードバランサのバックエンド コンポーネント(バックエンド サービスとバックエンド)をデプロイします。

このセクションでは、このガイドに沿って共有 VPC ネットワークにロードバランサを設定するために必要な権限について簡単に説明します。

共有 VPC を設定する

以下では、次のタスクを実行する際に必要なロールについて説明します。

  1. 共有 VPC の設定やホスト プロジェクトの有効化などの 1 回限りの管理タスクを実行する。
  2. 新しいサービス プロジェクトをオンボーディングするたびに繰り返す必要がある管理タスクを実行する。これには、サービス プロジェクトの接続、ネットワーク リソースのプロビジョニングと構成、サービス プロジェクト管理者へのアクセス権の付与が含まれます。

これらのタスクは、共有 VPC ホスト プロジェクトで実行する必要があります。共有 VPC 管理者も共有 VPC ホスト プロジェクトのオーナーにすることをおすすめします。これにより、ネットワーク管理者とセキュリティ管理者のロールが自動的に付与されます。

タスク 必要なロール
共有 VPC の設定、ホスト プロジェクトの有効化、サービス プロジェクト管理者へのアクセス権の付与 共有 VPC 管理者
共有 VPC ホスト プロジェクトでのサブネットの作成とサービス プロジェクト管理者へのアクセス権の付与 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者

サブネットをプロビジョニングしたら、ホスト プロジェクトのオーナーは、これらのリソースを使用するすべてのユーザー(通常はサービス プロジェクト管理者、デベロッパー、またはサービス アカウント)に、ホスト プロジェクトのネットワーク ユーザー ロールを付与します。

タスク 必要なロール
ホスト プロジェクトに属する VPC ネットワークとサブネットの使用 ネットワーク ユーザー

このロールは、プロジェクト レベルまたは個々のサブネットに対して付与できます。Google では個々のサブネットにロールを付与することをおすすめします。プロジェクトにロールを付与すると、ホスト プロジェクトの VPC ネットワーク内の現在および将来のすべてのサブネットに対してアクセスを与えることになります。

ロードバランサとバックエンドをデプロイする

サービス プロジェクト管理者がロード バランシング リソースとバックエンドを作成するには、サービス プロジェクトで次のロールが必要です。これらの権限は、サービス プロジェクトのオーナーまたは編集者に自動的に付与されます。

サービス プロジェクトで付与されるロール
タスク 必要なロール
ロードバランサのコンポーネントの作成 ネットワーク管理者
インスタンスの作成 インスタンス管理者
SSL 証明書の作成と変更 セキュリティ管理者

プロジェクト間でバックエンド サービスを参照する

ロードバランサが他のサービス プロジェクトからバックエンド サービスを参照する必要がある場合(プロジェクト間サービス参照とも呼ばれる)、ロードバランサ管理者には、バックエンド サービスが作成されるサービス プロジェクトで次のロールが必要になります。

サービス プロジェクトで付与されるロール
タスク 必要なロール
他のプロジェクトのサービスを使用する権限 ロードバランサ サービス ユーザー

このロールは、プロジェクト レベルまたは個々のバックエンド サービスに対して付与できます。このロールを付与する方法については、このページのプロジェクト間サービスの参照の例をご覧ください。

IAM の詳細については、次のガイドをご覧ください。

前提条件

このセクションでは、次の操作を行います。

  1. ホスト プロジェクトでネットワークとサブネットを構成する
  2. ホスト プロジェクトで共有 VPC を設定する

このセクションの手順は、新しいロードバランサを作成するたびに行う必要はありません。ただし、ロードバランサの作成に進む前に、ここで説明するリソースにアクセスできることを確認する必要があります。

ホスト プロジェクトでネットワークとサブネットを構成する

2 つのサブネット(ロードバランサのフロントエンドとバックエンド用サブネットと、ロードバランサのプロキシ用サブネット)を持つ共有 VPC ネットワークが必要です。

この例では、次のネットワーク、リージョン、サブネットを使用します。

  • ネットワーク。ネットワークの名前は lb-network です。

  • ロードバランサのフロントエンドとバックエンド用のサブネット。us-west1 リージョンの lb-frontend-and-backend-subnet という名前のサブネットは、プライマリ IP 範囲として 10.1.2.0/24 を使用します。

  • プロキシのサブネット。us-west1 リージョンの proxy-only-subnet という名前のサブネット。プライマリ IP 範囲として 10.129.0.0/23 を使用します。

ロードバランサのフロントエンドとバックエンドのサブネットを構成する

この手順は、新しいロードバランサを作成するたびに行う必要はありません。サービス プロジェクトが、プロキシ専用サブネットだけでなく、共有 VPC ネットワーク内のサブネットにもアクセスできることだけを確認する必要があります。

このセクションで説明する操作はすべて、ホスト プロジェクトで実行する必要があります。

コンソール

  1. Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「lb-network」と入力します。
  4. [サブネット] セクションで次の設定を行います。

    1. [サブネット作成モード] を [カスタム] に設定します。
    2. [新しいサブネット] セクションに、次の情報を入力します。

      • 名前: lb-frontend-and-backend-subnet
      • リージョン: us-west1

      • IP アドレス範囲: 10.1.2.0/24

    3. [完了] をクリックします。

  5. [作成] をクリックします。

gcloud

  1. gcloud compute networks create コマンドを使用して、VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. サブネットを us-west1 リージョン内の lb-network ネットワークに作成します。

    gcloud compute networks subnets create lb-frontend-and-backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Terraform

  1. VPC ネットワークを作成します。

    # Shared VPC network
    resource "google_compute_network" "lb_network" {
      name                    = "lb-network"
      provider                = google-beta
      project                 = "my-host-project-id"
      auto_create_subnetworks = false
    }

  2. us-west1 リージョンにサブネットを作成します。

    # Shared VPC network - backend subnet
    resource "google_compute_subnetwork" "lb_frontend_and_backend_subnet" {
      name          = "lb-frontend-and-backend-subnet"
      provider      = google-beta
      project       = "my-host-project-id"
      region        = "us-west1"
      ip_cidr_range = "10.1.2.0/24"
      role          = "ACTIVE"
      network       = google_compute_network.lb_network.id
    }

プロキシ専用サブネットを構成する

プロキシ専用サブネットは、lb-network VPC ネットワークの us-west1 リージョン内のすべての Envoy ベースのリージョン ロードバランサで使用されます。リージョンごと、ネットワークごとにアクティブなプロキシ専用サブネットは 1 つだけです。

このネットワークの us-west1 リージョンに予約されているプロキシ専用サブネットがすでに存在する場合は、この手順を実施しないでください。

このセクションで説明する操作はすべて、ホスト プロジェクトで実行する必要があります。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 共有 VPC ネットワークの名前 lb-network をクリックします。
  3. [サブネットを追加] をクリックします。
  4. [名前] に「proxy-only-subnet」と入力します。
  5. [リージョン] で、us-west1 を選択します。
  6. [目的] を [リージョン マネージド プロキシ] に設定します。
  7. [IP アドレス範囲] に「10.129.0.0/23」と入力します。
  8. [追加] をクリックします。

gcloud

gcloud compute networks subnets create コマンドを使用して、プロキシ専用サブネットを作成します。

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=us-west1 \
    --network=lb-network \
    --range=10.129.0.0/23

Terraform

プロキシ専用サブネットを作成します。

# Shared VPC network - proxy-only subnet
resource "google_compute_subnetwork" "proxy_only_subnet" {
  name          = "proxy-only-subnet"
  provider      = google-beta
  project       = "my-host-project-id"
  region        = "us-west1"
  ip_cidr_range = "10.129.0.0/23"
  role          = "ACTIVE"
  purpose       = "REGIONAL_MANAGED_PROXY"
  network       = google_compute_network.lb_network.id
}

サービス プロジェクト管理者にバックエンド サブネットへのアクセス権を付与する

サービス プロジェクト管理者は lb-frontend-and-backend-subnet サブネットにアクセスして、ロードバランサのバックエンドをプロビジョニングする必要があります。

共有 VPC 管理者は、サービス プロジェクト管理者(またはサブネットを使用するリソースとバックエンドをデプロイするデベロッパー)にアクセス権を付与する必要があります。手順については、一部のサブネットのサービス プロジェクト管理者をご覧ください。

ホスト プロジェクトでファイアウォール ルールを構成する

この例では、次のファイアウォール ルールを使用します。
  • fw-allow-health-check。ロードバランスされたインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのすべての TCP トラフィックを許可します。この例では、ターゲットタグ load-balanced-backend を使用して、適用するインスタンスを識別します。
  • fw-allow-proxiesロードバランスされたインスタンスに適用される上り(内向き)ルール。ロードバランサが管理するプロキシからポート 804438080 への TCP トラフィックを許可します。この例では、ターゲットタグ load-balanced-backend を使用して、適用するインスタンスを識別します。
  • fw-allow-sshロードバランスされたインスタンスに適用される上り(内向き)ルール。任意のアドレスから TCP ポート 22 への SSH 接続を許可します。このルールには、送信元の IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲のみを指定できます。この例では、ターゲットタグ allow-ssh を使用して、ファイアウォール ルールが適用される仮想マシン(VM)を識別します。
これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。

このセクションで説明する操作はすべて、ホスト プロジェクトで実行する必要があります。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックして、Google Cloud ヘルスチェックを許可するルールを作成します。
    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] をオンにして、ポート番号に「80」と入力します。
      • このルールは、ヘルスチェックに使用されているプロトコルとポートのみに制限することをおすすめします。プロトコルとポートに tcp:80 を使用すると、Google Cloud は、ポート 80 で HTTP を使用して VM に接続できますが、ポート 443 で HTTPS を使用して VM に接続することはできません。

  3. [作成] をクリックします。
  4. [ファイアウォール ルールを作成] をクリックして、Google Cloud ヘルスチェックを許可するルールを作成します。
    • 名前: fw-allow-proxies
    • ネットワーク: lb-network
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.129.0.0/23
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] をオンにして、ポート番号に「80, 443, 8080」と入力します。
  5. [作成] をクリックします。
  6. [ファイアウォール ルールを作成] をクリックして、Google Cloud ヘルスチェックを許可するルールを作成します。
    • 名前: fw-allow-ssh
    • ネットワーク: lb-network
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 0.0.0.0/0
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] をオンにして、ポート番号に「22」と入力します。
  7. [作成] をクリックします。

gcloud

  1. Google Cloud ヘルスチェックを許可する fw-allow-health-check ファイアウォール ルールを作成します。この例では、ヘルスチェック プローバーからのすべての TCP トラフィックを許可します。ただし、必要に応じてポートの範囲を狭く構成することもできます。

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    
  2. Envoy プロキシ専用サブネットからのトラフィックがバックエンドに到達できるように fw-allow-proxies ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create fw-allow-proxies \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=10.129.0.0/23 \
       --target-tags=load-balanced-backend \
       --rules=tcp:80,tcp:443,tcp:8080
    

  3. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、Google Cloud は任意の送信元を対象とするものとしてルールを解釈します。

    gcloud compute firewall-rules create fw-allow-ssh \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-ssh \
       --rules=tcp:22
    

Terraform

  1. Google Cloud ヘルスチェックを許可するファイアウォール ルールを作成します。

    resource "google_compute_firewall" "fw_allow_health_check" {
      name          = "fw-allow-health-check"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
      allow {
        protocol = "tcp"
      }
      target_tags = ["load-balanced-backend"]
    }

  2. Envoy プロキシ専用サブネットからのトラフィックがバックエンドに到達できるようにファイアウォール ルールを作成します。

    resource "google_compute_firewall" "fw_allow_proxies" {
      name          = "fw-allow-proxies"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["10.129.0.0/23"]
      allow {
        protocol = "tcp"
        ports    = ["80", "443", "8080"]
      }
      target_tags = ["load-balanced-backend"]
    }

  3. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可するファイアウォール ルールを作成します。

    resource "google_compute_firewall" "fw_allow_ssh" {
      name          = "fw-allow-ssh"
      provider      = google-beta
      project       = "my-host-project-id"
      direction     = "INGRESS"
      network       = google_compute_network.lb_network.id
      source_ranges = ["0.0.0.0/0"]
      allow {
        protocol = "tcp"
        ports    = ["22"]
      }
      target_tags = ["allow-ssh"]
    }

ホスト プロジェクトで共有 VPC を設定する

この手順では、共有 VPC ホスト プロジェクトを有効にして、ホスト プロジェクトのサブネットを共有し、サービス プロジェクトをホスト プロジェクトに接続して、サービス プロジェクトで共有 VPC ネットワークを使用できるようにします。ホスト プロジェクトに共有 VPC を設定するには、次のページをご覧ください。

以降の手順では、共有 VPC がすでに設定されていることを前提としています。この設定には、組織の IAM ポリシーの設定と、ホスト プロジェクトとサービス プロジェクトの指定が含まれています。

共有 VPC を設定し、ホスト プロジェクトとサービス プロジェクトを有効にするまで、先に進まないでください。

この前提条件のセクションで定義された手順を完了すると、次のいずれかの設定を行うことができます。

サービス プロジェクトでロードバランサを構成する

この例では、すべてのロード バランシング コンポーネント(転送ルール、ターゲット プロキシ、URL マップ、バックエンド サービス)とバックエンドがサービス プロジェクト内に作成される内部アプリケーション ロードバランサを構成します。

内部アプリケーション ロードバランサのネットワーク リソース(プロキシ専用サブネットやバックエンド インスタンスのサブネットなど)は、ホスト プロジェクトに作成されます。バックエンド インスタンスのファイアウォール ルールもホスト プロジェクトに作成されます。

図 1. 共有 VPC 上の内部アプリケーション ロードバランサ
図 1. 共有 VPC 上の内部アプリケーション ロードバランサ

このセクションでは、ロードバランサとバックエンドを設定する方法について説明します。これらの手順は、サービス プロジェクト管理者(またはサービス プロジェクト内で操作するデベロッパー)が行う必要があり、ホスト プロジェクト管理者の関与は必要ありません。このセクションの手順は、内部アプリケーション ロードバランサを設定する標準の手順とほぼ同じです。

この例では、エフェメラル内部 IP アドレスの割り振りを許可せずに、内部アプリケーション ロードバランサの転送ルールに予約済み内部 IP アドレスを明示的に設定しています。転送ルールの IP アドレスは予約しておくことをおすすめします。

マネージド インスタンス グループのバックエンドを作成する

このセクションでは、テンプレートとマネージド インスタンス グループの作成方法を説明します。このマネージド インスタンス グループに VM インスタンスを作成し、内部アプリケーション ロードバランサ例のバックエンド サーバーを実行します。クライアントからのトラフィックは、これらのバックエンド サーバーにロードバランスされます。わかりやすく説明するために、バックエンド サーバーはそれぞれ独自のホスト名を提供します。

コンソール

  1. インスタンス テンプレートを作成します。Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

    1. [インスタンス テンプレートを作成] をクリックします。
    2. [名前] に「l7-ilb-backend-template」と入力します。
    3. [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。これらの手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。ブートディスクを変更する必要がある場合は、[変更] をクリックします。
      1. [オペレーティング システム] で [Debian] を選択します。
      2. [バージョン] で、利用可能な Debian イメージ(Debian GNU/Linux 10 (buster) など)を選択します。
      3. [選択] をクリックします。
    4. [詳細オプション] をクリックして、[ネットワーキング] をクリックします。
    5. ネットワーク タグ allow-ssh,load-balanced-backend を入力します。
    6. [ネットワーク インターフェース] セクションで、[共有ネットワーク(共有元のホスト プロジェクト: HOST_PROJECT_ID] を選択します。
    7. lb-network ネットワークから lb-frontend-and-backend-subnet サブネットを選択します。
    8. [管理] をクリックします。[管理] で、[起動スクリプト] フィールドに次のスクリプトを挿入します。
       #! /bin/bash
       apt-get update
       apt-get install apache2 -y
       a2ensite default-ssl
       a2enmod ssl
       vm_hostname="$(curl -H "Metadata-Flavor:Google" 
      http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" |
      tee /var/www/html/index.html systemctl restart apache2
    9. [作成] をクリックします。
  2. マネージド インスタンス グループを作成します。Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

    1. [インスタンス グループを作成] をクリックします。
    2. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
    3. [名前] に「l7-ilb-backend-example」と入力します。
    4. [ロケーション] で [シングルゾーン] を選択します。
    5. [リージョン] で、us-west1 を選択します。
    6. [ゾーン] で、[us-west1-a] を選択します。
    7. [インスタンス テンプレート] で [l7-ilb-backend-template] を選択します。
    8. グループ内に作成するインスタンスの数を指定します。

      この例では、[自動スケーリング] で次のオプションを指定します。

      • [自動スケーリング モード] で [Off:do not autoscale] を選択します。
      • [インスタンスの最大数] に「2」と入力します。

      オプションとして、UI の [自動スケーリング] セクションで、インスタンスの CPU 使用率に基づいてインスタンスを自動的に追加または削除するようにインスタンス グループを構成できます。

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

gcloud

このガイドの gcloud の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。

  1. gcloud compute instance-templates create コマンドを使用して、HTTP サーバーで VM インスタンス テンプレートを作成します。

    gcloud compute instance-templates create l7-ilb-backend-template \
    --region=us-west1 \
    --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --tags=allow-ssh,load-balanced-backend \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2' \
    --project=SERVICE_PROJECT_ID
    
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create l7-ilb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-ilb-backend-template \
        --project=SERVICE_PROJECT_ID
    

Terraform

  1. VM インスタンス テンプレートを作成します。

    # Instance template
    resource "google_compute_instance_template" "default" {
      name     = "l7-ilb-backend-template"
      provider = google-beta
      project  = "my-service-project-id"
      region   = "us-west1"
      # For machine type, using small. For more options check https://cloud.google.com/compute/docs/machine-types
      machine_type = "e2-small"
      tags         = ["allow-ssh", "load-balanced-backend"]
      network_interface {
        network    = google_compute_network.lb_network.id
        subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
        access_config {
          # add external ip to fetch packages like apache2, ssl
        }
      }
      disk {
        source_image = "debian-cloud/debian-10"
        auto_delete  = true
        boot         = true
      }
    
      # install apache2 and serve a simple web page
      metadata = {
        startup-script = <<EOF
        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        sudo echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2
        EOF
      }
    }
  2. マネージド インスタンス グループを作成する。

    HTTP の場合:

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "http"
        port = 80
      }
    }

    HTTPS の場合:

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "https"
        port = 443
      }
    }

ロードバランサを構成する

このセクションでは、内部アプリケーション ロードバランサのリソースを作成する方法について説明します。

  • HTTP ヘルスチェック
  • マネージド インスタンス グループをバックエンドとして使用するバックエンド サービス
  • URL マップ
  • SSL 証明書(HTTPS の場合のみ必須)
  • ターゲット プロキシ
  • 転送ルール

プロキシの可用性

同じ共有 VPC ネットワークを使用しているサービス プロジェクトの数によっては、各 Google Cloud プロジェクトが独自のネットワークをホストするネットワーク デプロイ モデルよりも、割り当てまたは上限に達するのが早い場合があります。

たとえば、Google Cloud リージョン内で、新しい内部アプリケーション ロードバランサ用のプロキシの容量が足りなくなることがあります。その場合、ロードバランサの作成時に Google Cloud コンソールでプロキシの可用性に関する警告メッセージが表示されます。この問題を解決するには、次のいずれかを行います。

  • 容量の問題が解決するまで待ちます。
  • この上限を引き上げるには、Google Cloud セールスチームにお問い合わせください。

コンソール

コンテキストをサービス プロジェクトに切り替える

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    ダッシュボードに移動

  2. ページ上部にある [選択元] リストをクリックします。表示された [選択元] ウィンドウで、ロードバランサを作成するサービス プロジェクトを選択します。

ロードバランサのタイプを選択する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。
  3. [アプリケーション ロードバランサ(HTTP/S)] カードで [構成を開始] をクリックします。
  4. [インターネット接続または内部専用] で [VM 間のみ] を選択します。この設定は、ロードバランサが内部であることを意味します。

  5. [続行] をクリックします。

ロードバランサを準備する

  1. ロードバランサの [名前] に「l7-ilb-shared-vpc」と入力します。
  2. [リージョン] で us-west1 を選択します。
  3. [ネットワーク] で [lb-network] を選択します([プロジェクト: HOST_PROJECT_ID] から)。

    [共有 VPC ネットワークに必要なプロキシ専用サブネット] という警告が表示されたら、ホスト プロジェクト管理者が lb-network 共有 VPC ネットワークの us-west1 リージョンに proxy-only-subnet を作成していることを確認します。このページで、プロキシ専用サブネットを表示する権限がなくても、ロードバランサの作成は成功します。

  4. ウィンドウを開いたままにして続行します。

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスの作成または選択] メニューから [バックエンド サービスを作成] を選択します。
  3. バックエンド サービスの [名前] を l7-ilb-backend-service に設定します。
  4. [バックエンド タイプ] をインスタンス グループに設定します。
  5. [新しいバックエンド] セクションで、次の操作を行います。
    1. [インスタンス グループ] を l7-ilb-backend-example に設定します。
    2. [ポート番号] を 80 に設定します。
    3. [分散モード] を [使用率] に設定します。
    4. [完了] をクリックします。
  6. [ヘルスチェック] セクションで、[ヘルスチェックを作成] を選択し、次のパラメータを選択します。
    1. 名前: l7-ilb-basic-check
    2. プロトコル: HTTP
    3. ポート: 80
  7. [保存して次へ] をクリックします。
  8. [作成] をクリックします。

ルーティング ルールを構成する

  • [ルーティング ルール] をクリックします。l7-ilb-backend-service が、ホストとパスが一致しなかった場合に使用される唯一のバックエンド サービスであることを確認します。

トラフィック管理の詳細については、トラフィック管理の設定をご覧ください。

フロントエンドを構成する

HTTP の場合:

  1. [フロントエンドの構成] をクリックします。
  2. [名前] を l7-ilb-forwarding-rule に設定します。
  3. [プロトコル] を HTTP に設定します。
  4. [サブネットワーク] を [lb-frontend-and-backend-subnet] に設定します。リストで選択できる場合でも、フロントエンドにプロキシ専用サブネットは選択しないでください。
  5. [ポート] を 80 に設定します。
  6. [IP アドレス] メニューをクリックし、[IP アドレスを作成] をクリックします。
  7. [静的内部 IP アドレスの予約] パネルで、次の詳細情報を入力します。
    1. [名前] に「ip-address-shared-vpc」と入力します。
    2. [静的 IP アドレス] で、[ユーザー指定] をクリックします。[カスタム IP アドレス] に「10.1.2.99」と入力します。
    3. (省略可)この IP アドレスを複数のフロントエンドと共有する場合は、[目的] を [共有] に設定します。
  8. [完了] をクリックします。

HTTPS の場合:

クライアントとロードバランサ間で HTTPS を使用する場合は、プロキシを構成するために 1 つ以上の SSL 証明書リソースが必要になります。SSL 証明書リソースの作成方法については、SSL 証明書をご覧ください。現在、内部アプリケーション ロードバランサでは Google マネージド証明書がサポートされません。

  1. [フロントエンドの構成] をクリックします。
  2. [名前] フィールドに「l7-ilb-forwarding-rule」と入力します。
  3. [プロトコル] フィールドで [HTTPS (includes HTTP/2)] を選択します。
  4. [サブネットワーク] を [lb-frontend-and-backend-subnet] に設定します。リストで選択できる場合でも、フロントエンドにプロキシ専用サブネットは選択しないでください。
  5. HTTPS トラフィックを許可するように、[ポート] が 443 に設定されていることを確認します。
  6. [IP アドレス] メニューをクリックし、[IP アドレスを作成] をクリックします。
  7. [静的内部 IP アドレスの予約] パネルで、次の詳細情報を入力します。
    1. [名前] に「ip-address-shared-vpc」と入力します。
    2. [静的 IP アドレス] で、[ユーザー指定] をクリックします。[カスタム IP アドレス] に「10.1.2.99」と入力します。
    3. (省略可)この IP アドレスを複数のフロントエンドと共有する場合は、[目的] を [共有] に設定します。
  8. [証明書] リストをクリックします。
    1. プライマリ SSL 証明書として使用しようとしているセルフマネージド SSL 証明書リソースがすでにある場合は、メニューから選択します。
    2. そうでない場合は、[新しい証明書を作成] を選択します。
      1. [名前] に「l7-ilb-cert」と入力します。
      2. 該当するフィールドで、PEM 形式のファイルをアップロードします。
        • 公開鍵証明書
        • 証明書チェーン
        • 秘密鍵
      3. [作成] をクリックします。
  9. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、次の手順に沿って操作します。
    1. [証明書を追加] をクリックします。
    2. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックし、上記の手順を行います。
  10. [完了] をクリックします。

構成を確認して完了する

  • [作成] をクリックします。

gcloud

  1. gcloud compute health-checks create http コマンドを使用して HTTP ヘルスチェックを定義します。

    gcloud compute health-checks create http l7-ilb-basic-check \
       --region=us-west1 \
       --use-serving-port \
       --project=SERVICE_PROJECT_ID
    
  2. gcloud compute backend-services create コマンドを使用してバックエンド サービスを定義します。

    gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=l7-ilb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  3. gcloud compute backend-services add-backend コマンドを使用して、バックエンド サービスにバックエンドを追加します。

    gcloud compute backend-services add-backend l7-ilb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-ilb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  4. gcloud compute url-maps create コマンドを使用して、URL マップを作成します。

    gcloud compute url-maps create l7-ilb-map \
      --default-service=l7-ilb-backend-service \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    
  5. ターゲット プロキシを作成します。

    HTTP の場合:

    内部 HTTP ロードバランサの場合は、gcloud compute target-http-proxies create コマンドを使用してターゲット プロキシを作成します。

    gcloud compute target-http-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

    HTTPS の場合:

    SSL 証明書リソースの作成方法については、SSL 証明書をご覧ください。現在、内部アプリケーション ロードバランサでは Google マネージド証明書がサポートされません。

    ファイルパスを変数名に割り当てます。

    export LB_CERT=path to PEM-formatted file
    
    export LB_PRIVATE_KEY=path to PEM-formatted file
    

    gcloud compute ssl-certificates create コマンドを使用してリージョン SSL 証明書を作成します。

    gcloud compute ssl-certificates create l7-ilb-cert \
      --certificate=$LB_CERT \
      --private-key=$LB_PRIVATE_KEY \
      --region=us-west1
    

    リージョン SSL 証明書を使用して、gcloud compute target-https-proxies create コマンドでターゲット プロキシを作成します。

    gcloud compute target-https-proxies create l7-ilb-proxy \
      --url-map=l7-ilb-map \
      --region=us-west1 \
      --ssl-certificates=l7-ilb-cert \
      --project=SERVICE_PROJECT_ID
    
  6. 転送ルールを作成します。

    カスタム ネットワークでは、転送ルールでサブネットを参照する必要があります。

    転送ルールの IP アドレスには、lb-frontend-and-backend-subnet を使用します。プロキシ専用サブネットを使用すると、転送ルールの作成に失敗します。

    HTTP の場合:

    適切なフラグを設定して gcloud compute forwarding-rules create コマンドを実行します。

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_NAME \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

    HTTPS の場合:

    適切なフラグを設定して gcloud compute forwarding-rules create コマンドを実行します。

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_NAME \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=l7-ilb-proxy \
      --target-https-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_ID
    

Terraform

  1. HTTP ヘルスチェックを定義します。

    HTTP の場合:

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-id"
      timeout_sec        = 1
      check_interval_sec = 1
      http_health_check {
        port = "80"
      }
    }

    HTTPS の場合:

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-id"
      timeout_sec        = 1
      check_interval_sec = 1
      https_health_check {
        port = "443"
      }
    }

  2. バックエンド サービスを定義します。

    # backend service
    resource "google_compute_region_backend_service" "default" {
      name                  = "l7-ilb-backend-service"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      protocol              = "HTTP"
      load_balancing_scheme = "INTERNAL_MANAGED"
      timeout_sec           = 10
      health_checks         = [google_compute_health_check.default.id]
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }
  3. URL マップを作成します。

    # URL map
    resource "google_compute_region_url_map" "default" {
      name            = "l7-ilb-map"
      provider        = google-beta
      project         = "my-service-project-id"
      region          = "us-west1"
      default_service = google_compute_region_backend_service.default.id
    }
  4. ターゲット プロキシを作成します。

    HTTP の場合:

    # HTTP target proxy
    resource "google_compute_region_target_http_proxy" "default" {
      name     = "l7-ilb-proxy"
      provider = google-beta
      project  = "my-service-project-id"
      region   = "us-west1"
      url_map  = google_compute_region_url_map.default.id
    }

    HTTPS の場合: リージョン SSL 証明書を作成します。

    SSL 証明書リソースの作成方法については、SSL 証明書をご覧ください。現在、内部アプリケーション ロードバランサでは Google マネージド証明書がサポートされません。

    # Use self-signed SSL certificate
    resource "google_compute_region_ssl_certificate" "default" {
      name        = "l7-ilb-cert"
      provider    = google-beta
      project     = "my-service-project-id"
      region      = "us-west1"
      private_key = file("sample-private.key") # path to PEM-formatted file
      certificate = file("sample-server.cert") # path to PEM-formatted file
    }

    リージョン SSL 証明書を使用してターゲット プロキシを作成する

    # HTTPS target proxy
    resource "google_compute_region_target_https_proxy" "default" {
      name             = "l7-ilb-proxy"
      provider         = google-beta
      project          = "my-service-project-id"
      region           = "us-west1"
      url_map          = google_compute_region_url_map.default.id
      ssl_certificates = [google_compute_region_ssl_certificate.default.id]
    }
  5. 転送ルールを作成します。

    カスタム ネットワークでは、転送ルールでサブネットを参照する必要があります。

    HTTP の場合:

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "80"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_http_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

    HTTPS の場合:

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "443"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_https_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

ロードバランサをテストする

ロードバランサをテストするには、まず、サンプル クライアント VM を作成します。次に、VM との SSH セッションを確立し、この VM からロードバランサにトラフィックを送信します。

テスト用の VM インスタンスを作成する

クライアントは、ホスト プロジェクトまたは接続されたサービス プロジェクトのいずれかに配置できます。この例では、サービス プロジェクトにクライアント VM をデプロイして、ロードバランサが動作していることをテストします。クライアントは、同じ共有 VPC ネットワークを使用し、ロードバランサと同じリージョンに存在する必要があります。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [インスタンスを作成] をクリックします。

  3. [名前] を client-vm に設定します。

  4. ゾーンus-west1-a に設定します。

  5. [詳細オプション] をクリックして、[ネットワーキング] をクリックします。

  6. ネットワーク タグ allow-ssh,load-balanced-backend を入力します。

  7. [ネットワーク インターフェース] セクションで、[共有ネットワーク(共有元のホスト プロジェクト: HOST_PROJECT_ID] を選択します。

  8. lb-network ネットワークから lb-frontend-and-backend-subnet サブネットを選択します。

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

gcloud

テスト用の VM インスタンスを作成します。

gcloud compute instances create client-vm \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --zone=us-west1-a \
    --tags=allow-ssh \
    --project=SERVICE_PROJECT_ID

Terraform

テスト用の VM インスタンスを作成します。

resource "google_compute_instance" "vm_test" {
  name         = "client-vm"
  provider     = google-beta
  project      = "my-service-project-id"
  zone         = "us-west1-a"
  machine_type = "e2-small"
  tags         = ["allow-ssh"]
  network_interface {
    network    = google_compute_network.lb_network.id
    subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-10"
    }
  }
  lifecycle {
    ignore_changes = [
      metadata["ssh-keys"]
    ]
  }
}

ロードバランサにトラフィックを送信する

SSH を使用して、作成したインスタンスに接続し、内部アプリケーション ロードバランサの転送ルールの IP アドレスを介してバックエンドの HTTP(S) サービスに到達可能であることと、バックエンド インスタンス間でトラフィックのロード バランシングが行われていることをテストします。

  1. SSH を使用してクライアント インスタンスに接続します。

    gcloud compute ssh client-vm \
       --zone=us-west1-a
    
  2. IP アドレスがホスト名を提供していることを確認します。LB_IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。

    curl LB_IP_ADDRESS
    

    HTTPS テストの場合、curl は次のものに置き換えます。

    curl -k -s 'https://LB_IP_ADDRESS:443'
    

    -k フラグを指定すると、curl は証明書の検証をスキップします。

クロス プロジェクト バックエンド サービスを使用してロードバランサを構成する

このページの前の例では、すべてのロードバランサ コンポーネントとそのバックエンドがサービス プロジェクト内に作成される共有 VPC デプロイを設定しました。

内部アプリケーション ロードバランサでは、1 つのホストまたはサービス プロジェクトの URL マップが、共有 VPC 環境の複数のサービス プロジェクトにまたがるバックエンド サービス(とバックエンド)を参照できる共有 VPC デプロイを構成することもできます。これはプロジェクト間のサービス参照と呼ばれます。

このセクションの手順では、サポートされている以下のいずれかの組み合わせを構成できます。

  • 転送ルール、ホスト プロジェクトのターゲット プロキシと URL マップ、サービス プロジェクトのバックエンド サービス
  • サービス プロジェクトの転送ルール、ターゲット プロキシ、URL マップ、別のサービス プロジェクトのバックエンド サービス

プロジェクト間のサービス参照は、インスタンス グループ、サーバーレス NEG、他のサポートされているバックエンド タイプで使用できます。サーバーレス NEG を使用している場合は、ロードバランサのフロントエンドを作成する VPC ネットワークに VM を作成する必要があります。例については、「Cloud Run を使用して内部アプリケーション ロードバランサを設定する」の特定のサブネットで VM インスタンスを作成するをご覧ください。

要件を設定する

この例では、フロントエンドとバックエンドが別のサービス プロジェクトに存在するサンプル ロードバランサを構成します。

共有 VPC を設定して、この例のネットワーク、サブネット、ファイアウォール ルールを構成するための前提条件をすべて満たす必要があります。まだ行っていない場合は、必要な手順を完了してください。手順については、以下をご覧ください。

図 2. ロードバランサのフロントエンドとバックエンドが別のサービス プロジェクトに存在する
図 2. ロードバランサのフロントエンドとバックエンドが別のサービス プロジェクトに存在する

サービス プロジェクト B にバックエンドとバックエンド サービスを作成する

このセクションの手順はすべて、サービス プロジェクト B で行う必要があります。

コンソール

  1. インスタンス テンプレートを作成します。Google Cloud コンソールで、[インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

    1. [インスタンス テンプレートを作成] をクリックします。
    2. インスタンス テンプレートの名前cross-ref-backend-template)を入力します。
    3. [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。これらの手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。ブートディスクを変更する必要がある場合は、[変更] をクリックします。
      1. [オペレーティング システム] で [Debian] を選択します。
      2. [バージョン] で、利用可能な Debian イメージ(Debian GNU/Linux 10 (buster) など)を選択します。
      3. [選択] をクリックします。
    4. [詳細オプション] をクリックして、[ネットワーキング] をクリックします。
    5. ネットワーク タグ allow-ssh,load-balanced-backend を入力します。
    6. [ネットワーク インターフェース] セクションで、[共有ネットワーク(共有元のホスト プロジェクト: HOST_PROJECT_ID] を選択します。
    7. lb-network ネットワークから lb-frontend-and-backend-subnet サブネットを選択します。
    8. [管理] をクリックします。[管理] で、[起動スクリプト] フィールドに次のスクリプトを挿入します。
      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" 
      http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" |
      tee /var/www/html/index.html systemctl restart apache2
    9. [作成] をクリックします。
  2. マネージド インスタンス グループを作成します。Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

    1. [インスタンス グループを作成] をクリックします。
    2. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
    3. [名前] にインスタンス グループの名前(cross-ref-ig-backend)を入力します。
    4. [ロケーション] で [シングルゾーン] を選択します。
    5. [リージョン] で、us-west1 を選択します。
    6. [ゾーン] で、[us-west1-a] を選択します。
    7. [インスタンス テンプレート] で cross-ref-backend-template を選択します。
    8. グループ内に作成するインスタンスの数を指定します。

      この例では、[自動スケーリング] で次のオプションを指定します。

      • [自動スケーリング モード] で [Off:do not autoscale] を選択します。
      • [インスタンスの最大数] に「2」と入力します。

      オプションとして、UI の [自動スケーリング] セクションで、インスタンスの CPU 使用率に基づいてインスタンスを自動的に追加または削除するようにインスタンス グループを構成できます。

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

  3. リージョン バックエンド サービスを作成します。この手順の一環として、ヘルスチェックを作成して、バックエンド サービスへのバックエンドの追加も行います。Google Cloud コンソールの [バックエンド] ページに移動します。

    [バックエンド] に移動

    1. [リージョン バックエンド サービスを作成] をクリックします。
    2. バックエンド サービスの名前cross-ref-backend-service)を入力します。
    3. [リージョン] で [us-west1] を選択します。
    4. [ロードバランサの種類] で、[リージョン内部アプリケーション ロードバランサ(INTERNAL_MANAGED)] を選択します。
    5. [バックエンド タイプ] を [インスタンス グループ] に設定します。
    6. [バックエンド] セクションで、[ネットワーク] を lb-network に設定します。
    7. [バックエンドを追加] をクリックして、次のフィールドを設定します。
      1. [インスタンス グループ] を cross-ref-ig-backend に設定します。
      2. [ポート番号] に「80」と入力します。
      3. [分散モード] を [使用率] に設定します。
      4. [完了] をクリックします。
    8. [ヘルスチェック] セクションで、[ヘルスチェックを作成] を選択し、次のパラメータを選択します。
      1. 名前: cross-ref-http-health-check
      2. プロトコル: HTTP
      3. ポート: 80
      4. [保存] をクリックします。
    9. [続行] をクリックします。
    10. 省略可: [権限の追加] セクションで、他のバックエンド ロードバランサ管理者の IAM プリンシパル(通常はメールアドレス)を入力して、管理者のプロジェクトでこのバックエンド サービスをロードバランサに使用できるようにします。この権限がないと、プロジェクト間のサービス参照を使用できません。

      このプロジェクトのバックエンド サービスのアクセス制御ポリシーを設定する権限がなくても、ここでバックエンド サービスを作成することは可能です。バックエンド サービスを使用する権限をロードバランサ管理者に付与するセクションで説明されているように、この処理は権限のあるユーザーがあとで行うことができます。このセクションでは、このプロジェクトのすべてのバックエンド サービスへのアクセスを許可する方法についても説明されています。これにより、新しいバックエンド サービスを作成するたびにアクセス権を付与する必要がなくなります。

    11. [作成] をクリックします。

gcloud

  1. gcloud compute instance-templates create コマンドを使用して、HTTP サーバーで VM インスタンス テンプレートを作成します。

    gcloud compute instance-templates create BACKEND_IG_TEMPLATE \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
        --tags=allow-ssh,load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_B_ID
    

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

    • BACKEND_IG_TEMPLATE: インスタンス グループ テンプレートの名前。
    • SERVICE_PROJECT_B_ID: ロードバランサのバックエンドとバックエンド サービスが作成されるサービス プロジェクト B のプロジェクト ID。
    • HOST_PROJECT_ID: 共有 VPC ホスト プロジェクトのプロジェクト ID。
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create BACKEND_MIG \
        --zone=us-west1-a \
        --size=2 \
        --template=BACKEND_IG_TEMPLATE \
        --project=SERVICE_PROJECT_B_ID
    

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

    • BACKEND_MIG: バックエンド インスタンス グループの名前。
  3. gcloud compute health-checks create http コマンドを使用して HTTP ヘルスチェックを定義します。

    gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
      --region=us-west1 \
      --use-serving-port \
      --project=SERVICE_PROJECT_B_ID
    

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

    • HTTP_HEALTH_CHECK_NAME: HTTP ヘルスチェックの名前。
  4. gcloud compute backend-services create コマンドを使用してバックエンド サービスを定義します。

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=HTTP_HEALTH_CHECK_NAME \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_B_ID
    

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

    • BACKEND_SERVICE_NAME: サービス プロジェクト B で作成されたバックエンド サービスの名前。
  5. gcloud compute backend-services add-backend コマンドを使用して、バックエンド サービスにバックエンドを追加します。

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --balancing-mode=UTILIZATION \
      --instance-group=BACKEND_MIG \
      --instance-group-zone=us-west1-a \
      --region=us-west1 \
      --project=SERVICE_PROJECT_B_ID
    

Terraform

  1. インスタンス テンプレートを作成します。

    # Instance template
    resource "google_compute_instance_template" "default" {
      name     = "l7-ilb-backend-template"
      provider = google-beta
      project  = "my-service-project-b-id"
      region   = "us-west1"
      # For machine type, using small. For more options check https://cloud.google.com/compute/docs/machine-types
      machine_type = "e2-small"
      tags         = ["allow-ssh", "load-balanced-backend"]
      network_interface {
        network    = google_compute_network.lb_network.id
        subnetwork = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
        access_config {
          # add external ip to fetch packages like apache2, ssl
        }
      }
      disk {
        source_image = "debian-cloud/debian-10"
        auto_delete  = true
        boot         = true
      }
    
      # install apache2 and serve a simple web page
      metadata = {
        startup-script = <<EOF
        #! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        sudo echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        sudo systemctl restart apache2
        EOF
      }
    }
  2. マネージド インスタンス グループを作成する。

    HTTP の場合

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-b-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "http"
        port = 80
      }
    }

    HTTPS の場合

    # MIG
    resource "google_compute_instance_group_manager" "default" {
      name               = "l7-ilb-backend-example"
      provider           = google-beta
      project            = "my-service-project-b-id"
      zone               = "us-west1-a"
      base_instance_name = "vm"
      target_size        = 2
      version {
        instance_template = google_compute_instance_template.default.id
        name              = "primary"
      }
      named_port {
        name = "https"
        port = 443
      }
    }
  3. バックエンドのヘルスチェックを作成します。

    HTTP の場合

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-b-id"
      timeout_sec        = 1
      check_interval_sec = 1
      http_health_check {
        port = "80"
      }
    }

    HTTPS の場合

    # health check
    resource "google_compute_health_check" "default" {
      name               = "l7-ilb-basic-check"
      provider           = google-beta
      project            = "my-service-project-b-id"
      timeout_sec        = 1
      check_interval_sec = 1
      https_health_check {
        port = "443"
      }
    }
  4. リージョン バックエンド サービスを作成します。

    # backend service
    resource "google_compute_region_backend_service" "default" {
      name                  = "l7-ilb-backend-service"
      provider              = google-beta
      project               = "my-service-project-b-id"
      region                = "us-west1"
      protocol              = "HTTP"
      load_balancing_scheme = "INTERNAL_MANAGED"
      timeout_sec           = 10
      health_checks         = [google_compute_health_check.default.id]
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }

サービス プロジェクト A にロードバランサのフロントエンドと URL マップを作成する

このセクションの手順はすべて、サービス プロジェクト A で行う必要があります。

コンソール

ロードバランサのタイプを選択する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。
  3. [アプリケーション ロードバランサ(HTTP/S)] カードで [構成を開始] をクリックします。
  4. [インターネット接続または内部専用] で [VM 間のみ] を選択します。この設定は、ロードバランサが内部であることを意味します。

  5. [続行] をクリックします。

ロードバランサを準備する

  1. ロードバランサの名前を入力します。
  2. [リージョン] で us-west1 を選択します。
  3. [ネットワーク] で [lb-network] を選択します([プロジェクト: HOST_PROJECT_NAME] から)。

    [共有 VPC ネットワークに必要なプロキシ専用サブネット] という警告が表示されたら、ホスト プロジェクト管理者が lb-network 共有 VPC ネットワークの us-west1 リージョンに proxy-only-subnet を作成していることを確認します。このページで、プロキシ専用サブネットを表示する権限がなくても、ロードバランサの作成は成功します。

  4. ウィンドウを開いたままにして続行します。

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。
  2. [プロジェクト間のバックエンド サービス] をクリックします。
  3. [プロジェクト ID] に、サービス プロジェクト B のプロジェクト ID を入力します。
  4. [バックエンド サービス名] に、使用するサービス プロジェクト B のバックエンド サービスの名前を入力します。この例では cross-ref-backend-service です。
  5. [バックエンド サービスを追加] をクリックします。

ルーティング ルールを構成する

  • [ルーティング ルール] をクリックします。cross-ref-backend-service が、一致しないホストと一致しないパスの唯一のバックエンド サービスであることを確認します。

トラフィック管理の詳細については、トラフィック管理の設定をご覧ください。

フロントエンドを構成する

プロジェクト間のサービスが機能するようにするには、フロントエンドは、バックエンド サービスの作成に使用した共有 VPC ホスト プロジェクトと同じネットワーク(lb-network)を使用する必要があります。

HTTP の場合:

  1. [フロントエンドの構成] をクリックします。
  2. 転送ルールの名前に「cross-ref-http-forwarding-rule」と入力します。
  3. [プロトコル] を HTTP に設定します。
  4. [サブネットワーク] を [lb-frontend-and-backend-subnet] に設定します。リストで選択できる場合でも、フロントエンドにプロキシ専用サブネットは選択しないでください。
  5. [ポート] を 80 に設定します。
  6. [IP アドレス] メニューをクリックし、[IP アドレスを作成] をクリックします。
  7. [静的内部 IP アドレスの予約] パネルで、次の詳細情報を入力します。
    1. [名前] に「cross-ref-ip-address」と入力します。
    2. [静的 IP アドレス] で、[ユーザー指定] をクリックします。[カスタム IP アドレス] に「10.1.2.98」と入力します。
    3. (省略可)この IP アドレスを複数のフロントエンドと共有する場合は、[目的] を [共有] に設定します。
  8. [完了] をクリックします。

HTTPS の場合:

クライアントとロードバランサ間で HTTPS を使用する場合は、プロキシを構成するために 1 つ以上の SSL 証明書リソースが必要になります。SSL 証明書リソースの作成方法については、SSL 証明書をご覧ください。現在、内部アプリケーション ロードバランサでは Google マネージド証明書がサポートされません。

  1. [フロントエンドの構成] をクリックします。
  2. 転送ルールの名前に「cross-ref-https-forwarding-rule」と入力します。
  3. [プロトコル] フィールドで [HTTPS (includes HTTP/2)] を選択します。
  4. [サブネットワーク] を [lb-frontend-and-backend-subnet] に設定します。リストで選択できる場合でも、フロントエンドにプロキシ専用サブネットは選択しないでください。
  5. HTTPS トラフィックを許可するように、[ポート] が 443 に設定されていることを確認します。
  6. [IP アドレス] メニューをクリックし、[IP アドレスを作成] をクリックします。
  7. [静的内部 IP アドレスの予約] パネルで、次の詳細情報を入力します。
    1. [名前] に「cross-ref-ip-address」と入力します。
    2. [静的 IP アドレス] で、[ユーザー指定] をクリックします。[カスタム IP アドレス] に「10.1.2.98」と入力します。
    3. (省略可)この IP アドレスを複数のフロントエンドと共有する場合は、[目的] を [共有] に設定します。
  8. [証明書] リストをクリックします。
    1. プライマリ SSL 証明書として使用しようとしているセルフマネージド SSL 証明書リソースがすでにある場合は、メニューから選択します。
    2. そうでない場合は、[新しい証明書を作成] を選択します。
      1. SSL 証明書の名前を入力します。
      2. 該当するフィールドで、PEM 形式のファイルをアップロードします。
        • 公開鍵証明書
        • 証明書チェーン
        • 秘密鍵
      3. [作成] をクリックします。
  9. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、次の手順に沿って操作します。
    1. [証明書を追加] をクリックします。
    2. [証明書] リストから証明書を選択するか、[新しい証明書の作成] をクリックし、上記の手順を行います。
  10. [完了] をクリックします。

構成を確認して完了する

  • [作成] をクリックします。

ロードバランサをテストする

ロードバランサが作成されたら、ロードバランサのテストの手順でロードバランサをテストします。

gcloud

  1. URL マップを作成し、サービス プロジェクト B に作成されたバックエンド サービスにデフォルト サービスを設定します。

    gcloud compute url-maps create URL_MAP_NAME \
        --default-service=projects/SERVICE_PROJECT_B_ID/regions/us-west1/backendServices/BACKEND_SERVICE_NAME \
        --region=us-west1 \
        --project=SERVICE_PROJECT_A_ID
    

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

    • URL_MAP_NAME: URL マップの名前。
    • BACKEND_SERVICE_NAME: サービス プロジェクト B で作成されたバックエンド サービスの名前。
    • SERVICE_PROJECT_B_ID: ロードバランサのバックエンドとバックエンド サービスが作成されたサービス プロジェクト B のプロジェクト ID。
    • SERVICE_PROJECT_A_ID: ロードバランサのフロントエンドが作成されたサービス プロジェクト A のプロジェクト ID。

    サービス プロジェクト B にバックエンド サービスの compute.backendServices.use 権限がない場合、URL マップの作成は失敗します。

  2. ターゲット プロキシを作成します。

    HTTP の場合:

    gcloud compute target-http-proxies create HTTP_TARGET_PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

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

    • HTTP_TARGET_PROXY_NAME: ターゲット HTTP プロキシの名前。

    HTTPS の場合:

    gcloud compute ssl-certificates create コマンドを使用してリージョン SSL 証明書を作成します。

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --certificate=PATH_TO_CERTIFICATE \
      --private-key=PATH_TO_PRIVATE_KEY \
      --region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

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

    • SSL_CERTIFICATE_NAME: SSL 証明書リソースの名前。
    • PATH_TO_CERTIFICATE: PEM 形式のローカル SSL 証明書ファイルのパス。
    • PATH_TO_PRIVATE_KEY: PEM 形式のローカル SSL 証明書の秘密鍵へのパス。

    リージョン SSL 証明書を使用して、gcloud compute target-https-proxies create コマンドでターゲット プロキシを作成します。

    gcloud compute target-https-proxies create HTTPS_TARGET_PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --region=us-west1 \
      --ssl-certificates=SSL_CERTIFICATE_NAME \
      --project=SERVICE_PROJECT_A_ID
    

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

    • HTTPS_TARGET_PROXY_NAME: ターゲット HTTPS プロキシの名前。
  3. 転送ルールを作成します。プロジェクト間のサービスが機能するようにするには、転送ルールは、バックエンド サービスの作成に使用した共有 VPC ホスト プロジェクトと同じネットワーク(lb-network)を使用する必要があります。

    HTTP の場合:

    gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_CROSS_REF \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=HTTP_TARGET_PROXY_NAME \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

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

    • HTTP_FORWARDING_RULE_NAME: HTTP トラフィックの処理に使用される転送ルールの名前。

    HTTPS の場合:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
      --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=IP_ADDRESS_CROSS_REF \
      --ports=443 \
      --region=us-west1 \
      --target-https-proxy=HTTPS_TARGET_PROXY_NAME \
      --target-https-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_A_ID
    

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

    • HTTPS_FORWARDING_RULE_NAME: HTTPS トラフィックの処理に使用される転送ルールの名前。
  4. ロードバランサをテストするには、ロードバランサのテストで説明されている操作を行います。

Terraform

  1. URL マップを作成します。

    # URL map
    resource "google_compute_region_url_map" "default" {
      name            = "l7-ilb-map"
      provider        = google-beta
      project         = "my-service-project-a-id"
      region          = "us-west1"
      default_service = google_compute_region_backend_service.default.id
    }
  2. ターゲット プロキシを作成します。

    HTTP の場合

    # HTTP target proxy
    resource "google_compute_region_target_http_proxy" "default" {
      name     = "l7-ilb-proxy"
      provider = google-beta
      project  = "my-service-project-a-id"
      region   = "us-west1"
      url_map  = google_compute_region_url_map.default.id
    }

    HTTPS の場合

    リージョン SSL 証明書を作成します。

    # Use self-signed SSL certificate
    resource "google_compute_region_ssl_certificate" "default" {
      name        = "l7-ilb-cert"
      provider    = google-beta
      project     = "my-service-project-a-id"
      region      = "us-west1"
      private_key = file("sample-private.key") # path to PEM-formatted file
      certificate = file("sample-server.cert") # path to PEM-formatted file
    }

    リージョン SSL 証明書を使用してターゲット プロキシを作成する

    # HTTPS target proxy
    resource "google_compute_region_target_https_proxy" "default" {
      name             = "l7-ilb-proxy"
      provider         = google-beta
      project          = "my-service-project-a-id"
      region           = "us-west1"
      url_map          = google_compute_region_url_map.default.id
      ssl_certificates = [google_compute_region_ssl_certificate.default.id]
    }
  3. 転送ルールを作成します。

    HTTP の場合

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-a-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "80"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_http_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }

    HTTPS の場合

    # Forwarding rule
    resource "google_compute_forwarding_rule" "default" {
      name                  = "l7-ilb-forwarding-rule"
      provider              = google-beta
      project               = "my-service-project-a-id"
      region                = "us-west1"
      ip_protocol           = "TCP"
      port_range            = "443"
      load_balancing_scheme = "INTERNAL_MANAGED"
      target                = google_compute_region_target_https_proxy.default.id
      network               = google_compute_network.lb_network.id
      subnetwork            = google_compute_subnetwork.lb_frontend_and_backend_subnet.id
      network_tier          = "PREMIUM"
      depends_on            = [google_compute_subnetwork.lb_frontend_and_backend_subnet]
    }
  4. ロードバランサをテストするには、ロードバランサのテストで説明されている操作を行います。

バックエンド サービスを使用する権限をロードバランサ管理者に付与する

ロードバランサが他のサービス プロジェクトのバックエンド サービスを参照するには、ロードバランサ管理者に compute.backendServices.use 権限が必要です。この権限を付与するには、Compute ロードバランサ サービス ユーザー(roles/compute.loadBalancerServiceUser)という IAM 事前定義ロールを使用します。このロールは、サービス プロジェクト管理者が付与する必要があり、プロジェクト レベルまたは個々のバックエンド サービスレベルで適用できます。

バックエンド サービスの作成で、バックエンド サービスレベルで必要な権限を付与している場合、この手順は必ずしも必要ではありません。このセクションをスキップするか、このまま読み進めて、このプロジェクトのすべてのバックエンド サービスへのアクセスを許可する方法を確認してください。これにより、新しいバックエンドを作成するたびにアクセス権を付与する必要がなくなります。

この例では、サービス プロジェクト B のサービス プロジェクト管理者は、次のいずれかのコマンドを実行して、サービス プロジェクト A のロードバランサ管理者に compute.backendServices.use 権限を付与する必要があります。これは、プロジェクト レベルで(プロジェクト内のすべてのバックエンド サービスの場合)、またはバックエンド サービスごとに行うことができます。

コンソール

プロジェクト レベルの権限

プロジェクト内のすべてのバックエンド サービスに権限を付与するには、次の操作を行います。

この手順を完了するには、compute.regionBackendServices.setIamPolicy 権限と resourcemanager.projects.setIamPolicy 権限が必要です。

  1. Google Cloud コンソールで [共有ロード バランシング サービス] ページに移動します。

    [共有ロード バランシング サービス] に移動

  2. [バックエンド サービスのすべての権限(プロジェクト レベルの権限)] セクションで、プロジェクトを選択します。

  3. 権限パネルが表示されていない場合は、[権限パネルを表示] をクリックします。右側に [プロジェクト レベルの権限] パネルが開きます。

  4. [ プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] に、プリンシパルのメールアドレスまたはその他の識別子を入力します。

  6. [ロール] で、プルダウン リストから [Compute ロードバランサ サービス ユーザー] ロールを選択します。

  7. (省略可)ロールに条件を追加します。

  8. [保存] をクリックします。

個々のバックエンド サービスのリソースレベルの権限

プロジェクト内の個々のバックエンド サービスに権限を付与するには、次の操作を行います。

この手順を完了するには、compute.regionBackendServices.setIamPolicy 権限が必要です。

gcloud

プロジェクト レベルの権限

プロジェクト内のすべてのバックエンド サービスに権限を付与するには、次の操作を行います。

この手順を完了するには、compute.regionBackendServices.setIamPolicy 権限と resourcemanager.projects.setIamPolicy 権限が必要です。

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser"

個々のバックエンド サービスのリソースレベルの権限

バックエンド サービス レベルでは、サービス プロジェクト管理者が次のいずれかのコマンドを使用して Compute ロードバランサ サービス ユーザー ロール(roles/compute.loadBalancerServiceUser)を付与します。

この手順を完了するには、compute.regionBackendServices.setIamPolicy 権限が必要です。

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'

または

gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --project=SERVICE_PROJECT_B_ID \
    --region=us-west1

これらのコマンドを使用するには、LOAD_BALANCER_ADMIN をユーザーのプリンシパルに置き換えます(例: test-user@gmail.com)。

条件を使用して条件属性を指定することで、リージョン バックエンド サービスのサブセットにのみ適用されるように IAM 権限を構成することもできます。

次のステップ