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