このページでは、割り当てプロジェクトの使用方法とプロジェクトを決定する方法について説明します。割り当てプロジェクトが正しく設定されていれば、Google Cloud APIs へのリクエストの失敗や不要な割り当てエラーを回避できます。
Google Cloud API に対するリクエストはすべて割り当てを使用します。割り当てはプロジェクトごとに適用されるため、すべてのリクエストで割り当てを提供するプロジェクトが必要になります。このプロジェクトは、割り当てプロジェクトと呼ばれます。また、請求先プロジェクトとも呼ばれます。請求先プロジェクトと割り当てプロジェクトは同じプロジェクトです。詳細については、割り当てプロジェクトの設定方法をご覧ください。
割り当てプロジェクトの決定方法
割り当てプロジェクトの決定方法は、使用する API のタイプ(リソースベースの API かクライアント ベースの API か)によって異なります。
リソースベースの API
リソースベースの Google Cloud APIs の場合、API 呼び出しの割り当てを提供するプロジェクトは、アクセスされるリソースが存在するプロジェクトになります。たとえば、Compute Engine インスタンスを作成するときは、その新しいインスタンスのプロジェクトを指定する必要があります。新しく作成されたインスタンスはそのプロジェクトに含まれます。後で Compute Engine インスタンスでオペレーションを実行すると、そのインスタンスを含むプロジェクトによってリクエストの割り当てが提供されます。これは、Google Cloud CLI、REST、クライアント ライブラリのいずれを使用する場合でも同様です。
リソースベースの API へのリクエストで使用される割り当てプロジェクトは変更できません。リクエストは常に、リクエストが操作されるリソースを含むプロジェクトを使用します。
クライアント ベースの API
リソースベースの API でない場合はクライアント ベースの API です。たとえば、Cloud Translation API はよく使用されるクライアント ベースの API です。
クライアント ベースの API にリクエストを送信するときに、割り当てプロジェクトを特定できない場合、リクエストは失敗します。
割り当てプロジェクトは複数の方法で設定できます。プロジェクトは、次のオプションを確認することで検証されます。優先度の高い順に説明します。
- 環境またはリクエストに設定された割り当てプロジェクト。
- API キーを使用してリクエストの認証情報を提供する場合は、API キーに関連付けられたプロジェクトが割り当てプロジェクトとして使用されます。
- Google Cloud CLI を使用してアクセス トークンを取得し、ユーザー認証情報で gcloud CLI に対して認証を行っている場合は、gcloud CLI 共有プロジェクトが割り当てプロジェクトとして使用されることがあります。すべてのクライアント ベースの API が共有プロジェクトにフォールバックするわけではありません。
- API 呼び出しのプリンシパルがサービス アカウントの場合(権限借用などにより)、サービス アカウントに関連付けられたプロジェクトが割り当てプロジェクトとして使用されます。
- API のプリンシパルが Workforce Identity 連携ユーザーの場合、Workforce プールのユーザー プロジェクトが割り当てプロジェクトとして使用されます。
上記のいずれにも該当しない場合、リクエストは失敗します。
クライアント ベースの API の gcloud CLI 共有プロジェクトについて
gcloud CLI を使用して、割り当てプロジェクトを設定せずにクライアントベースの API にリクエストを送信すると、リクエストは gcloud CLI 共有プロジェクトにフォールバックするか、失敗する可能性があります。gcloud CLI 共有プロジェクトは、すべてのプロジェクトのすべての gcloud CLI リクエストで使用されるため、ほかの多くの gcloud CLI リクエストでもこのプロジェクトが割り当てプロジェクトとして使用されている場合、共有プロジェクトの割り当てが一時的に枯渇する可能性があります。この場合、リクエストは割り当て不足のエラー メッセージを返して失敗します。
クライアント ベースの API の現在の割り当てプロジェクトを確認する
gcloud CLI コマンドに使用するプロジェクトを特定するには、gcloud CLI で --log-http
フラグを指定して、コマンドのヘッダーを出力します。ログの X-Goog-User-Project
フィールドに、このコマンドに使用されたプロジェクトが割り当てプロジェクトとして記録されます。
API がリソースベースかクライアント ベースかを特定する
使用している API のタイプを判断するのが難しい場合があります。ただし、有効化と割り当ては同じように適用されます。プロジェクト A のサービス アカウントがプロジェクト B の読み取りメソッドを呼び出し、どちらのプロジェクトでも API が有効になっていない場合、API not enabled
エラー メッセージが返され、有効かどうかを確認したプロジェクトが示されます。有効化が確認されるプロジェクトは、レート割り当てで確認されるプロジェクトと同じです。
次のステップ
- 割り当てプロジェクトの設定方法
- アプリケーションのデフォルト認証情報について学習する
- 認証の詳細を確認する
- 割り当てについて学習する