このページでは、サービスのテナンシー ユニットの管理方法について説明します。テナンシー ユニットとは、サービス ユーザーとマネージド サービスの関係を表す軽量のリソースです。各サービス ユーザーが所有できるアクティブ テナンシー ユニットは、1 つのマネージド サービスに対して 1 つだけです。これは、Service Infrastructure が提供する機能です。
テナンシー ユニットのリソース名の形式は次のとおりです。
services/{your service name}/projects/{consumer project number}/tenancyUnits/{id}
テナンシー ユニットの ID は、作成するときに自動的に生成されます。services.tenancyUnits.create
メソッドを呼び出すときに ID を指定することもできます。ID を指定する場合、その ID は、すべてのサービス ユーザーにおけるマネージド サービスの範囲内でグローバルに一意である必要があります。
このページの例は、Service Consumer Management REST API への直接呼び出しを使用します。本番環境で使用する場合は、Google の提供するクライアント ライブラリを使用してユーザビリティと信頼性を高めることをおすすめします。
始める前に
- Service Consumer Management API は、マネージド サービスとサービス プロデューサー プロジェクトで使用することを目的としています。このプロジェクトでは、Google Cloud プロジェクトとマネージド サービス(Cloud Endpointsを使用して作成されたサービスなど)がすでに存在している必要があります。
- テナンシー ユニットを使用するには、Service Consumer Management API でサービス プロデューサー組織内にテナント プロジェクトを作成する必要があります。サービスのユーザーに必要な数のテナント プロジェクトに十分な割り当てがあることを確認します。
- テナンシー ユニットで作成された各テナント プロジェクトは、テナント プロジェクト構成の一部として指定するフォルダにも存在する必要があります。このため、テナンシー ユニットを使用するには組織が必要です。
認証
Service Consumer Management API などの Cloud API は、認証された呼び出しのみを許可します。 サービス アカウントをまだ作成していない場合には、認証を開始を参照して、Cloud API の認証用にサービス アカウントを作成し JSON キーを入手する方法を確認してください。 Google クライアント ライブラリを使用している場合には、デフォルトでサービス アカウントの認証情報を使用するように、環境をセットアップできます。REST API を直接呼び出す場合には、次の例のように、各ヘッダーにアクセス トークンを指定する必要があります。
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" --header 'Content-Type: application/json' --data '{"tag":"tag1", "project_config":{"folder":"folders/9876543210", "tenant_project_policy": {"policy_bindings":{"role":"roles/owner", "members":"user:user1@company.com"}}, "billing_config":{"billing_account":"billingAccounts/123456-472F22-28F9AA"}}}' -X POST "https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/consumers/12345678901/tenancyUnits/tu-hello:addProject"
テナンシー ユニットを作成、削除するには、Service Consumer Management API スタートガイドの初期設定手順に従う必要があります。
テナンシー ユニットを作成する
通常、テナンシー ユニットとその中のテナント プロジェクトは、サービスのリソースが作成されるときに作成され、ユーザー用にプロビジョニングされる追加の Google Cloud リソースに依存します。
次のように、テナンシー ユニットを作成します。
POST https://serviceconsumermanagement.googleapis.com/v1/services/service.example.com/projects/12345678901/tenancyUnits
ここで「projects/12345678901」はサービス ユーザーを表し、service.example.com
はサービスの名前です。
返されるデータ構造にはテナンシー ユニットの名前が入ります。このユニットには、生成された固有の ID を使用してアクセスできます。この例では、生成された名前は services/your-service.example.com/projects/12345678901/tenancyUnits/absdef
です。
テナント プロジェクトを追加する
これで、ユーザーのプロジェクトを追加できます。前の手順で作成したテナンシー ユニットに新しいテナント プロジェクトを追加するには、次のメソッドを呼び出します。
POST https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits/absdef:addProject
次のデータを使用します。
{"tag":"tag1", "project_config":{"folder":"folders/9876543210", "tenant_project_policy":{"policy_bindings":{"role":"roles/owner", "members":"user:bob@example.com"}}, "billing_config":{"billing_account":"billingAccounts/123456-472F22-28F9AA"}}}
tag
の値は、テナンシー ユニット内でプロジェクトに設定した ID です。この ID には、リージョン、ユーザー ネットワーク、文字列 ID など任意のものを使用できます(ここでは tag1
を使用しています)。
この呼び出しは、長時間実行オペレーションを返します。このオペレーションをクエリで使用し、プロジェクトの作成に成功したかどうかを確認します。
新しいマネージド サービスを追加するなど、別の構成を適用する必要がある場合は、services.tenancyUnits.applyProjectConfig
メソッドを呼び出すことができます。
テナンシー ユニットを検索する
サービス ユーザーのテナンシー ユニットを検索する
特定のサービス ユーザーのテナンシー ユニットを検索するには、services.tenancyUnits.ListTenancyUnits
メソッドを使用して、サービス ユーザーのプロジェクト番号を指定します。
GET https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits
テナンシー ユニットを検索する
サービスに定義されたテナンシー ユニットを検索するには、services.tenancyUnits.SearchTenancyUnits
メソッドを使用できます。たとえば次のクエリは、「tag1」タグを持つプロジェクトを含むすべてのユニットを返します。
GET https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com:search?query=tenant_resources.tag=tag1
テナンシー ユニットをクリーンアップする
サービス ユーザーがサービスの使用を停止したら、テナンシー ユニットを削除してリソースを解放し、ユーザーデータが削除されたことを確認する必要があります。
テナント プロジェクトを削除する
対応するテナンシー ユニットを削除するには、すべてのテナント プロジェクトを削除しておく必要があります。テナント プロジェクトとその中のすべてのリソースを削除するには、services.tenancyUnits.removeProject
メソッドを使用する必要があります。
POST https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits/absdef:removeProject
テナンシー ユニットを削除する
テナンシー ユニット内のすべてのテナント プロジェクトが削除された後、またはそれらのすべてが DELETED
状態になった後、テナンシー ユニットを削除できます。
DELETE https://serviceconsumermanagement.googleapis.com/v1/services/your-service.example.com/projects/12345678901/tenancyUnits/absdef