このドキュメントは、認証方法の主なコンセプトと、認証の実装やトラブルシューティングに関して役立つ情報を提供します。 この認証ドキュメントでは主に Google Cloud サービスに焦点を当てていますが、認証ユースケースのリストと、このページで紹介している入門マテリアルには、他の Google プロダクトのユースケースが記載されています。
はじめに
認証とは、なんらかの認証情報を使用して ID を確認するプロセスです。認証とは自分の身元を証明することです。
Google が提供する多くの API とサービスでは、アクセス時に認証が必要になります。Google では、お客様が作成したアプリケーションをホストするさまざまなサービスも提供していますが、これらのアプリケーションでもユーザーの ID を判別する必要があります。
認証に関するサポートの利用方法
目的 | 情報 | |
---|---|---|
高レベルのプログラミング言語を使用して、アプリケーションから Google Cloud サービスに対する認証を行う。 | アプリケーションのデフォルト認証情報を設定して、いずれかの Cloud クライアント ライブラリを使用します。 | |
Cloud Run や Cloud Functions で実行されているアプリなど、ID トークンを必要とするアプリケーションを認証する。 | ID トークンを必要とするアプリケーションを認証する。 | OpenID Connect(OIDC)ID トークンを取得し、リクエストに含めます。 |
Google または Google Cloud のサービスとリソースにアクセスするアプリケーションにユーザー認証を実装する。 | オプションの違いについては、アプリケーション ユーザーの認証をご覧ください。 | |
自分のローカル開発環境で、いくつかの gcloud コマンドを試す。 |
gcloud CLI を初期化します。 | |
自分のローカル開発環境で、いくつかの Google Cloud REST API リクエストを試す。 |
curl などのコマンドライン ツールを使用して、REST API を呼び出します。 |
|
プロダクトのドキュメントに含まれるコード スニペットを試す。 | アプリケーションのデフォルト認証情報をローカルに設定し、プロダクトのクライアント ライブラリをローカル環境にインストールします。クライアント ライブラリが認証情報を自動的に検索します。 | |
別の認証ユースケースのサポートを利用する。 | 認証のユースケースをご覧ください。 | |
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 または GKE Enterprise でコンテナを実行していますか?
- 「はい」の場合は、GKE 用 Workload Identity 連携を使用して、サービス アカウントを Kubernetes Pod に接続します。
- そうでない場合は、リソースにサービス アカウントを接続します。
-
ユースケースにサービス アカウントが必要ですか?
たとえば、すべての環境でアプリケーションの認証と認可を一貫して構成したいとします。
- 「いいえ」の場合は、ユーザー認証情報で認証を行います。
- 「はい」の場合は、ユーザー認証情報を使用してサービス アカウントの権限を借用します。
-
ワークロードは Workload Identity 連携をサポートする外部 ID プロバイダで認証されますか?
- 「はい」の場合は、Workload Identity 連携を構成して、オンプレミスや他のクラウド プロバイダで実行されているアプリケーションがサービス アカウントを使用できるようにします。
- 「いいえ」の場合は、サービス アカウント キーを作成します。
OAuth 2.0
Google API は OAuth 2.0 フレームワークを実装して拡張します。 詳しくは、環境に適したドキュメントとユースケースをご覧ください。
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 の保護レイヤを提供できます。これは、トークン セキュリティが重要となる環境(モバイルアプリなど)でコードが実行されている場合に役立ちます。このシナリオでは、よりきめ細かいスコープを使用して、トークンが不正使用された場合のリスクを軽減できます。API メソッドで受け入れられるスコープのリストは、プロダクト ドキュメントの API リファレンス ページで確認できます。
アプリケーションのデフォルト認証情報
Application Default Credentials (ADC) は、アプリケーション環境に基づいて認証情報を自動的に検索するために、認証ライブラリが使用する手法です。認証ライブラリは、これらの認証情報を Cloud クライアント ライブラリと Google API クライアント ライブラリで使用可能にします。ADC を使用すると、Google Cloud サービスと API に対するアプリケーションの認証方法を変更せずに、開発環境または本番環境でコードを実行できます。
Google Cloud サービスを使用する必要があるコードを記述する場合は、可能な限り ADC を使用する必要があります。ADC を使用すると、さまざまな環境で同じ認証コードを使用できるため、開発プロセスを簡素化できます。
ADC を使用するには、コードを実行する場所に基づいて ADC に認証情報を提供する必要があります。ADC は、認証情報を自動的に検索し、バックグラウンドでトークンを取得します。このため、認証コードを変更せずに異なる環境で実行できます。たとえば、開発用ワークステーションまたは Compute Engine で実行する場合、同じバージョンのコードを Google Cloud APIs で認証できます。
gcloud 認証情報は、gcloud CLI を使用して ADC に指定する認証情報とは異なります。詳細については、gcloud CLI 認証構成と ADC 構成をご覧ください。
用語
認証と認可について説明する際は、次の用語を理解しておく必要があります。
認証
認証とは、リソースにアクセスを試みるプリンシパルの ID を確認するプロセスです。
認可
認可は、リソースにアクセスを試みるプリンシパルまたはアプリケーションが、そのアクセスレベルで承認されているかどうかを判断するプロセスです。
認証情報
このドキュメントで使用している「ユーザー アカウント」という用語は、Google アカウントを指す場合もあれば、ID プロバイダで管理され、Workforce Identity 連携で連携されているユーザー アカウントを指す場合もあります。
認証の場合、認証情報は ID を証明するデジタル オブジェクトです。アプリケーションの要件に応じて、パスワード、PIN、生体認証データはすべて認証情報として使用できます。たとえば、ユーザー アカウントにログインするときに、パスワードを入力して、2 要素認証の要件をすべて満たします。これは、アカウントが実際に本人であることの証明であり、不正な行為者によるなりすましではないという証明です。
トークンは認証情報と呼ばれることもありますが、このドキュメントではデジタル オブジェクトといいます。呼び出し元は適切な認証情報を提供したことを証明しますが、認証情報そのものではありません。
提供する必要がある認証情報の種類は、認証対象によって異なります。Google Cloud コンソールでは、次の種類の認証情報を作成できます。
API キー
他の認証情報とは異なり、API キーはプリンシパルを識別しません。API キーは、課金と割り当てを目的とした Google Cloud プロジェクトを提供します。
多くの Google API は API キーを受け入れません。API キーの詳細については、API キーをご覧ください。
OAuth クライアント ID
OAuth クライアント ID は、Google Cloud に対してアプリケーションを識別するために使用されます。これは、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)を設定します。
- ユーザー認証情報を使用して 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 リソースへのアクセスを制御する方法を確認する。
- アプリケーションのデフォルト認証情報の仕組みと、さまざまな開発環境向けに認証情報を設定する方法を理解する。