このセクションでは、アプリのバックエンドを Cloud Marketplace と統合する手順について説明します。この統合により、ユーザーが Cloud Marketplace からプロダクトを購入したことを示す、ユーザーのアカウントとエンタイトルメントを管理できます。従量制料金モデルを選択した場合は、バックエンドも統合して Google に使用状況を報告します。
基本アプリを Cloud Marketplace と統合する例およびサンプルコードのチュートリアルについては、マネージド サービスを統合するための Codelab をご覧ください。
Codelab で使用されているサンプルコードについては、GitHub リポジトリをご覧ください。
始める前に
- アプリの統合: 設定の説明に従って、Cloud Commerce Partner Procurement API へのアクセスを設定します。
- 従量制料金体系を選択した場合は、使用状況を報告できるサービスをパートナー エンジニアが作成済みであることを確認します。このサービスは、Producer Portal の [Billing Integration] セクションの [サービス ドメイン] に表示されます。
サービス アカウントを作成する
プロダクトを Google Cloud と統合するには、プロダクトに使用しているプロジェクトにサービス アカウントを作成する必要があります。アプリはこのサービス アカウントを使用して、Cloud Marketplace Partner API とやり取りし、ユーザーの購入に関する情報を取得します。
Producer Portal を使用してサービス アカウントを作成し、リンクします。サービス アカウントを作成する手順の詳細については、サービス アカウントの作成と管理をご覧ください。
Producer Portal を使用したアプリのバックエンドの統合
サービス アカウントやプランレベルの識別子など、アプリのバックエンドを Cloud Marketplace に統合するために必要なすべての情報にアクセスするには、Producer Portal の [BILLING INTEGRATION] セクションを使用できます。
Producer Portal の直接リンクは次のとおりです。
https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
[BILLING INTEGRATION] セクションにアクセスするには:
プロダクトのリストで貴社のプロダクト名をクリックします。
プロダクトの [概要] ページで [技術統合] セクションに移動し、[BILLING INTEGRATION] をクリックします。
Producer Portal でのサービス アカウントの作成とリンク
Producer Portal の [BILLING INTEGRATION] セクションを使用すると、Partner API とのやり取りに使用するサービス アカウントを作成してリンクし、ユーザーの購入に関する情報を取得できます。
Producer Portal の直接リンクは次のとおりです。
https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
次の手順では、既存のサービス アカウントを使用するか、新しいサービス アカウントを作成できます。新しいサービス アカウントを作成する場合は、[サービス アカウント名] フィールドにサービス アカウントの名前を指定し、[サービス アカウント ID] フィールドにサービス アカウントの ID を指定して、[作成とリンク] をクリックします。
サービス アカウントをリンクするには、次のようにします。
プロダクトのリストで貴社のプロダクト名をクリックします。
プロダクトの [概要] ページで [技術統合] セクションに移動し、[BILLING INTEGRATION] をクリックします。
Partner Procurement API と統合するには、[Procurement API を呼び出すためのサービス アカウントのリンク] で、[ADD SERVICE ACCOUNT] をクリックします。既存のサービス アカウントをフィールドに入力するか、新しいサービス アカウントを作成できます。
Pub/Sub と統合するには、[Pub/Sub トピックに登録するためのサービス アカウントのリンク] で、[ADD SERVICE ACCOUNT] をクリックします。既存のサービス アカウントをフィールドに入力するか、新しいサービス アカウントを作成できます。
Service Control API と統合するには、[
roles/servicemanagement.serviceController
をサービス アカウントに追加] で、[ADD SERVICE ACCOUNT] をクリックします。既存のサービス アカウントをフィールドに入力するか、新しいサービス アカウントを作成できます。
ユーザー アカウントのタスク
大まかには、アプリでは次のシナリオを処理する必要があります。
ユーザーが、プロダクトへの登録など、Cloud Marketplace でリクエストまたは変更を行います。
Cloud Marketplace は、
eventType
フィールドにリクエストに関する情報を含む通知を Pub/Sub を介してアプリに送信します。たとえば、ユーザーがエンタイトルメントを変更した場合、eventType
はENTITLEMENT_PLAN_CHANGED
になります。使用可能な
eventType
の完全なリストをご覧ください。リクエストを承認するために、アプリは
HTTP POST
リクエストを Partner Procurement API に送信します。
以下のセクションでは、ユーザーが行うことができるリクエストのタイプと、アプリがリクエストを処理するために必要な処理について説明します。
このセクションで説明する API 呼び出しでは、次のエンドポイントを使用します。
https://cloudcommerceprocurement.googleapis.com/
新規ユーザーのアカウントを作成する
ユーザーが初めてプロダクトを購入する場合、Cloud Marketplace はユーザーとの関係を追跡するアカウント リソースを作成します。アカウント リソースが作成されると、作成された Pub/Sub トピックを介して通知されます。Pub/Sub メッセージは次の形式です。
{ "eventId": "...", "providerId": "YOUR_PARTNER_ID", "account": { "id": "USER_ACCOUNT_ID", "updateTime": "..." } }
USER_ACCOUNT_ID は Cloud Marketplace によって作成されたアカウント ID、YOUR_PARTNER_ID はパートナー エンジニアが Partner Procurement API へのアクセスを有効にしたときに割り当てられた ID です。
同時に、ユーザーは登録ページに誘導され、そこでシステムにアカウントを作成します。登録ページの作成については、アプリのフロントエンドの統合をご覧ください。
ユーザーのアカウントを承認する
ユーザーの登録が正常に完了したら、アプリは Partner Procurement API を呼び出して、アカウントが承認されたことを示す必要があります。アカウントは ACCOUNT_ACTIVE
という状態で作成されますが、approvals
フィールドに signup
という PENDING
エントリが表示されます。これは、ユーザーがまだ登録されていないことを示します。ユーザーが登録された後にアカウントを承認するには、次の HTTP POST
リクエストを使用します。
POST v1/providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID:approve {'approvalName': 'signup'}
ユーザーのアカウントのステータスを確認する
リンクされたアカウントのステータスを確認するには、次の HTTP GET
リクエストを使用します。
GET v1/providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID
レスポンスの形式は次のとおりです。
{ "name": "providers/YOUR_PARTNER_ID/accounts/USER_ACCOUNT_ID", "provider": "acme-services", "state": "ACCOUNT_ACTIVE", "approvals": [{ "name": "signup", "state": "APPROVED", "updateTime": "...", }], "updateTime": "...", "createTime": "..." }
使用可能なアカウントの状態のリストについては、providers.accounts
API リファレンスをご覧ください。
エンタイトルメントを管理する
顧客がソフトウェアの料金プランを選択すると、顧客が Cloud Marketplace からプロダクトを購入したことを示すエンタイトルメントが作成されます。このセクションでは、Partner Procurement API を使用して顧客のエンタイトルメントを作成し、管理する方法について再確認します。
利用資格の管理の詳細については、リファレンス ドキュメントをご覧ください。
同じプロダクトの複数の注文を有効にしている場合、Partner Procurement API では、同じ ACCOUNT_ID
に対して ENTITLEMENT_ACTIVE
イベントタイプの複数のイベントを送信できます。各イベントには、異なるオファーに一意の ENTITLEMENT_ID
が設定されています。この場合は、ACCOUNT_ID
や PRODUCT_ID
ではなく ENTITLEMENT_ID
に応答するように、アプリケーションのイベント処理ロジックを変更する必要があります。
また、JWT ペイロードで送信される新しい orders
オブジェクトを処理するために、フロントエンドの統合を変更する必要もあります。詳細については、アプリのフロントエンドの統合をご覧ください。
同じプロダクトの複数の注文を有効にする場合について詳しくは、同じプロダクトの複数の注文を有効にするをご覧ください。
エンタイトルメントを承認または拒否する
顧客が料金プランを選択すると、Cloud Marketplace によってエンタイトルメントが作成され、アプリに次の Pub/Sub メッセージが送信されます。
{ "eventId": "...", "eventType": "ENTITLEMENT_CREATION_REQUESTED", "providerId": "YOUR_PARTNER_ID", "entitlement": { "id": "ENTITLEMENT_ID", "updateTime": "...", "newOfferDuration": "P2Y3M", // Contract duration for offer-based entitlements }, }
ENTITLEMENT_ID は、Cloud Marketplace によって作成された ID です。 オファーに指定された期間がある場合、その期間は年と月で指定されます。オファーに期間ではなく終了日が指定されている場合、期間を示すフィールドは空になります。
システムでは、ユーザーがプランを購入したことを反映するためにユーザーのアカウントを更新します。次に、エンタイトルメントを承認するために、Partner Procurement API に対して HTTP POST
リクエストを発行し、承認する ENTITLEMENT_ID を送信します。
POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:approve
エンタイトルメントを拒否するには、代わりに HTTP POST
リクエストで reject
メソッドを使用します。
POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:reject
リクエストの本文に利用資格を拒否する理由を含めるには、次の形式を使用します。
{ "reason": "..." }
エンタイトルメント プランを変更する
料金プランの設定方法によっては、顧客がプランを変更できる場合があります。顧客が新しい料金プランを選択すると、次の形式の Pub/Sub メッセージが届きます。
{ "eventId": "...", "eventType": "ENTITLEMENT_PLAN_CHANGE_REQUESTED", "providerId": "YOUR_PARTNER_ID", "entitlement": { "id": "ENTITLEMENT_ID", "newPlan": "ultimate", // New plan "updateTime": "...", "newOfferDuration": "P2Y3M", // Contract duration for the new offer, for offer-based entitlements }, }
オファーに指定された期間がある場合、その期間は年と月で指定されます。オファーに期間ではなく終了日が指定されている場合、期間を示すフィールドは空になります。
プランの変更を承認するには、Partner Procurement API に次の HTTP POST
リクエストを行います。
POST v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID:approvePlanChange
リクエストの本文には、承認されるプランが必要です。
{
"pendingPlanName": PLAN_NAME
}
変更が承認されると、変更が有効になったときに別の Pub/Sub メッセージが届きます。メッセージの eventType
フィールドが ENTITLEMENT_PLAN_CHANGED
に変わります。プランのステータスを確認するには、Partner Procurement API に次の HTTP GET
リクエストを行います。
GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID
レスポンスは次と似たようになります。state
フィールドには、新しいプランが有効かどうか、プランの変更がまだ保留中であるかどうかが示されます。
{ "name": "providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID", "provider": "YOUR_PARTNER_ID", "account": "USER_ACCOUNT_ID", "product": "example-server", "plan": "pro", "state": "ENTITLEMENT_PENDING_PLAN_CHANGE", "newPendingPlan": "ultimate", ... }
ユーザーにステータス メッセージを送信する
ユーザーが料金プランを選択してからバックエンドがエンタイトルメントを承認するまでに数時間以上かかる場合は、ユーザーにステータス メッセージを送信することをおすすめします。このメッセージでは承認の進捗状況を示し、可能な場合は承認の完了予定を示します。
ステータス メッセージを送信するには、Procurement API に次の HTTP POST
リクエストを行います。
POST v1/providers/your-partner-id/entitlements/entitlement_id:updateUserMessage
リクエスト本文に、次の例のようなメッセージのテキストを入力します。
{ "message": "Approval expected in 2 days" }
エンタイトルメントをキャンセルする
ユーザーがエンタイトルメントをキャンセルすることにした場合、Pub/Sub 通知が届きます。プランを変更する場合と同様に、実際のキャンセルは現在の請求期間の終了時に有効になる場合があります。
通知の形式は次のとおりです。
{ "eventId": "...", // If the entitlement is canceled at the end of the month, // eventType is ENTITLEMENT_PENDING_CANCELLATION "eventType": "ENTITLEMENT_CANCELLED", "providerId": "YOUR_PARTNER_ID", "entitlement": { "id": "ENTITLEMENT_ID", "updateTime": "..." }, }
エンタイトルメントの削除
ユーザーが Google サポートに直接リクエストを行った場合や、Google プラットフォームから離脱した場合は、エンタイトルメントは直ちにキャンセルされ、60 日間の猶予期間の後にエンタイトルメントとアカウントが削除されます。ユーザーのプライバシーを保護するには、通知を受け取ったときにサーバーからデータを削除する必要があります。
エンタイトルメントがキャンセルされ、アカウントが削除されると、次のような通知が届きます。
{ "eventId": "...", "eventType": "ENTITLEMENT_DELETED", "providerId": "YOUR_PARTNER_ID", "entitlement": { "id": "ENTITLEMENT_ID", "updateTime": "...", }, }
{ "eventId": "...", "eventType": "ACCOUNT_DELETED", "providerId": "YOUR_PARTNER_ID", "account": { "id": "USER_ACCOUNT_ID", "updateTime": "...", }, }
アカウント タスクのイベントタイプのリスト
以下は、アプリが Pub/Sub メッセージで受信する可能性がある eventType
のリストです。
eventType | 説明 |
---|---|
ACCOUNT_CREATION_REQUESTED | 非推奨 |
ACCOUNT_ACTIVE | 顧客のアカウントが作成されたことを示します。 |
ACCOUNT_DELETED | 顧客のアカウントが Google Cloud システムから削除されたことを示します。 |
ENTITLEMENT_CREATION_REQUESTED | 顧客が料金プランの 1 つを選択したことを示します。 |
ENTITLEMENT_OFFER_ACCEPTED | オファーが顧客によって承認されたことを示します。オファーのスケジュール設定された開始時刻(存在する場合)が含まれます。 |
ENTITLEMENT_ACTIVE | 顧客が選択したプランが現在アクティブであることを示します。 |
ENTITLEMENT_PLAN_CHANGE_REQUESTED | 顧客が新しいプランを選択したことを示します。 |
ENTITLEMENT_PLAN_CHANGED | 顧客のプラン変更が承認され、変更が有効になったことを示します。 |
ENTITLEMENT_PLAN_CHANGE_CANCELLED | 顧客のプラン変更が承認されなかったか、顧客が以前のプランに切り替えたために、キャンセルされたことを示します。 |
ENTITLEMENT_PENDING_CANCELLATION | 顧客がプランをキャンセルし、キャンセルは請求期間の終了まで保留されていることを示します。 |
ENTITLEMENT_CANCELLATION_REVERTED | 顧客の保留中のキャンセルが元に戻されたことを示します。キャンセルは確定後は元に戻せません。 |
ENTITLEMENT_CANCELLED | 顧客のプランがキャンセルされたことを示します。 |
ENTITLEMENT_CANCELLING | 顧客のプランがキャンセルの処理中であることを示します。 |
ENTITLEMENT_RENEWED | 顧客のエンタイトルメントの期間が更新されたことを示します。更新を完了するための操作はありません。 |
ENTITLEMENT_OFFER_ENDED | 顧客のプライベート オファーが終了したことを示します。顧客のエンタイトルメントがキャンセルされている場合は、別の ENTITLEMENT_CANCELLED イベントがトリガーされます。顧客のエンタイトルメントがまだ有効な場合、顧客のプランは割引前の料金に戻ります。 |
ENTITLEMENT_DELETED | 顧客のプランに関する情報が Cloud Marketplace から削除されたことを示します。 |
(従量制料金の場合)Google への使用状況の報告
プロダクトに従量制料金を選択した場合は、アプリの使用状況を Service Control API に報告する必要があります。
Service Control の概要については、スタートガイドをご覧ください。
Producer Portal を使用して、Service Control で使用する Producer Portal でサービス アカウントを作成することをおすすめします。
エンタイトルメントが作成されると、次の HTTP GET
リクエストで Partner Procurement API を呼び出して、usageReportingId
を取得する必要があります。
GET v1/providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID
レスポンスには、エンタイトルメントに関する情報が次の形式で含まれます。
{ "name": "providers/YOUR_PARTNER_ID/entitlements/ENTITLEMENT_ID", "provider": "YOUR_PARTNER_ID", "account": "USER_ACCOUNT_ID", "product": "example-messaging-service", "plan": "pro", "usageReportingId": "USAGE_REPORTING_ID", "state": "ENTITLEMENT_ACTIVATION_REQUESTED", "updateTime": "...", "createTime": "..." }
使用状況を報告するには、最初に services.check
API 呼び出しを行って、サービスの構成を確認する必要があります。レスポンスの checkErrors[]
オブジェクトが空の場合は、services.report
API 呼び出しを行って使用状況レポートを送信します。
使用状況レポートは、Service Control API Operation
です。以下は、顧客が使用しているストレージに関する情報を送信する example-messaging-service
の使用状況レポートの例です。
POST https://servicecontrol.googleapis.com/v1/services/example-messaging-service.gcpmarketplace.example.com:report
{ "operations": [{ "operationId": "1234-example-operation-id-4567", "operationName": "Hourly Usage Report", "consumerId": "USAGE_REPORTING_ID", "startTime": "2019-02-06T12:00:00Z", "endTime": "2019-02-06T13:00:00Z", "metricValueSets": [{ "metricName": "example-messaging-service/UsageInGiB", "metricValues": [{ "int64Value": "150" }] }], "userLabels": { "cloudmarketplace.googleapis.com/resource_name": "order_history_cache", "cloudmarketplace.googleapis.com/container_name": "storefront_prod", "environment": "prod", "region": "us-west2" } }] }
ここで
operationId
は、サービス インスタンスが生成する一意の文字列です。check
とreport
のオペレーションに同じoperationId
を使用する必要があります。consumerId
は、エンタイトルメントからのusageReportingId
と同じです。startTime
とendTime
は、report
オペレーションの合計期間の開始時刻と終了時刻を表します。ほとんどの場合、report
オペレーションのstartTime
は、前のreport
オペレーションのendTime
と同じ値になります。顧客のサービスが
report
オペレーションのstartTime
の前に無効になると、services.check
API 呼び出しがcheckErrors[]
オブジェクトにエラーを送信し、対応する期間について顧客への請求はされません。MetricValueSet
には、1 つまたは複数の中間期間とそれに対応する更新された指標値が含まれています。サービスの指標は、料金モデルを選択して提出するときに定義します。Producer Portal の技術統合セクションで指標の ID を表示して参照できます。
userLabels
はユーザーが作成するラベルで、特定の構文要件に沿って Key-Value 文字列として定義されます。これらのラベルは、Cloud Billing のコスト管理ツールに転送され、コスト帰属に使用されます。推奨されるラベル付けの規則については、使用状況のラベル付けのベスト プラクティスをご覧ください。
services.check
が次のエラーの 1 つ以上を返した場合は、エラーが解決するまで顧客へのサービスの提供を停止することをおすすめします。
SERVICE_NOT_ACTIVATED
BILLING_DISABLED
PROJECT_DELETED
使用状況レポートのベスト プラクティス
ユーザー オペレーションやリソース使用率などの使用状況を報告する場合は、お客様に適切に課金されるように、次の情報に留意してください。
発生時の使用状況の報告
使用状況レポートの遅延は、お客様のコスト管理エクスペリエンスを低下させるとともに、パートナー レポートに反映されない場合があります。サービス プロバイダは、生成後 1 時間以内に使用状況を報告する必要があります。
使用状況を報告するためにさらに時間が必要な場合は、パートナー エンジニアにお問い合わせください。
エンタイトルメントのキャンセル後の使用状況の報告
エンタイトルメントがキャンセルされた後に使用状況が報告されていない場合でも、使用状況生成の実際の日時を反映したタイムスタンプで報告できます。タイムスタンプは、エンタイトルメントがキャンセルされるよりも前でなければなりません。この使用状況を 1 時間以内に報告します。エンタイトルメントが終了した後は、新しい使用状況として報告しないでください。
月末の使用状況の報告
1 時間のレポート対象期間は、月末の締め切り日に適用されます。今月の請求書で使用量が報告されるようにするには、米国とカナダの太平洋時間(UTC-7 または UTC-8)の翌日の午前 1 時までに使用量を報告します。
たとえば、9 月分の請求書の場合、米国とカナダの太平洋時間(UTC-7 または UTC-8)の 10 月 1 日午前 1 時までに使用状況を報告します。
その日のそれ以降に使用状況が報告された場合は、当月の請求書に含まれない可能性があります。
発生時の使用状況の報告を妨げる顧客アクションの修正
使用状況を報告できない場合や、サービスや課金が長期間無効になっている場合は、お客様にサービスを復元する猶予期間を設けることをおすすめします。猶予期間は 30 日未満にすることをおすすめします。この猶予期間中に、次のことを検討してください。
提供するサービスのグレードを下げます。たとえば、お客様を無料枠に切り替えるか、通話の拒否を開始します。
サービスが無効になっている間も使用状況ログの収集を続行します。サービスが有効になってから再生できるように、最大 1 時間の枠で料金の内訳を含めて使用量を収集することをおすすめします。
サービスを有効にしたら、サービスが無効になっていた間に収集された使用状況を、データの収集時の実際の使用状況としてレポートする必要があります。通常の使用状況レポートも再開する必要があります。
Kubernetes アプリの場合、アプリの起動中に使用状況レポートが失敗した場合は、顧客がフィードバックをすぐに受信して問題を解決できるように、アプリを自動的に停止させることをおすすめします。
使用状況のラベル付けのベスト プラクティス
従量制の SaaS プロダクトの場合、使用量は usageReportingId
フィールドで指定された単一のプロジェクトに帰属します。場合によっては、SaaS プロダクトはお客様の組織内で広く共有され、多数のお客様のプロダクトで使用されます。より具体的な費用アトリビューションに対するサポートを有効にするには、従量制の SaaS プロダクトでは使用状況レポートのオペレーションにオプションの userLabels
フィールドを含めることをおすすめします。
サービスがリソースラベルのコンセプトをネイティブにサポートしている場合は、使用状況レポートでそのラベルを転送することをおすすめします。ラベルは構文要件に準拠している必要があります。
Cloud Marketplace では、次のラベルが予約されています。これらのラベルを使用して、ネイティブ サービス プラットフォーム内で使用する追加のコンテキストを特定できます。これらのラベルは、使用状況レポートにデフォルトで含めることをおすすめします。
ラベルキー | ラベルの値 | 説明 |
---|---|---|
cloudmarketplace.googleapis.com/resource_name | USER_SUPPLIED | 使用量の指標に関連付けられているリソースの名前。 |
cloudmarketplace.googleapis.com/container_name | USER_SUPPLIED | リソース コンテナの名前。 |
ラベルは、費用レポートや課金データのエクスポートなどの Cloud Billing のコスト管理ツールに転送されます。
使用状況のラベル付けの例
この例では、組織で SaaS ストレージ ソリューションというストレージ プロダクトを提供しているとします。
Carl というお客様が、自社の e コマース ウェブサイト用の user_profiles_db
データベースと products_db
データベースをホストするために Google Cloud プロジェクト e-commerce-website
のストレージ サービスを購入しました。
user_profiles_db
には、Carl のサイトにアクセスするユーザーに関する情報が含まれています。products_db
には、Carl が自社サイトで販売するプロダクトに関する情報が含まれています。
使用に関する詳細な費用内訳を Carl に提供する場合は、userLabels
Key-Value ペアを使用して、各データベースの使用料金を個別に報告できます。
たとえば、Carl に products_db
ストレージ使用量に起因する費用を報告するには、次のレポートを送信します。これには、Carl の products_db
ストレージに 100 ユニット分の費用がかかっていることが示されています。
operation = {
'operationId': '<UUID>',
'operationName': 'db-total-storage',
'consumerId': 'project:carl_website',
'startTime': '<Timestamp>',
'endTime': '<Timestamp>',
'metricValues': [{
'int64Value': 100,
}],
'userLabels': {
'cloudmarketplace.googleapis.com/container_name': 'e-commerce-website',
'cloudmarketplace.googleapis.com/resource_name': 'products_db'
}
}
service.services().report(
serviceName=service_name, body={
'operations': [operation]
}).execute()
この例では、service_name
は Carl の Google Cloud プロジェクトのプロジェクト ID です。
userLabels
のより詳細な使用例については、SaaS Codelab をご覧ください。
(省略可)レポートを Virtual Private Cloud(VPC)と統合する
プロダクトのサービスが実行されている環境で Virtual Private Cloud(VPC)を使用する場合は、次の手順を実行して Google Cloud Marketplace レポートを VPC と統合する必要があります。デフォルトでは、VPC 内の Compute Engine VM は内部でのみ通信できます。いずれかの VM が外部通信できるように構成し、VPC の残りの VM がそれをレポートに使用できるようにする必要があります。
始める前に
サービス環境で VPC の優先実装を設定します。VPC を設定する手順については、Virtual Private Cloud(VPC)ネットワークの作成と変更をご覧ください。
Google Cloud プロジェクトの Compute ネットワーク管理者(
roles/compute.NetworkAdmin
)の Identity and Access Management(IAM)ロールがあることを確認します。
限定公開の Google アクセスを設定する
プロダクトの Compute Engine 仮想マシン(VM)がレポート目的で外部と通信できるようにするには、限定公開の Google アクセスを設定する必要があります。限定公開の Google アクセスの構成の詳細については、限定公開の Google アクセスの構成をご覧ください。
サービス環境で限定公開の Google アクセスを有効にします。
DNS を構成して、
private.googleapis.com
へのリクエストを解決します。Google API のカスタムルートを作成します。
[名前] に
route-google-apis-services
を指定します。[ネットワーク] に VPC を選択します。
[送信先 IP 範囲] に
199.36.153.8/30
を指定します。[優先度] には
0
を指定します。[インスタンス タグ] に
google-apis-services
を指定します。[ネクストホップ] で [デフォルト インターネット ゲートウェイ] を選択します。
VPC ファイアウォール ルールを作成して、プロダクトが Google API と通信できるようにします。
[名前] に
google-apis-services
を指定します。[説明] に
Allow egress traffic to Google APIs and services
を指定します。ファイアウォール ルール ロギングを有効にする
[ネットワーク] に VPC を選択します。
[トラフィックの方向] に [下り] を選択します。
[一致したときのアクション] に [許可] を選択します。
[名前] に
google-apis-services
を指定します。[ターゲット] に
Specified target tags
を選択し、[ターゲットタグ] にgoogle-apis-services
を指定します。[宛先フィルタ] に
IPv4 ranges
を選択し、[宛先 IPv4 範囲] に199.36.153.8/30
を指定します。[プロトコルとポート] に
Allow all
を選択します。
Google Cloud コンソールで、プロダクトの使用状況の報告に使用する VM を選択します。[ネットワーク タグ] で
google-apis-services
を追加し、[保存] をクリックします。[ネットワーク インターフェース] で、VPC のネットワーク インターフェースを見つけます。
[サブネットワーク] 列で、サブネット リンクをクリックします。[サブネットの詳細] ページで、[編集] をクリックして、[限定公開の Google アクセス] を [オン] に設定します。
[保存] をクリックします。
(省略可)レポートを VPC Service Controls と統合する
プロダクトのサービスが実行されている環境で VPC Service Controls を使用する場合、次の手順を実行して Google Cloud Marketplace レポートを VPC Service Controls と統合する必要があります。
サービス環境で VPC Service Controls の優先実装を設定します。VPC Service Controls の設定の詳細については、VPC Service Controls を使用してサービス境界を設定するをご覧ください。
VPC Service Controls の実装で
servicecontrol.googleapis.com
サービスが制限されていないことを確認します。