このチュートリアルでは、Deployment Manager を使用して共有 VPC を設定するプロセスについて説明します。Deployment Manager を使用すると、GCP リソースへのアクセスに関する厳格なネットワーク セキュリティ ルールを組織全体に適用できます。
はじめに
大規模な組織では、予算編成、アクセス制御などの目的で、部門やアプリケーションを異なるプロジェクトに配置したい場合があります。共有 VPC を使用すると、組織の管理者が、単一の共有 VPC ネットワークとそのネットワーク リソースを使用するための権限を複数のプロジェクトに割り当てることができます。
共有 VPC を使用すると、組織管理者は組織のネットワーク管理者やセキュリティ管理者が、関連するプロジェクトで使用可能な RFC 1918 IP 空間(VPN やファイアウォール ルールなどの関連機能を含む)の VPC ネットワークを管理できるようになります。関連するプロジェクトの管理者は、共有 VPC ネットワーク空間に仮想マシン(VM)インスタンスを作成できます。また、組織全体で一貫したポリシーを適用できます。
共有 VPC は、大規模な組織やセキュリティ ルールが厳格な組織でよく利用されているので、共有 VPC のセットアップの再現性が重要になります。この要件を満たすため、IaC(Infrastructure as Code)ツールの Deployment Manager を使用します。
チュートリアルについて
このチュートリアルは、Google Cloud Platform(GCP)の組織リソースに精通した組織リソースの管理者を対象にしています。共有 VPC と Deployment Manager の知識があると、このチュートリアルをスムーズに進めることができます。このチュートリアルでは、デプロイという用語を Deployment Manager のデプロイという意味で使用しています。
わかりやすくするために、このチュートリアルでは、単一の IAM ユーザー(既存の ID)を組織のリソース管理者として使用します。組織リソースがない場合は、始める前にの手順に沿ってリソースを作成してください。このチュートリアルで説明するシナリオでは、通常、組織リソース管理者、ネットワーク管理者(共有 VPC の管理者)、共有 VPC のユーザーの 3 種類のユーザーが関係します。
デプロイ アーキテクチャ
次の図は、このソリューションのアーキテクチャを表しています。
このチュートリアルでは、次の 3 つのプロジェクトを作成します。
- Deployment Manager のホーム プロジェクト。組織リソース管理者(このチュートリアルでは、あなたです)が管理し、他のプロジェクトの作成と共有 VPC の設定に使用します。
- ホスト プロジェクト。ネットワーク管理者が管理し、共有 VPC をホストします。ネットワーキング構成はすべてこのプロジェクトで行います。
- サービス プロジェクト。共有 VPC のユーザーが管理します。このプロジェクトでは、ホスト プロジェクトから共有 VPC にリソースを作成できます。
目標
- Deployment Manager のホーム プロジェクトを作成して構成する。
- Deployment Manager を使用してホスト プロジェクトとサービス プロジェクトを作成する。
- 共有 VPC 機能を構成する。
- ホスト プロジェクトで VPC と一部のサブネットワークを構成する。
- サービス プロジェクトで VPC が使用可能であることを確認する。
料金
このチュートリアルでは、以下を含む GCP の課金対象となるコンポーネントを使用しています。
- Compute Engine
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
始める前に
このチュートリアルでは GCP の組織を使用します。組織がない場合は作成する必要があります。詳細については、組織の作成と管理をご覧ください。
このチュートリアルの後半では、デプロイ(つまり、Deployment Manager のデプロイ)で 2 つの GCP プロジェクトを作成します。このデプロイは、特別な構成の専用プロジェクトで作成します。以下では、このプロジェクトの初期設定とその構成について説明します。
Deployment Manager のホーム プロジェクトを作成する
Cloud Shell を開きます。
請求先アカウントを作成します(まだ作成していない場合)。詳細については、請求先アカウントを作成するをご覧ください。
組織内に新しいプロジェクトを作成し、そのプロジェクトに請求先アカウントを設定します。このプロジェクトに一意の ID を選択する必要があります。たとえば、
[YOUR_NAME]-[DATE]-dm-home
のような名前を使用できます。gcloud
組織リストを表示して、組織 ID を書き留めます。
gcloud organizations list
環境変数に値を設定します。この環境変数は、このチュートリアルで繰り返し使用します。
[ORG_ID]
は前の手順でコピーした値に置き換え、[DM_HOME_PROJECT_ID]
はホーム プロジェクトの ID に置き換えます。export ORG_ID=[ORG_ID] export DM_HOME_PROJECT=[DM_HOME_PROJECT_ID]
新しいプロジェクトを作成します。
gcloud projects create $DM_HOME_PROJECT \ --organization=$ORG_ID
プロジェクトの請求 ID のリストを取得し、請求 ID を書き留めます。
gcloud beta billing accounts list
複数の請求先アカウントにアクセスできる場合は、それぞれの内部ポリシーを確認し、適切なポリシーを選択します。
前の手順で取得した請求先アカウントの ID を環境変数に設定します。
[BILLING_ACCOUNT_ID]
は、前の手順で取得した請求 ID で置き換えます。export BILLING_ACCOUNT_ID=[BILLING_ACCOUNT_ID]
新しいプロジェクトで課金を有効にします。
gcloud beta billing projects link $DM_HOME_PROJECT \ --billing-account=$BILLING_ACCOUNT_ID
Console
- Cloud Console で、[リソースの管理] ページを開きます。
[リソースの管理ページに移動](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
左上の [組織] のプルダウン リストで組織を選択します。
[プロジェクトを作成] をクリックして、プロジェクト名として選択した ID を入力します。
複数の請求先アカウントにアクセスできる場合は、[請求先アカウント] セクションで、このチュートリアルで使用するアカウントを選択します(それぞれの内部ポリシーを確認してください)。
[組織] セクションで、組織が選択されていることを確認します。
[作成] をクリックします。
チュートリアルの残り部分に必要な API を有効にします。
gcloud
gcloud services enable cloudbilling.googleapis.com \ deploymentmanager.googleapis.com \ cloudresourcemanager.googleapis.com \ iam.googleapis.com \ servicemanagement.googleapis.com \ --project $DM_HOME_PROJECT
Console
Cloud Console で新しいプロジェクトが選択されていることを確認します。必要に応じて、[リソースの管理] ページで新しいプロジェクトに切り替えます。
[リソースの管理ページに移動](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
[API ライブラリ] ページに移動します。
[API ライブラリ ページに移動](https://console.cloud.google.com/apis/library){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
次の API を有効にします。
- Google Cloud Billing API
- Identity and Access Management(IAM)API
- Google Service Management API
- Google Cloud Deployment Manager V2 API
- Google Cloud Resource Manager API
組織リソース ポリシーの構成
共有 VPC は組織レベルの機能です。このため、いくつかの組織レベルポリシーの構成が必要になります。Deployment Manager で使用されるサービス アカウントには、組織レベルで特定のロールが必要です。
gcloud
環境変数にプロジェクト番号とサービス アカウント名を設定します。次のコマンドは、プロジェクトから値を読み取り、その値を使用して環境変数を設定します。
export PROJECT_NUMBER=$(gcloud projects describe $DM_HOME_PROJECT \ --format="value(projectNumber)") export DM_SA=${PROJECT_NUMBER}@cloudservices.gserviceaccount.com
IAM ポリシーを追加します。
gcloud organizations add-iam-policy-binding $ORG_ID \ --role=roles/resourcemanager.projectCreator \ --member="serviceAccount:${DM_SA}" gcloud organizations add-iam-policy-binding $ORG_ID \ --role=roles/billing.user \ --member="serviceAccount:${DM_SA}" gcloud organizations add-iam-policy-binding $ORG_ID \ --role=roles/compute.xpnAdmin \ --member="serviceAccount:${DM_SA}"
Console
プロジェクトで [IAM と管理] > [設定] の順に移動します。
プロジェクト番号を書き留めます。
[IAM と管理]、[IAM] の順にクリックします。
上部のプロジェクト選択メニューで組織に切り替えます。
ウィンドウの上部にある [追加] をクリックします。
Deployment Manager サービス アカウントに次の役割を追加します。サービス アカウント名は
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
で、[PROJECT_NUMBER]
は前にメモした値です。- [Resource Manager] > [プロジェクト作成者]
- [お支払い] > [請求先アカウント ユーザー]
- [Compute Engine] > [Compute Shared VPC 管理者]
プロジェクトと共有 VPC の構成
これで、Deployment Manager を使用してホストやサービス プロジェクトを作成する準備ができました。Cloud Console を使用している場合は、ここから Cloud Shell に切り替えてください。
セッションがタイムアウトしたか、セッションを終了している場合は、新しい Cloud Shell セッションを開きます。
Cloud Shell で、次の Git リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
クローンを作成したリポジトリの
project_creation
サンプルに移動します。cd $HOME/deploymentmanager-samples/examples/v2/project_creation
config_shared_vpc.yaml
ファイルを開きます。nano config_shared_vpc.yaml
次の表に示す値を設定します。
設定 説明 HOST_PROJECT
ホスト プロジェクトの一意の名前。ホスト プロジェクトは VPC を作成して管理する場所です。この値は、ファイルの最後の行でも変更します。合計 2 回の置換を行う必要があります。
例:
[YOUR_NAME]-[DATE]-host
SERVICE_PROJECT
サービス プロジェクトの一意の名前。サービス プロジェクトは、ホスト プロジェクトの VPC が使用される場所です。
例:
[YOUR_NAME]-[DATE]-svc
ORG_ID
組織 ID。前の手順で取得した値を使用します。まだ取得していない場合は、次のコマンドで取得してください。
gcloud organizations list
YAML ファイルで数値と解釈されないように、組織の ID を引用符で囲みます。
BILLING_ACCOUNT_ID
請求先アカウントの ID。前の手順で取得した値を使用します。まだ取得していない場合は、次のコマンドで取得してください。
gcloud beta billing accounts list
EMAIL
メールアドレス。メールアドレスは合計 5 か所で設定する必要があります。 ファイルを保存し、次のキーシーケンスで
nano
を終了します。^O <Enter> ^X
Cloud Console で Deployment Manager のホーム プロジェクトを作成した場合は、環境変数にホーム プロジェクトの ID を設定します。
export DM_HOME_PROJECT=[DM_HOME_PROJECT]
デプロイのプレビューを作成します。
gcloud deployment-manager deployments \ create shared-vpc-projects \ --config config_shared_vpc.yaml --preview \ --project $DM_HOME_PROJECT
Deployment Manager デプロイのプレビューを作成すると、作成、更新または削除されるリソースを確認できます。
デプロイのプレビューを適用します。
gcloud deployment-manager deployments \ update shared-vpc-projects \ --project $DM_HOME_PROJECT
Cloud Console でデプロイを表示します。必要であれば、上部のプロジェクト選択メニューで Deployment Manager のホーム プロジェクトを選択します。
数分後にデプロイが完了し、2 つの新しいプロジェクトが作成されます。サービス プロジェクトはホスト プロジェクトにリンクされていますが、共有する VPC はまだ作成されていません。
トラブルシューティング
プレビューの作成で問題が発生した場合、リソースが作成されていなければ、デプロイを削除してプロセスを再試行できます。
プレビューが作成され、デプロイに失敗した場合は、デプロイを再作成できないことがあります。プロジェクトを削除してすぐに再作成することはできません。安全期間として 30 日間は削除マークが設定されます。デプロイを再作成する必要がある場合は、再試行の前に config_shared_vpc.yaml
ファイルで HOST_PROJECT
と SERVICE_PROJECT
の値を変更してください。
VPC の作成
次に、別の Deployment Manager テンプレートを使用してホスト プロジェクトに VPC を作成します。通常、これはネットワーク管理者が行うオペレーションです。共有 VPC 構成がすでに設定されているため、VPC はサービス プロジェクトですぐに使用できるようになります。
ネットワーク構成のデプロイ
環境変数に
config_shared_vpc.yaml
ファイルで設定したホスト プロジェクト名とサービス プロジェクト名を設定します。export HOST_PROJECT=[HOST_PROJECT] export SERVICE_PROJECT=[SERVICE_PROJECT]
Git リポジトリの
network
サンプルに移動します。cd $HOME/deploymentmanager-samples/community/network/
config.yaml
ファイルには、network.py
タイプのリソースが 1 つ設定されています。このリソースには、独自の CIDR を持つ 3 つのサブネットワークが設定されています。このリソースは、必要に応じて変更または複製して、テストを行うことができます。デプロイのプレビューを作成します。このデプロイはホスト プロジェクトに作成されます。
gcloud deployment-manager deployments create host-network \ --config config.yaml --preview \ --project $HOST_PROJECT
デプロイのプレビューを適用します。
gcloud deployment-manager deployments update host-network \ --project $HOST_PROJECT
確認
次に、サービス プロジェクトからホスト プロジェクトのネットワークへのアクセスを確認します。ホスト プロジェクトに roles/compute.networkUser
ロールがあるので、このネットワークにアクセスできます。本番環境のデプロイでは、共有 VPC を使用するすべてのユーザーにこのロールを割り当てる必要があります。
ホスト プロジェクトのサブネットワークを使用して、サービス プロジェクトにテスト インスタンスを作成します。
gcloud
gcloud compute instances create instance-test \ --zone us-east1-b \ --subnet \ "projects/$HOST_PROJECT/regions/us-east1/subnetworks/host-network-us-east1" \ --project $SERVICE_PROJECT
Console
- サービス プロジェクトを選択します。
[リソースの管理ページに移動](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" } - [VM インスタンス] ページに移動します。
[VM インスタンス ページに移動](https://console.cloud.google.com/compute/instances){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" } - [作成] をクリックします。
- [名前] セクションに「instance-test」と入力します。
- [ゾーン] セクションで us-east1-b が選択されていることを確認します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックします。
- [ネットワーキング] タブをクリックします。
- 既存のネットワーク インターフェースをクリックします。
- [共有ネットワーク] オプションを選択します。 {: class="screenshot" width="50%"}
- [ネットワーク インターフェース] セクションの下部にある [完了] をクリックします。
- [作成] をクリックします。
インスタンスの起動に 1〜2 分かかります。インスタンスの準備が完了すると、[VM インスタンス] ページに緑色のステータス アイコンが表示されます。
- サービス プロジェクトを選択します。
インスタンスが共有 VPC を使用していることを確認します。
gcloud
gcloud compute instances describe instance-test \ --zone us-east1-b --project $SERVICE_PROJECT \ --format="value(networkInterfaces[0].network)"
このコマンドにより、作成したインスタンスで使用されている VPC へのリンクが出力されます。インスタンスがサービス プロジェクトで作成された場合でも(コマンドで
--project
フラグを使用した場合)、このリンクを見れば、VPC がホスト プロジェクトに作成されていることがわかります。Console
- インスタンスのリストでインスタンスを選択します。
- ホスト プロジェクトのネットワークを使用していることを確認します。
{: class="screenshot"}
クリーンアップ
現在のチュートリアルが終了したら、Google Cloud で作成したリソースをクリーンアップして、今後料金が発生しないようにします。次のセクションで、リソースを削除または無効にする方法を説明します。
Cloud Shell で、テスト インスタンスを削除します。
gcloud compute instances delete instance-test \ --project $SERVICE_PROJECT \ --zone us-east1-b
プロジェクトの削除保護を設定している場合は、解除します。
gcloud beta resource-manager org-policies disable-enforce \ --organization $ORG_ID compute.restrictXpnProjectLienRemoval
host-network
デプロイを削除します。gcloud deployment-manager deployments delete host-network \ --project $HOST_PROJECT
shared-vpc-projects
デプロイを削除します。gcloud deployment-manager deployments \ delete shared-vpc-projects \ --project $DM_HOME_PROJECT
ホーム プロジェクトを削除します。
gcloud projects delete $DM_HOME_PROJECT
次のステップ
- VPC の限定公開の Google アクセス機能について確認する。
- Deployment Manager で使用するイメージをプロジェクト間で共有する方法を確認する。
- GCP ポリシーの設計方法を確認する。
- Google Cloud のその他の機能を試す。チュートリアルをご覧ください。