このドキュメントは、認証方法の主なコンセプトと、認証の実装やトラブルシューティングに関して役立つ情報を提供します。この認証ドキュメントでは主に Google Cloudサービスに焦点を当てていますが、認証ユースケースのリストと、このページで紹介している入門マテリアルには、他の Google プロダクトのユースケースも記載されています。
はじめに
認証とは、なんらかの認証情報を使用して ID を確認するプロセスです。認証とは自分の身元を証明することです。
Google が提供する多くの API とサービスでは、アクセス時に認証が必要になります。Google では、お客様が作成したアプリケーションをホストするさまざまなサービスも提供していますが、これらのアプリケーションでもユーザーの ID を判別する必要があります。
Google API は OAuth 2.0 フレームワークを実装して拡張します。
認証に関するサポートの利用方法
| アクション | 手順 | 
|---|---|
| エクスプレス モードで Vertex AI を認証する(プレビュー)。 | ログイン プロセスで作成された API キーを使用して、Vertex AI を認証する。詳細については、エクスプレス モードの Vertex AI の概要をご覧ください。 | 
| 高レベルのプログラミング言語を使用して、アプリケーションから Google Cloud サービスに対する認証を行う。 | アプリケーションのデフォルト認証情報を設定して、いずれかの Cloud クライアント ライブラリを使用する。 | 
| ID トークンを必要とするアプリケーションを認証する。 | OpenID Connect(OIDC)ID トークンを取得し、リクエストに含める。 | 
| Google または Google Cloud のサービスとリソースにアクセスするアプリケーションにユーザー認証を実装する。 | オプションの違いについては、アプリケーション ユーザーの認証をご覧ください。 | 
| 自分のローカル開発環境で、いくつかの gcloudコマンドを試す。 | gcloud CLI を初期化する。 | 
| 自分のローカル開発環境で、いくつかの Google Cloud REST API リクエストを試す。 | curlなどのコマンドライン ツールを使用して、REST API を呼び出す。 | 
| プロダクトのドキュメントに含まれるコード スニペットを試す。 | ローカル開発環境に ADC を設定し、プロダクトのクライアント ライブラリをローカル環境にインストールする。クライアント ライブラリが認証情報を自動的に検索します。 | 
| 別の認証ユースケースのサポートを利用する。 | 認証のユースケースをご覧ください。 | 
| Identity and Access Management スペースで Google が提供するプロダクトのリストを確認する。 | Google Identity and Access Management プロダクトのページをご覧ください。 | 
ユースケースに適した認証方法を選択する
Google Cloud CLI、Cloud クライアント ライブラリ、Terraform など、 アプリケーションのデフォルト認証情報(ADC)をサポートするツールまたは REST リクエストを介して Google Cloud サービスにアクセスする場合は、次の図を参考にして認証方法を選択してください。
この図には、次の質問が記載されています。
- 
    シングル ユーザー開発環境(独自のワークステーション、Cloud Shell、仮想デスクトップ インターフェースなど)でコードを実行していますか?- 「はい」の場合は、質問 4 に進みます。
- 「いいえ」の場合は、質問 2 に進みます。
 
-  Google Cloudでコードを実行していますか?- 「はい」の場合は、質問 3 に進みます。
- 「いいえ」の場合は、質問 5 に進みます。
 
- Google Kubernetes Engine でコンテナを実行していますか?- 「はい」の場合は、Workload Identity Federation for GKE を使用して、サービス アカウントを Kubernetes Pod に接続します。
- そうでない場合は、リソースにサービス アカウントを接続します。
 
- 
    ユースケースにサービス アカウントが必要ですか? たとえば、すべての環境でアプリケーションの認証と認可を一貫して構成したいとします。 - 「いいえ」の場合は、ユーザー認証情報で認証を行います。
- 「はい」の場合は、ユーザー認証情報を使用してサービス アカウントの権限を借用します。
 
- 
    ワークロードは Workload Identity 連携をサポートする外部 ID プロバイダで認証されますか?- 「はい」の場合は、Workload Identity 連携を構成して、オンプレミスや他のクラウド プロバイダで実行されているアプリケーションがサービス アカウントを使用できるようにします。
- 「いいえ」の場合は、サービス アカウント キーを作成します。
 
Google Cloud サービスの認可方法
Google Cloud の認可は、主に Identity and Access Management(IAM)によって処理されます。IAM では、プリンシパルとリソースごとにきめ細かく制御できます。
OAuth 2.0 スコープを使用して、別の認可レイヤを適用できます。 Google Cloud サービスに対して認証を行う場合は、すべての Google Cloud サービス(https://www.googleapis.com/auth/cloud-platform)へのアクセスを承認するグローバル スコープを使用できます。また、サービスがサポートしている場合は、より限定的なスコープでアクセスを制限することもできます。制限付きスコープは、モバイルアプリなど、トークンの不正使用が懸念される環境でコードが実行されている場合のリスクの軽減に役立ちます。
API メソッドで受け入れられる認可スコープは、各 Google Cloud サービスの API リファレンス ドキュメントに記載されています。
アプリケーションのデフォルト認証情報
Application Default Credentials (ADC) は、アプリケーション環境に基づいて認証情報を自動的に検索するために、認証ライブラリが使用する手法です。認証ライブラリは、これらの認証情報を Cloud クライアント ライブラリと Google API クライアント ライブラリで使用可能にします。ADC を使用すると、アプリケーションが Google Cloud サービスと API に対して認証を行う方法を変更せずに、開発環境または本番環境でコードを実行できます。
ADC を使用すると、さまざまな環境で同じ認証コードを使用できるため、開発プロセスを簡素化できます。ただし、エクスプレス モードでサービスを使用している場合は、ADC を使用する必要はありません。
ADC を使用するには、コードを実行する場所に基づいて ADC に認証情報を提供する必要があります。ADC は、認証情報を自動的に検索し、バックグラウンドでトークンを取得します。このため、認証コードを変更せずに異なる環境で実行できます。たとえば、開発用ワークステーションまたは Compute Engine で実行する場合、同じバージョンのコードをGoogle Cloud API で認証できます。
gcloud 認証情報は、gcloud CLI を使用して ADC に指定する認証情報とは異なります。詳細については、gcloud CLI 認証構成と ADC 構成をご覧ください。
用語
認証と認可について説明する際は、次の用語を理解しておく必要があります。
認証
認証とは、リソースにアクセスを試みるプリンシパルの ID を確認するプロセスです。
認可
認可は、リソースにアクセスを試みるプリンシパルまたはアプリケーションが、そのアクセスレベルで承認されているかどうかを判断するプロセスです。
認証情報
このドキュメントで使用している「ユーザー アカウント」という用語は、Google アカウントを指す場合もあれば、ID プロバイダで管理され、Workforce Identity 連携で連携されているユーザー アカウントを指す場合もあります。
認証の場合、認証情報は ID を証明するデジタル オブジェクトです。アプリケーションの要件に応じて、パスワード、PIN、生体認証データはすべて認証情報として使用できます。たとえば、ユーザー アカウントにログインするときに、パスワードを入力して、2 要素認証の要件をすべて満たします。これは、アカウントが実際に本人であることの証明であり、不正な行為者によるなりすましではないという証明です。
トークンは認証情報ではありません。呼び出し元が適切な認証情報を提供したことを証明するデジタル オブジェクトです。
提供する必要がある認証情報の種類は、認証対象によって異なります。
Google Cloud コンソールでは、次の種類の認証情報を作成できます。
- API キー - API キーを受け取る API で API キーを使用し、API にアクセスできます。サービス アカウントにバインドされていない API キーは、請求と割り当てを目的としたプロジェクトを提供します。API キーがサービス アカウントにバインドされている場合、その API キーによってサービス アカウントの ID と認可も可能です(プレビュー版)。 - API キーの詳細については、API キーをご覧ください。 サービス アカウントにバインドされている API キーの詳細については、Google Cloud エクスプレス モードに関するよくある質問をご覧ください。 
- OAuth クライアント ID - OAuth クライアント ID は、 Google Cloudに対してアプリケーションを識別するために使用されます。これは、3-legged OAuth(3LO)とも呼ばれ、エンドユーザーが所有するリソースにアクセスする場合に必要です。OAuth クライアント ID を取得して使用する方法について詳しくは、 OAuth 2.0 の設定をご覧ください。 
- サービス アカウント キー - サービス アカウント キーは、プリンシパル(サービス アカウント)と、サービス アカウントに関連付けられたプロジェクトを識別します。 
gcloud CLI を使用して認証情報を作成することもできます。このような認証情報には次のタイプがあります。
- ローカル ADC ファイル
- Workload Identity 連携で使用される認証情報の構成
- Workforce Identity 連携で使用される認証情報の構成
プリンシパル
プリンシパルは、リソースへのアクセス権を付与できる ID です。認証に関して、Google API はユーザー アカウントとサービス アカウントの 2 種類のプリンシパルをサポートします。
認証にユーザー アカウントを使用するかサービス アカウントを使用するかは、ユースケースによって異なります。それぞれをプロジェクトの異なるステージや異なる開発環境で使用できます。
ユーザー アカウント
ユーザー アカウントは、Google API やサービスを操作するデベロッパー、管理者、その他のユーザーを表します。
ユーザー アカウントは、Google Workspace または Cloud Identity で Google アカウントとして管理されます。サードパーティの ID プロバイダで管理され、Workload Identity 連携と連携しているユーザー アカウントも使用できます。
ユーザー アカウントを使用すると、次の方法で Google API とサービスの認証を行うことができます。
- gcloud CLI を使用して、アプリケーションのデフォルト認証情報(ADC)を設定します。
- ユーザー認証情報を使用して Google Cloud CLI にログインし、ツールを使用して Google Cloud サービスにアクセスします。
- ユーザーの認証情報を使用して、サービス アカウントの権限借用を行います。
- ユーザー認証情報を使用して Google Cloud CLI にログインし、ツールを使用してアクセス トークンを生成します。
Google Cloudでユーザーの ID を構成する方法の概要については、ユーザーの ID をご覧ください。
サービス アカウント
サービス アカウントは、人間のユーザーを表すアカウントではありません。人間が直接関与しない場合(アプリケーションが Google Cloud リソースにアクセスする必要がある場合など)に認証と認可を管理する方法を提供します。サービス アカウントは IAM によって管理されます。
以下に、サービス アカウントを使用して Google API とサービスの認証を行う方法を、安全性の高い順に示します。詳細については、このページのユースケースに適した認証方法を選択するをご覧ください。
- ユーザー管理のサービス アカウントをリソースに接続し、ADC を使用して認証する。 - Google Cloudで実行されている本番環境コードを認証する場合は、この方法をおすすめします。 
- サービス アカウントを使用して別のサービス アカウントの権限を借用する。 - サービス アカウントの権限借用を使用すると、一時的にサービス アカウントにより多くの権限を付与できます。一時的に権限を付与した場合、そのサービス アカウントに必要な権限を永続的に取得しなくてもかまいません。 
- Workload Identity 連携を使用して、オンプレミスまたは別のクラウド プロバイダで実行されているワークロードを認証します。 
- デフォルトのサービス アカウントを使用する。 - デフォルトのサービス アカウントはデフォルトで高い権限を持っているため、デフォルトのサービス アカウントの使用はおすすめしません。これは、最小権限の原則に違反しています。 
サービス アカウントを含め、 Google Cloudのワークロード ID を構成する方法の概要については、ワークロードの ID をご覧ください。ベスト プラクティスについては、サービス アカウントの使用に関するベスト プラクティスをご覧ください。
トークン
認証と認可の場合、トークンは呼び出し元がそのトークンと交換した適切な認証情報を提供したことを示すデジタル オブジェクトです。このトークンには、リクエストを行っているプリンシパルの ID と、そのプリンシパルに対して許可されているアクセスの種類に関する情報が含まれています。
トークンはホテルのキーのようなものです。ホテルにチェックインし、適切な書類をホテルの予約デスクに提示すると、特定のホテルの設備にアクセスするためのキーが付与されます。たとえば、このキーを使用して自分の部屋や宿泊客用のエレベーターにはアクセスできますが、他の部屋や従業員用のエレベーターにはアクセスできません。
API キーを除き、Google API では認証情報を直接サポートしていません。アプリケーションはトークンを取得または生成して、API に提供する必要があります。トークンにはいくつかの種類があります。詳細については、トークンの概要をご覧ください。
ワークロードとワークフォース
Google Cloud ID とアクセス プロダクトを使用すると、プログラムによるアクセスと人間のユーザーの両方に対して、Google Cloud サービスとリソースへのアクセスを制御できます。 Google Cloud では、プログラムによるアクセスには「ワークロード」、ユーザーのアクセスには「ワークフォース」という用語を使用しています。
Workload Identity 連携を使用すると、サービス アカウント キーを作成して管理しなくても、オンプレミスまたはマルチクラウドのワークロードにアクセスできます。
Workforce Identity 連携では、外部 ID プロバイダを使用して、ワークフォース(従業員、パートナー、請負業者などのユーザー グループ)を IAM を使用して認証および認可し、ユーザーがGoogle Cloud サービスにアクセスできるようにします。
次のステップ
- Google Cloud サービスが IAM を使用して Google Cloud リソースへのアクセスを制御する方法を確認する。
- アプリケーションのデフォルト認証情報の仕組みと、さまざまな開発環境向けに認証情報を設定する方法を理解する。