このガイドでは、App Lifecycle Manager テナントを使用してデプロイされたユニットを整理する方法と、リソースを個別のテナント プロジェクトにデプロイしてリソースを分離して管理する方法について説明します。
テナントとテナント プロジェクトの概要については、テナントとテナント プロジェクトをご覧ください。
始める前に
テナント プロジェクトまたはリソースを作成する前に、次のことを行います。
- Terraform 構成と Artifact Registry リポジトリを作成し、プロデューサー プロジェクトに SaaS アプリケーションを含むアーティファクトを作成します。App オファリングの設定方法については、App Lifecycle Manager を使用してサービス インスタンスをデプロイするをご覧ください。
App Lifecycle Manager に必要な API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を学習する。必要なサービス アカウントと Identity and Access Management ロールがプロデューサー プロジェクト内に付与されていることを確認します。これには、ユーザーが作成したサービス アカウントと、プロデューサー プロジェクトの
service-PROJECT-NUMBER@gcp-sa-saasservicemgmt.iam.gserviceaccount.comアカウントに付与された権限が含まれます。
テナント プロジェクトを設定する
テナントのリソースを個別のプロジェクトにプロビジョニングすると、リソース、IAM ポリシー、割り当て、ネットワーク構成がテナントごとに分離されるため、1 つのテナントでの侵害や構成ミスが他のテナントに影響する可能性が低くなります。
必要なもの:
- 1 つのプロデューサー プロジェクト。
テナントごとに 1 つのテナント プロジェクト。
コンソール
Google Cloud コンソールを使用してテナント プロジェクトとプロデューサー プロジェクトを設定するには:
- プロデューサー プロジェクトと、各テナントのテナント プロジェクトを作成する。
- テナント プロジェクトとプロデューサー プロジェクトで課金を有効にします。
テナント プロジェクトで App Lifecycle Manager に必要な API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を確認する。テナント プロジェクトに、必要な権限を持つ作動サービス アカウントがあることを確認します。
詳細については、App Lifecycle Manager サービス アカウントをご覧ください。
テナント プロジェクトとプロデューサー プロジェクトの設定が完了しました。プロデューサー プロジェクトとテナント プロジェクトを作成して課金を有効にすると、テナント リソースを作成してユニットをテナントに関連付けることができます。
gcloud
Google Cloud CLI を使用してプロデューサー プロジェクトとテナント プロジェクトを設定するには:
プロデューサー プロジェクトと、各テナントのテナント プロジェクトを作成します。
gcloud projects create PRODUCER_PROJECT_ID --name="SaaS producer project" [--folder=folder-id] gcloud projects create TENANT_PROJECT_ID --name="SaaS tenant A project" [--folder=folder-id]次のように置き換えます。
PRODUCER_PROJECT_ID: プロデューサー プロジェクト ID を表す文字列識別子。TENANT_PROJECT_ID: テナント プロジェクト ID を表す文字列識別子。
テナント プロジェクトとプロデューサー プロジェクトの課金を有効にします。
gcloud beta billing projects link PRODUCER_PROJECT_ID --billing-account=BILLING_ACCOUNT_ID gcloud beta billing projects link TENANT_PROJECT_ID --billing-account=BILLING_ACCOUNT_ID次のように置き換えます。
PRODUCER_PROJECT_ID: プロデューサー プロジェクト ID を表す文字列識別子。TENANT_PROJECT_ID: テナント プロジェクト ID を表す文字列識別子。BILLING_ACCOUNT_ID: 指定したプロジェクトに関連付ける請求先アカウントの ID。
各テナント プロジェクトに必要な Identity and Access Management ロールを、作動サービス アカウントに付与します。
gcloud projects add-iam-policy-binding TENANT_PROJECT_ID \ --member='serviceAccount:SERVICE_ACCOUNT@PRODUCER_PROJECT_ID.iam.gserviceaccount.com' \ --role=ROLE次のように置き換えます。
TENANT_PROJECT_ID: テナント プロジェクト ID を表す文字列識別子。PRODUCER_PROJECT_ID: プロデューサー プロジェクト ID を表す文字列識別子。SERVICE_ACCOUNT: 指定したプロジェクト内でロールを付与するサービス アカウント。ROLE: 付与する Identity and Access Management ロール。指定したサービス アカウントに付与するロールごとに
gcloud projects add-iam-policy-bindingを実行する必要があります(--role='roles/compute.admin'など)。
テナント プロジェクトとプロデューサー プロジェクトの設定が完了しました。プロデューサー プロジェクトとテナント プロジェクトを作成して課金を有効にすると、テナント リソースを作成してユニットをテナントに関連付けることができます。
テナント リソースを作成する
App サービスに、顧客を表すテナント リソースを作成します。
Google Cloud コンソールで、[App Lifecycle Manager] > [テナント] に移動します。
[作成] をクリックします。
[テナント名] ボックスに、テナント リソースの名前を入力します。
省略可: [Customer resource] ボックスに、統合用のコンシューマー定義の設定を含むコンシューマー リソースを指定します。
[アプリ オファリング] ボックスで、テナントを関連付けるアプリ オファリングを選択します。
[リージョン] プルダウンで、テナント メタデータが保存されるリージョンを選択します。
省略可: [ラベルを追加] をクリックして、Key-Value ペアのラベルをテナントに追加します。
[作成] をクリックして、テナント リソースを作成します。
テナント リソースが正常に作成されました。
ユニットをテナントに関連付ける
テナントを作成してユニットをデプロイしたら、それらを相互にリンクできます。この関連付けは主に、どのユニットがどのテナントに属しているかを整理するのに役立つ組織タグとして機能します。
ユニットのデプロイの詳細については、App Lifecycle Manager を使用して MySQL インスタンスをデプロイするをご覧ください。
ユニットをテナントに関連付けるには:
Google Cloud コンソールで、[App Lifecycle Manager] > [テナント] に移動します。
ユニットに関連付けるテナントの名前をクリックします。
[編集] をクリックします。
[関連付けられたユニット] セクションで、[ユニットを追加] をクリックします。
このテナントに関連付けるユニットを選択します。
[完了] をクリックします。
[保存] をクリックします。
選択したユニットは、指定されたテナントに関連付けられています。
テナント プロジェクト変数を使用して新しいユニットをプロビジョニングする
テナントに関連付けられたユニットをプロビジョニングする場合は、tenant_project_id 変数を指定する必要があります。
Google Cloud コンソールで [App Lifecycle Manager] > [Units] に移動します。
ユニットの種類に関連付けられた新しいユニットを作成します。
[PROVISION] をクリックします。
テナント ユニットにプロビジョニングするリリースを選択します。
テナント プロジェクトで権限を付与したアクチュエーション サービス アカウントを選択します。最小権限の原則に従い、管理対象のリソースに必要なロールのみを付与する必要があります。
[入力変数] セクションで、次の操作を行います。
tenant_project_id変数が、Terraform 構成variables.tfファイルで定義したとおりに表示されていることを確認します。- [テナント プロジェクト ID] ボックスに、テナント プロジェクトの名前を入力します。
- Terraform 構成で定義された入力変数を指定します。Terraform 構成で他の変数を定義していない場合は、この手順をスキップします。
[PROVISION] をクリックします。
App Lifecycle Manager は、指定された動作用のサービス アカウントを使用して Infrastructure Manager をトリガーします。Infrastructure Manager は tenant_project_id 変数を読み取り、そのテナント プロジェクト内に VM を作成します。
新しいリリースでユニットを再プロビジョニングする
新しいリリースで既存のユニットを再プロビジョニングする場合は、tenant_project_id 変数を指定する必要があります。
Google Cloud コンソールで、[App Lifecycle Manager] > [Units] に移動します。
ユニットの種類に関連付けられているユニットを選択します。
[Edit Provisioning] をクリックします。
更新された Terraform 構成で作成した [リリース] を選択します。
テナント プロジェクトで権限を付与した作動サービス アカウントを選択します。最小権限の原則に従い、管理対象のリソースに必要なロールのみを付与する必要があります。
[入力変数] セクションで、次の操作を行います。
tenant_project_id変数が、Terraform 構成variables.tfファイルで定義したとおりに表示されていることを確認します。- [テナント プロジェクト ID] ボックスに、テナント プロジェクトの名前を入力します。
- Terraform 構成で定義されている入力変数を指定します。Terraform 構成で他の変数を定義していない場合は、この手順をスキップします。
[更新] をクリックします。
App Lifecycle Manager は、指定された動作用のサービス アカウントを使用して Infrastructure Manager をトリガーします。Infrastructure Manager は tenant_project_id 変数を読み取り、そのテナント プロジェクト内に VM を作成します。
次のステップ
- ユニット間の依存関係の管理を確認する。
- 変数と変数マッピングの使用について詳細をご確認ください。
- サービス アカウントに必要な権限を確認します。