共有 VPC のプロビジョニング

共有 VPC を使用すると、ホスト プロジェクトVPC ネットワークから、同じ組織内の別のサービス プロジェクトにサブネットをエクスポートできます。サービス プロジェクトのインスタンスは、ホスト プロジェクトの共有サブネットでネットワーク接続を得ることができます。このページでは、組織にとって必要ないくつかの管理上の準備など、共有 VPC を設定して使用する方法について説明します。

割り当て、制限、適格なリソース

開始する前に、共有 VPC の概要IAM の概要を理解しておく必要があります。特に、以下の点に注意してください。

組織の準備

管理者と IAM

組織の準備、共有 VPC ホスト プロジェクトの設定、および共有 VPC ネットワークの使用を行うには、少なくとも 3 種類の管理 IAM 役割が必要です。各役割の詳細と、オプションの役割については、共有 VPC の概要の管理者と IAM のセクションをご覧ください。

管理者 目的
組織管理者 組織管理者は、共有 VPC 管理者を指名し、共有 VPC ホスト プロジェクトが誤って削除されないように組織レベルのポリシーを定義します
共有 VPC 管理者 共有 VPC 管理者は、ホスト プロジェクトを有効にし、サービス プロジェクトを接続します。
サービス プロジェクト管理者 共有 VPC 管理者は、IAM メンバーに、ホスト プロジェクト全体またはそのサブネットの一部のみのいずれかに対してネットワーク ユーザーcompute.networkUser)の役割を付与することで、サービス プロジェクト管理者を定義します。サービス プロジェクト管理者は、サービス プロジェクトで定義されたリソースの所有権を持ち、管理を行うため、少なくともインスタンス管理者(compute.instanceAdmin)の役割を持っているか、対象のプロジェクトのプロジェクト所有者である必要があります。

ホスト プロジェクトの誤削除の防止

ホスト プロジェクトを誤って削除してしまうと、それに接続されているすべてのサービス プロジェクトが停止します。共有 VPC ホスト プロジェクトになるようプロジェクトが設定されている場合は、リーエンと呼ばれる特殊なロックがプロジェクトに適用されます。リーエンが設定されていれば、プロジェクトが誤って削除されることがなくなります。リーエンは、共有 VPC から解除されると、ホスト プロジェクトから自動的に削除されます。

組織管理者、または orgpolicy.policyAdmin 役割を持つその他のユーザーは、組織レベルのポリシーを定義して、リーエンの削除を行えるユーザーを、組織所有者と resourcemanager.lienModifier 役割を持つその他のユーザーのみに限定することができます。そのようにすると、組織所有者ではないプロジェクト所有者や、resourcemanager.lienModifier 役割を持たないプロジェクト所有者が誤って共有 VPC ホスト プロジェクトを削除することを、効果的に防止できます。resourcemanager.lienModifier 役割に関連付けられている権限の詳細については、Resource Manager ドキュメントのプロジェクトにリーエンを適用するをご覧ください。

組織ポリシーは組織内のすべてのプロジェクトに適用されるため、リーエンの削除を制限するには、これらの手順を一度行うだけで済みます。

  1. 組織管理者、または orgpolicy.policyAdmin 役割を持つ IAM メンバーとして gcloud への認証を行います。[ORG_ADMIN] は、組織管理者の名前に置き換えます。

    gcloud auth login [ORG_ADMIN]
    
  2. 次のコマンドの出力を調べて、自分の組織 ID 番号を確認します。

    gcloud organizations list
    
  3. 次のコマンドを実行して、組織に compute.restrictXpnProjectLienRemoval ポリシーを適用します。[ORG_ID] は、前の手順で確認した組織 ID 番号に置き換えます。

    gcloud beta resource-manager org-policies enable-enforce \
        --organization [ORG_ID] compute.restrictXpnProjectLienRemoval
    
  4. 組織管理者としてアカウントを保護する作業が完了したら、gcloud からログアウトします。

    gcloud auth revoke [ORG_ADMIN]
    

共有 VPC 管理者の指名

組織管理者は 1 人以上の IAM メンバーに共有 VPC 管理者の役割である compute.xpnAdmin を付与できます。この付与により、プロジェクト レベルではなく、組織レベルまたはフォルダレベルでバインディングが作成されます。そのため、IAM メンバーはプロジェクト内だけではなく、組織で定義する必要があります。

Console

組織レベルで共有 VPC 管理者の役割を付与するには

  1. 組織管理者として Google Cloud Platform Console にログインし、[IAM] ページに移動します。
    [IAM] ページに移動
  2. プロジェクト メニューから、自分の組織を選択します。
    プロジェクトを選択すると、[役割] メニューにエントリが正しく表示されません。
  3. [追加] をクリックします。
  4. [メンバー] のメールアドレスを入力します。
  5. [役割] のプルダウン メニューで、[Compute Engine] > [Compute Shared VPC 管理者] を選択します。

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

フォルダレベルで共有 VPC 管理者の役割を付与するには

  1. 組織管理者として Google Cloud Platform Console にログインし、[IAM] ページに移動します。
    [IAM] ページに移動
  2. プロジェクト メニューから、フォルダを選択します。
    プロジェクトや組織を選択した場合、選択肢が正しく表示されません。
  3. [メンバー] ページで、[追加] をクリックします。
  4. [新しいメンバー] のメールアドレスを入力します。
  5. [役割を選択] で、[Compute Engine] > [Compute Shared VPC 管理者] を選択します。
  6. [保存] をクリックします。

gcloud

  1. 組織管理者として、gcloud で認証します。[ORG_ADMIN] は、組織管理者の名前に置き換えます。

    gcloud auth login [ORG_ADMIN]
    
  2. 次のコマンドの出力を調べて、自分の組織 ID 番号を確認します。

    gcloud organizations list
    
  3. 組織レベルで共有 VPC 管理者の役割を割り当てる場合、次の手順を実施します。

    1. 既存の IAM メンバーに共有 VPC 管理者の役割を適用します。[ORG_ID] は、前の手順で確認した組織 ID 番号に置き換え、[EMAIL_ADDRESS] は、共有 VPC 管理者の役割を付与するユーザーのメールアドレスに置き換えます。

       gcloud organizations add-iam-policy-binding [ORG_ID] 
      --member='user:[EMAIL_ADDRESS]'
      --role="roles/compute.xpnAdmin"

  4. フォルダレベルで共有 VPC 管理者の役割を割り当てる場合、次の手順を実施します。

    1. このコマンドの出力を調べて、フォルダ ID を確認します。

      gcloud beta resource-manager folders list --organization=[ORG_ID]
      
    2. 既存の IAM メンバーに共有 VPC 管理者の役割を適用します。[ORG_ID] は、前の手順で確認した組織 ID 番号に置き換え、[EMAIL_ADDRESS] は、共有 VPC 管理者の役割を付与するユーザーのメールアドレスに置き換えます。

       gcloud beta resource-manager folders add-iam-policy-binding [FOLDER_ID] 
      --member=`user:[EMAIL_ADDRESS]'
      --role="roles/compute.xpnAdmin"

  5. アカウントを保護する作業が完了したら、gcloud コマンドライン ツールで組織管理者のアカウントからログアウトします。

    gcloud auth revoke [ORG_ADMIN]
    

共有 VPC の設定

このセクションのタスクはすべて、共有 VPC 管理者が行う必要があります。

ホスト プロジェクトの有効化

組織内で、共有 VPC 管理者は次の手順によって、割り当てと制限に従ってプロジェクトを共有 VPC ホスト プロジェクトとして指定できます。共有 VPC 管理者は、組織の resourcemanager.projectCreatorresourcemanager.projectDeleter の役割を持っていると、プロジェクトの作成や削除も行えます。

Console

  1. Google Cloud Platform Console の [共有 VPC] ページに移動します。
    [共有 VPC] ページに移動
  2. 共有 VPC 管理者としてログインします。
  3. プロジェクト選択ツールで、共有 VPC ホスト プロジェクトとして有効にするプロジェクトを選択します。
  4. [共有 VPC を設定] をクリックします。
  5. 次のページの [ホスト プロジェクトを有効にする] で、[保存して続行] をクリックします。
  6. [サブネットを選択する] で、次のいずれかを行います。
    1. ホスト プロジェクトの VPC ネットワーク内の現在と将来のすべてのサブネットを、次の手順で指定するサービス プロジェクトやサービス プロジェクト管理者と共有する必要がある場合、[すべてのサブネットを共有する(プロジェクト レベルの権限)] をクリックします。
    2. ホスト プロジェクトの VPC ネットワークのサブネットを、サービス プロジェクトやサービス プロジェクト管理者と選択的に共有する必要がある場合、[個々のサブネット(サブネット レベルの権限)] をクリックします。次に、[共有するサブネット] を選択します。
  7. [続行] をクリックします。
    その次の画面が表示されます。
  8. [プロジェクト名] で、ホスト プロジェクトに接続するサービス プロジェクトを指定します。サービス プロジェクトを接続しても、サービス プロジェクト管理者は定義されません。これは、次の手順で行います。
  9. [役割別にユーザーを選択する] セクションで、サービス プロジェクト管理者を追加します。これらのユーザーには、共有するサブネットの compute.networkUser の IAM 役割が付与されます。共有 VPC ホスト プロジェクトのサブネットでリソースを作成できるのは、サービス プロジェクト管理者のみです。
  10. [保存] をクリックします。

gcloud

  1. 共有 VPC 管理者として gcloud への認証を行います。[SHARED_VPC_ADMIN] は、共有 VPC 管理者の名前に置き換えます。

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. ホスト プロジェクトにする必要のあるプロジェクトに対して、共有 VPC を有効にします。[HOST_PROJECT_ID] は、プロジェクトの ID に置き換えます。

    組織レベルで共有 VPC 管理者の役割を持っている場合

    gcloud compute shared-vpc enable [HOST_PROJECT_ID]
    

    フォルダレベルで共有 VPC 管理者の役割を持っている場合

    gcloud beta compute shared-vpc enable [HOST_PROJECT_ID]
    
  3. 組織のホスト プロジェクトとしてプロジェクトがリストされていることを確認します。[ORG_ID] は、組織 ID(gcloud organizations list で確認)に置き換えます。

    gcloud compute shared-vpc organizations list-host-projects [ORG_ID]
    
  4. ホスト プロジェクトを有効にするだけでよい場合、gcloud からログアウトして、共有 VPC 管理者アカウントの認証情報を保護できます。それ以外の場合、この手順をスキップして、サービス プロジェクトを接続する手順に進みます。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

サービス プロジェクトの接続

サービス プロジェクトの管理者が共有 VPC を使用するには、サービス プロジェクトがホスト プロジェクトに接続されている必要があります。共有 VPC 管理者は以下の手順に従って、接続を完了する必要があります。

サービス プロジェクトは 1 つのホスト プロジェクトにのみ接続できますが、ホスト プロジェクトは複数のサービス プロジェクトの接続をサポートしています。詳細については、VPC 割り当てページの共有 VPC に固有の制限をご覧ください。

Console

  1. 共有 VPC 管理者として Google Cloud Platform Console にログインします。
  2. Google Cloud Platform Console の [共有 VPC] ページに移動します。
    [共有 VPC] ページに移動
  3. [接続されたプロジェクト] タブをクリックします。
  4. [接続されたプロジェクト] タブで、[プロジェクトを接続] ボタンをクリックします。
  5. [プロジェクト名] セクションで、接続するサービス プロジェクトのチェックボックスをオンにします。サービス プロジェクトを接続しても、サービス プロジェクト管理者は定義されません。これは、次の手順で行います。
  6. [VPC ネットワークの権限] セクションで、サービス プロジェクト管理者を選択します。選択されたユーザーに、共有サブネットの compute.networkUser の IAM 役割が付与されます。共有 VPC ホスト プロジェクトのサブネットでリソースを作成できるのは、サービス プロジェクト管理者のみです。
  7. [VPC ネットワーク共有モード] セクションで、次のいずれかを選択します。
    1. ホスト プロジェクトの VPC ネットワーク内の現在と将来のすべてのサブネットを、すべてのサービス プロジェクトやサービス プロジェクト管理者と共有するには、[すべてのサブネットを共有する(プロジェクト レベルの権限)] をクリックします。
    2. ホスト プロジェクトの VPC ネットワークのサブネットを、サービス プロジェクトやサービス プロジェクト管理者と選択的に共有する必要がある場合、[個々のサブネット(サブネット レベルの権限)] をクリックします。次に、[共有するサブネット] を選択します。
  8. [保存] をクリックします。

gcloud

  1. まだ共有 VPC 管理者として gcloud で認証していない場合は、認証を行います。[SHARED_VPC_ADMIN] は、共有 VPC 管理者の名前に置き換えます。

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 以前に有効にしたホスト プロジェクトにサービス プロジェクトを接続します。[SERVICE_PROJECT_ID] はサービス プロジェクトのプロジェクト ID に置き換え、[HOST_PROJECT_ID] はホスト プロジェクトのプロジェクト ID に置き換えます。

    組織レベルで共有 VPC 管理者の役割を持っている場合

    gcloud compute shared-vpc associated-projects add [SERVICE_PROJECT_ID] \
        --host-project [HOST_PROJECT_ID]
    

    フォルダレベルで共有 VPC 管理者の役割を持っている場合

    gcloud beta compute shared-vpc associated-projects add [SERVICE_PROJECT_ID] \
        --host-project [HOST_PROJECT_ID]
    
  3. サービス プロジェクトが接続されていることを確認します。

    gcloud compute shared-vpc get-host-project [SERVICE_PROJECT_ID]
    
  4. 必要に応じて、ホスト プロジェクトに接続されているサービス プロジェクトの一覧を表示できます。

    gcloud compute shared-vpc list-associated-resources [HOST_PROJECT_ID]
    
  5. サービス プロジェクトを接続するだけでよい場合、gcloud からログアウトして、共有 VPC 管理者アカウントの認証情報を保護できます。それ以外の場合、この手順をスキップして、すべてのサブネットまたは一部のサブネットのみに対してサービス プロジェクト管理者を定義します。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

すべてのサブネットのサービス プロジェクト管理者

共有 VPC 管理者は、ホスト プロジェクト内のすべてのサブネットに対するアクセス権を持つサービス プロジェクト管理者として、サービス プロジェクトから IAM メンバーを定義できます。この種のサービス プロジェクト管理者には、ホスト プロジェクト全体に対する compute.networkUser の役割が付与されます。つまり、ホスト プロジェクト内で現在定義されているサブネットと将来のサブネットのすべてに対するアクセス権が付与されます。

Console

GCP Console を使用してホスト プロジェクト内のすべてのサブネットに対するアクセス権を持つサービス プロジェクト管理者としてサービス プロジェクトから IAM メンバーを定義する方法については、サービス プロジェクトの接続のセクションをご覧ください。

gcloud

この手順には、ホスト プロジェクト内のすべてのサブネットに対するアクセス権を持つサービス プロジェクト管理者としてサービス プロジェクトから IAM メンバーを定義する方法が含まれています。この手順を行うには、事前にホスト プロジェクトを有効にして、ホスト プロジェクトにサービス プロジェクトを接続しておく必要があります。

  1. まだ共有 VPC 管理者として gcloud で認証していない場合は、認証を行います。[SHARED_VPC_ADMIN] は、共有 VPC 管理者の名前に置き換えます。

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. サービス プロジェクト内の IAM メンバーをサービス プロジェクト管理者にするポリシー バインディングを作成します。[HOST_PROJECT_ID] は、ホスト プロジェクトのプロジェクト ID に置き換え、[SERVICE_PROJECT_ADMIN] は、サービス プロジェクト管理者になるユーザーのメールアドレスに置き換えます。

    gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
    --member "user:[SERVICE_PROJECT_ADMIN]" \
    --role "roles/compute.networkUser"
    

    次のように --member 引数の形式を変更することで、さまざまな種類のメンバーを指定できます。

    • group: を使用して、Google グループをメンバーとして指定します(メールアドレスを使用)。
    • domain: を使用して、Google ドメインをメンバーとして指定します。
    • serviceAccount: を使用して、サービス アカウントを指定します。この使用法の詳細については、サービス プロジェクト管理者としてのサービス アカウントをご覧ください。
  3. 定義する必要のある他の各サービス プロジェクト管理者に対して、前の手順を繰り返します。

  4. サービス プロジェクト管理者の定義後は、gcloud からログアウトすると、共有 VPC 管理者アカウントの認証情報を保護できます。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

一部のサブネットのサービス プロジェクト管理者

共有 VPC 管理者はサービス プロジェクトの IAM メンバーを、ホスト プロジェクト内の一部のサブネットのみに対するアクセス権を持つサービス プロジェクト管理者として定義できます。このオプションを使用すると、ホスト プロジェクト内の一部のサブネットのみに対する compute.networkUser 役割をサービス プロジェクト管理者に付与することで、管理者をさらに詳細に定義できます。

Console

GCP Console を使用して、サービス プロジェクトの IAM メンバーを、ホスト プロジェクト内の一部のサブネットのみに対するアクセス権を持つサービス プロジェクト管理者として定義する方法については、サービス プロジェクトの接続のセクションをご覧ください。

gcloud

この手順には、ホスト プロジェクト内の一部のサブネットのみに対するアクセス権を持つサービス プロジェクト管理者としてサービス プロジェクトから IAM メンバーを定義する方法が含まれています。管理者を定義するには、事前にホスト プロジェクトを有効にして、ホスト プロジェクトにサービス プロジェクトを接続しておく必要があります。

  1. まだ共有 VPC 管理者として gcloud で認証していない場合は、認証を行います。[SHARED_VPC_ADMIN] は、共有 VPC 管理者の名前に置き換えます。

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. サービス プロジェクト管理者がアクセスする必要のあるホスト プロジェクト内のサブネットを選択します。現在の IAM ポリシーを JSON 形式で取得します。[SUBNET_NAME] は、ホスト プロジェクト内のサブネットの名前に置き換え、[HOST_PROJECT_ID] は、ホスト プロジェクトのプロジェクト ID に置き換えます。

    gcloud beta compute networks subnets get-iam-policy [SUBNET_NAME] \
        --region [SUBNET_REGION] \
        --project [HOST_PROJECT_ID] \
        --format json
    
  3. 前の手順で得た JSON 出力をコピーし、任意のファイルに保存します。わかりやすくするため、ここでは subnet-policy.json という名前のファイルに出力を保存します。

  4. subnet-policy.json ファイルを変更し、サブネットへのアクセス権を持つサービス プロジェクト管理者にする IAM メンバーを追加します。各 [SERVICE_PROJECT_ADMIN] は、サービス プロジェクトの IAM ユーザーのメールアドレスに置き換えます。

    {
      "bindings": [
      {
         "members": [
               "user:[SERVICE_PROJECT_ADMIN]",
               "user:[SERVICE_PROJECT_ADMIN]"
            ],
            "role": "roles/compute.networkUser"
      }
      ],
      "etag": "[ETAG_STRING]"
    }
    

    次のようにして、ポリシーには、さまざまな種類の IAM メンバー(ユーザー以外)を指定できます。

    • user:group: に変更して、Google グループをメンバーとして指定します(メールアドレスを使用)。
    • user:domain: に変更して、Google ドメインをメンバーとして指定します。
    • serviceAccount: を使用して、サービス アカウントを指定します。この使用法の詳細については、サービス プロジェクト管理者としてのサービス アカウントをご覧ください。
  5. subnet-policy.json ファイルの内容を使用して、サブネットのポリシー バインディングを更新します。

    gcloud beta compute networks subnets set-iam-policy [SUBNET_NAME] subnet-policy.json \
        --region [SUBNET_REGION] \
        --project [HOST_PROJECT_ID]
    
  6. サービス プロジェクト管理者の定義後は、gcloud からログアウトすると、共有 VPC 管理者アカウントの認証情報を保護できます。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

サービス プロジェクト管理者としてのサービス アカウント

共有 VPC 管理者は、サービス プロジェクト管理者として、サービス プロジェクトからサービス アカウントを定義することもできます。このセクションでは、サービス プロジェクト管理者として 2 種類のサービス アカウントを定義する方法を説明します。

他の IAM メンバーと同様に、サービス プロジェクト管理者の役割(compute.networkUser)を、ホスト プロジェクトのすべてのサブネットまたは一部のサブネットのみ付与できます。ただし、このセクションではわかりやすくするために、ホスト プロジェクトのすべてのサブネットに対するサービス プロジェクト管理者として、2 種類のサービス アカウントをそれぞれ定義する方法を説明します。

サービス プロジェクト管理者としてのユーザー管理サービス アカウント

ここでは、共有 VPC ホスト プロジェクトのすべてのサブネットに対するサービス プロジェクト管理者としてユーザー管理サービス アカウントを定義する方法について説明します。

Console

  1. 共有 VPC 管理者として Google Cloud Platform Console にログインします。
  2. Google Cloud Platform Console の [設定] ページに移動します。
    [設定] ページに移動
  3. プロジェクトを、サービス プロジェクト管理者として定義する必要のあるサービス アカウントを含むサービス プロジェクトに変更します。
  4. サービス プロジェクトのプロジェクト ID をコピーします。説明をわかりやすくするため、この手順ではサービス プロジェクト ID を [SERVICE_PROJECT_ID] と示しています。
  5. プロジェクトを共有 VPC ホスト プロジェクトに変更します。
  6. Google Cloud Platform Console の [IAM] ページに移動します。
    [IAM] ページに移動
  7. [追加] をクリックします。
  8. [SERVICE_ACCOUNT_NAME]@[SERVICE_PROJECT_ID].iam.gserviceaccount.com を [メンバー] フィールドに追加します。[SERVICE_ACCOUNT_NAME] はサービス アカウントの名前に置き換えます。
  9. [役割] メニューから、[Compute Engine] > [Compute ネットワーク ユーザー] を選択します。
  10. [追加] をクリックします。

gcloud

  1. まだ共有 VPC 管理者として gcloud で認証していない場合は、認証を行います。[SHARED_VPC_ADMIN] は、共有 VPC 管理者の名前に置き換えます。

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. サービス プロジェクトのプロジェクト ID を調べます。説明をわかりやすくするため、この手順ではサービス プロジェクト ID を [SERVICE_PROJECT_ID] と示しています。[SERVICE_PROJECT_ID] は、サービス プロジェクトのプロジェクト ID に置き換えます。

    gcloud projects describe [SERVICE_PROJECT_ID] --format='get(projectId)'
    
    • サービス プロジェクトのプロジェクト ID が不明な場合、組織内のすべてのプロジェクトを一覧表示すると確認できます。この一覧には、それぞれのプロジェクト ID が示されています。

      gcloud projects list
      
  3. サービス アカウントをサービス プロジェクト管理者にするポリシー バインディングを作成します。[HOST_PROJECT_ID] は、ホスト プロジェクトのプロジェクト ID に置き換え、[SERVICE_ACCOUNT_NAME] は、サービス アカウントの名前に置き換え、[SERVICE_PROJECT_ID] は、サービス プロジェクト ID に置き換えます。

    gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
        --member "serviceAccount:[SERVICE_ACCOUNT_NAME]@[SERVICE_PROJECT_ID].iam.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

サービス プロジェクト管理者としての Google API サービス アカウント

ここでは、共有 VPC ホスト プロジェクトのすべてのサブネットに対するサービス プロジェクト管理者として、Google API サービス アカウントを定義する方法を説明します。共有 VPC で使用されるマネージド インスタンス グループに対して、Google API サービス アカウントをサービス プロジェクト管理者にする必要があります。インスタンスの作成のようなタスクは、この種のサービス アカウントによって実行されるからです。この関係の詳細については、マネージド インスタンス グループと IAM をご覧ください。

Console

  1. 共有 VPC 管理者として Google Cloud Platform Console にログインします。
  2. Google Cloud Platform Console の [設定] ページに移動します。
    [設定] ページに移動
  3. プロジェクトを、サービス プロジェクト管理者として定義する必要のあるサービス アカウントを含むサービス プロジェクトに変更します。
  4. サービス プロジェクトの [プロジェクト番号] をコピーします。説明をわかりやすくするため、この手順ではサービス プロジェクト番号を [SERVICE_PROJECT_NUMBER] と示しています。
  5. プロジェクトを共有 VPC ホスト プロジェクトに変更します。
  6. Google Cloud Platform Console の [IAM] ページに移動します。
    [IAM] ページに移動
  7. [追加] をクリックします。
  8. [SERVICE_PROJECT_NUMBER]@cloudservices.gserviceaccount.com を [メンバー] フィールドに追加します。
  9. [役割] メニューから、[Compute Engine] > [Compute ネットワーク ユーザー] を選択します。
  10. [追加] をクリックします。

gcloud

  1. まだ共有 VPC 管理者として gcloud で認証していない場合は、認証を行います。[SHARED_VPC_ADMIN] は、共有 VPC 管理者の名前に置き換えます。

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. サービス プロジェクトのプロジェクト番号を確認します。説明をわかりやすくするため、この手順ではサービス プロジェクト番号を [SERVICE_PROJECT_NUMBER] と示しています。[SERVICE_PROJECT_ID] は、サービス プロジェクトのプロジェクト ID に置き換えます。

    gcloud projects describe [SERVICE_PROJECT_ID] --format='get(projectNumber)'
    
    • サービス プロジェクトのプロジェクト ID が不明な場合、組織内のすべてのプロジェクトを一覧表示すると確認できます。このリストには、それぞれのプロジェクト番号が示されています。

      gcloud projects list
      
  3. サービス アカウントをサービス プロジェクト管理者にするポリシー バインディングを作成します。[HOST_PROJECT_ID] は、ホスト プロジェクトのプロジェクト ID に置き換え、[SERVICE_PROJECT_NUMBER] は、サービス プロジェクト番号に置き換えます。

    gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
        --member "serviceAccount:[SERVICE_PROJECT_NUMBER]@cloudservices.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

共有 VPC の使用

共有 VPC 管理者がホスト プロジェクトの有効化それに対する必要なサービス プロジェクトの接続、ホスト プロジェクト サブネットのすべてまたは一部に対するサービス プロジェクト管理者の定義という各タスクを完了すれば、サービス プロジェクト内にインスタンス、テンプレート、内部ロードバランサを作成できるようになります。

このセクションのすべてのタスクは、サービス プロジェクト管理者が行う必要があります。

共有 VPC 管理者は、サービス プロジェクト管理者に(すべてのホスト プロジェクト、またはそのサブネットの一部のみに対する)compute.networkUser 役割だけを付与することに注意してください。サービス プロジェクト管理者は、各サービス プロジェクトを管理するために必要なその他の役割も持つ必要があります。たとえば、サービス プロジェクト管理者をプロジェクト所有者にすることも、プロジェクトに対して少なくとも compute.instanceAdmin 役割を持つようにすることもできます。

使用可能なサブネットの一覧表示

サービス プロジェクト管理者は、次の手順に従って、自分に権限が付与されているサブネットを一覧表示できます。

Console

Google Cloud Platform Console の [共有 VPC] ページに移動します。
[共有 VPC] ページに移動

gcloud

  1. まだサービス プロジェクト管理者として gcloud への認証を行っていない場合は、認証を行います。[SERVICE_PROJECT_ADMIN] は、サービス プロジェクト管理者の名前に置き換えます。

    gcloud auth login [SERVICE_PROJECT_ADMIN]
    
  2. 次のコマンドを実行します。[HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトのプロジェクト ID に置き換えます。

    gcloud compute networks subnets list-usable --project [HOST_PROJECT_ID]
    

    次の例では、project-1 ホスト プロジェクトで使用可能なサブネットを一覧表示しています。

    $ gcloud compute networks subnets list-usable --project project-1
    
    PROJECT    REGION       NETWORK  SUBNET    RANGE          SECONDARY_RANGES
    project-1  us-west1     net-1    subnet-1  10.138.0.0/20
    project-1  us-central1  net-1    subnet-2  10.128.0.0/20  r-1 192.168.2.0/24
                                                              r-2 192.168.3.0/24
    project-1  us-east1     net-1    subnet-3  10.142.0.0/20
    

詳細については、SDK のドキュメントの list-usage コマンドをご覧ください。

静的内部 IP アドレスの予約

サービス プロジェクト管理者は、共有 VPC ネットワークのサブネットに内部 IP アドレスを予約できます。IP アドレス構成オブジェクトはサービス プロジェクト内で作成されますが、その値は選択した共有サブネットで使用可能なアドレス範囲から取得されます。

gcloud

  1. まだサービス プロジェクト管理者として gcloud への認証を行っていない場合は、認証を行います。[SERVICE_PROJECT_ADMIN] は、サービス プロジェクト管理者の名前に置き換えます。

    gcloud auth login [SERVICE_PROJECT_ADMIN]
    
  2. 次のコマンドを実行します。[HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトのプロジェクト ID に置き換えます。

    gcloud compute addresses create [IP_ADDR_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET]
    

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

  • [IP_ADDR_NAME] は、IP アドレス オブジェクトの名前
  • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
  • [HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトの ID
  • [REGION] は、共有サブネットが含まれているリージョン
  • [SUBNET] は、共有サブネットの名前

IP アドレスの作成の詳細は、SDK のドキュメントに記載されています。

インスタンスの作成

共有 VPC を使用してインスタンスを作成するときは、次の点に注意してください。

  • インスタンスを作成する標準的なプロセスには、ゾーン、ネットワーク、サブネットの選択が含まれます。選択したサブネットと選択したゾーンの両方が同じリージョン内に存在する必要があります。サービス プロジェクト管理者が共有 VPC ネットワークのサブネットを使用してインスタンスを作成する場合、そのインスタンス用に選択されたゾーンは、選択したサブネットと同じリージョン内に存在する必要があります。

    • 予約された静的内部 IP アドレスを持つインスタンスを作成する場合、その静的 IP アドレスが作成された時点で、サブネット(およびリージョン)は選択済みとなっています。このセクションでは、静的内部 IP アドレスを持つインスタンスを作成する gcloud の例を示します。
  • サービス プロジェクト管理者は、権限が付与されているサブネットを使用する場合に限り、インスタンスを作成できます。使用可能なサブネットを確認するには、使用可能なサブネットの一覧表示をご覧ください。

  • GCP は、共有 VPC ネットワークのサブネットにインスタンスを作成するリクエストを受け取ると、リクエストを行っている IAM メンバーがその共有サブネットを使用する権限を持っているかどうかをチェックします。チェックが失敗すると、インスタンスは作成されず、GCP は権限エラーを返します。共有 VPC 管理者に連絡してください。

Console

  1. Google Cloud Platform Console の [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [作成] をクリックします。
  3. インスタンスの名前を指定します。
  4. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
  5. [ネットワーキング] をクリックします。
  6. [共有ネットワーク] ラジオボタンをクリックします。
  7. インスタンスを作成する共有サブネットを選択します。
  8. インスタンスに必要な他のパラメータを指定します。
  9. [作成] をクリックします。

gcloud

  • 共有 VPC ネットワークの共有サブネット内にある内部エフェメラル IP アドレスでインスタンスを作成するには、次のようにします。

    gcloud compute instances create [INSTANCE_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET] \
    --zone [ZONE]
    

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

    • [INSTANCE_NAME] は、インスタンスの名前
    • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
    • [HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトの ID
    • [REGION] は、共有サブネットが含まれているリージョン
    • [SUBNET] は、共有サブネットの名前
    • [ZONE] は、指定されたリージョン内のゾーン
  • 共有 VPC ネットワーク内の予約済み静的内部 IP アドレスを使用してインスタンスを作成するには、次のようにします。

    1. ホスト プロジェクトで静的内部 IP アドレスを予約します。
    2. インスタンスを作成します。

      gcloud compute instances create [INSTANCE_NAME] \
      --project [SERVICE_PROJECT_ID] \
      --private-network-ip [IP_ADDR_NAME] \
      --zone [ZONE]
      --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET] \
      

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

      • [INSTANCE_NAME] は、インスタンスの名前
      • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
      • [HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトの ID
      • [IP_ADDR_NAME] は、静的 IP アドレスの名前
      • [ZONE] は、[IP_ADDR_NAME] と同じリージョン内のゾーン
      • [SUBNET] は、静的内部 IP アドレスに関連付けられている共有サブネットの名前

インスタンス テンプレートを作成する

共有 VPC を使用してインスタンス テンプレートを作成する場合は、次の点に注意してください。

  • インスタンス テンプレートを作成するプロセスには、ネットワークとサブネットの選択が含まれます。

    • カスタムモードの共有 VPC ネットワークで使用するために作成されたテンプレートで、ネットワークとサブネットの両方を指定する必要があります。

    • 自動モードの共有 VPC ネットワークで使用するために作成されたテンプレートでは、後でサブネットを選択することもできます。このような場合、サブネットは、テンプレートを使用するいずれかのマネージド インスタンス グループと同じリージョンで自動的に選択されます(定義上、自動モードのネットワークはリージョンごとにサブネットを 1 つずつ持ちます)。

  • IAM メンバーがインスタンス テンプレートを作成するとき、GCP は、指定されたサブネットをそのメンバーが使用できるかどうかを確認する権限チェックは実行しません。この権限チェックは、テンプレートを使用しているマネージド インスタンス グループが要求されるときまで、必ず延期されます。

Console

  1. Google Cloud Platform Console の [インスタンス テンプレート] ページに移動します。
    [インスタンス テンプレート] ページに移動
  2. [インスタンス テンプレートを作成] をクリックします。
  3. インスタンス テンプレートの名前を指定します。
  4. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
  5. [ネットワーキング] をクリックします。
  6. [共有ネットワーク] ラジオボタンをクリックします。
  7. インスタンス テンプレートを作成する共有サブネットを選択します。
  8. インスタンス テンプレートに必要な他のパラメータを指定します。
  9. [作成] をクリックします。

gcloud

  • 自動モードの共有 VPC ネットワークの自動的に作成されたサブネットで使用するようにインスタンス テンプレートを作成するには、次のようにします。

    gcloud compute instance-templates create [TEMPLATE_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --network projects/[HOST_PROJECT_ID]/global/networks/[NETWORK]
    

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

    • [TEMPLATE_NAME] は、テンプレートの名前
    • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
    • [HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトの ID
    • [NETWORK] は、共有 VPC ネットワークの名前
  • 共有 VPC ネットワーク(自動モードまたはカスタムモードのいずれか)で、手動で作成されたサブネット用にインスタンス テンプレートを作成するには、次のようにします。

    gcloud compute instance-templates create [TEMPLATE_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --region [REGION] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET]
    

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

    • [TEMPLATE_NAME] は、テンプレートの名前
    • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
    • [HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトの ID
    • [REGION] は、共有サブネットが含まれているリージョン
    • [SUBNET] は、共有サブネットの名前

マネージド インスタンス グループを作成する

共有 VPC を使用してマネージド インスタンス グループを作成するときは、次の点に注意してください。

  • 共有 VPC で使用されるマネージド インスタンス グループでは、Google API サービス アカウントをサービス プロジェクト管理者にする必要があります。これは、自動スケーリングを使用した自動インスタンス作成のようなタスクが、そのサービス アカウントによって行われるためです。

  • マネージド インスタンス グループを作成する標準的なプロセスには、グループの種類とインスタンス テンプレートに応じた、ゾーンやリージョンの選択が含まれます(ネットワークとサブネットの詳細は、インスタンス テンプレートに関連付けられています)。適格なインスタンス テンプレートは、マネージド インスタンス グループによって使用されているリージョンと同じリージョン内のサブネットを参照しているテンプレートに限定されます。

  • サービス プロジェクト管理者が作成できるのは、権限が付与されているサブネットをメンバー インスタンスが使用するマネージド インスタンス グループのみです。ネットワークとサブネットの詳細はインスタンス テンプレートに関連付けられているため、サービス プロジェクト管理者が使用できるのは、使用が許可されているサブネットを参照しているテンプレートのみです。

  • GCP は、マネージド インスタンス グループを作成するリクエストを受け取ると、リクエストを行っている IAM メンバーが、インスタンス テンプレートに指定されている(グループと同じリージョン内の)サブネットを使用する権限を持っているかどうかをチェックします。チェックが失敗すると、マネージド インスタンス グループは作成されず、GCP は権限エラーを返します。使用可能なサブネットを一覧表示して、使用できるのはどれかを確認し、共有 VPC 管理者に連絡してください。

Console

  1. Google Cloud Platform Console の [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [インスタンス グループを作成] をクリックします。
  3. インスタンス グループの [名前] を指定します。
  4. [ロケーション] セクションで、ゾーンまたはリージョナル(マルチゾーン)グループの作成を選択します。
  5. 必要に応じて、[ゾーン] または [リージョン] を選択します。
  6. ゾーングループを作成する場合、[グループタイプ] で、[マネージド インスタンス グループ] が選択されていることを確認します。リージョナル インスタンス グループは、マネージド インスタンス グループである必要があります。
  7. [インスタンス テンプレート] で、共有 VPC ネットワーク用に定義されたインスタンス テンプレートを選択します。インスタンス グループに対して選択されたものと同じリージョンにあるサブネットに対して定義されているテンプレートを使用できます。
  8. [自動スケーリング] のオプションを指定します。あるいは、[インスタンスの数] を指定します。
  9. [自動修復] のオプションを指定します。
  10. [作成] をクリックします。

gcloud

サービス プロジェクト管理者は、インスタンス テンプレートに指定されている共有サブネットを使用する権限を持っている場合、gcloud を使用してマネージド インスタンス グループを作成できます。

gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --template [INSTANCE_TEMPLATE_NAME] \
    --size [NUMBER_OF_INSTANCES] \
    --zone [ZONE]

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

  • [INSTANCE_GROUP_NAME] は、インスタンス グループの名前
  • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
  • [INSTANCE_TEMPLATE_NAME] は、インスタンス テンプレートの名前
  • [NUMBER_OF_INSTANCES] は、グループに作成するインスタンスの数
  • [ZONE] は、(インスタンス テンプレートに定義されている)サブネットと同じリージョンにあるゾーン

リージョナル インスタンス グループを作成するには、--zone パラメータを --region パラメータに置き換え、リージョンを指定します(インスタンス テンプレートに定義されているサブネットで使用されるリージョンと同じにする必要があります)。

自動スケーリングと自動修復の設定方法の詳細については、SDK のドキュメントをご覧ください。

内部ロードバランサの作成

次の手順では、転送ルールによって、共有 VPC ホスト プロジェクト内のサブネットが使用される内部ロードバランサを作成する方法を説明します。転送ルール自体はサービス プロジェクトで定義されることに違いはなく、サブネット参照は内部転送ルールによってのみ使用されることに注意してください。

ホスト プロジェクトで内部ロードバランサを作成する前に、次を確認することもできます。

Console

  1. Google Cloud Platform Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動

  2. 一般的な手順に従って内部ロードバランサを作成し、次の調整を行います。

    • [フロントエンド サービスの構成] セクションで、[サブネット] メニューの [他のプロジェクトで共有されるネットワーク] セクションから必要な共有 VPC サブネットを選択します。
  3. 内部ロードバランサの作成を完了します。

gcloud

サービス プロジェクト管理者は、アクセス権を持つホスト プロジェクトのサブネットで、内部ロードバランサを作成できます。一般的な手順に従って内部ロードバランサを作成しますが、転送ルールを作成するときは --subnet 引数を使用して共有 VPC のサブネットを指定します。

gcloud compute forwarding-rules create [FR_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --load-balancing-scheme internal \
    --region [REGION] \
    --ip-protocol [IP_PROTOCOL] \
    --ports PORT,[PORT,…] \
    --backend-service [BACKEND_SERVICE_NAME] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET] \
    --address [INTERNAL_IP]

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

  • [FR_NAME] は、転送ルールの名前
  • [SERVICE_PROJECT_ID] は、サービス プロジェクトの ID
  • [REGION] は、共有サブネットが含まれているリージョン
  • [IP_PROTOCOL] は、使用する IP プロトコル。デフォルトは TCP です
  • [PORT] は、ロードバランサの数値ポートまたはポートのリスト
  • [BACKEND_SERVICE_NAME] は、バックエンド サービスの名前(内部ロードバランサの作成に関する一般的な手順の中で作成済みです)
  • [HOST_PROJECT_ID] は、共有 VPC ホスト プロジェクトの ID
  • [SUBNET] は、共有サブネットの名前
  • [INTERNAL_IP] は、共有サブネット内の内部 IP アドレス(指定しなかった場合、使用可能なアドレスが選択されます)

gcloud compute forwarding-rules create で使用できるその他のオプションについては、こちらをご覧ください。

次のステップ

このページは役立ちましたか?評価をお願いいたします。