このページでは、クライアント ライブラリとアプリケーションのデフォルト認証情報を使用して Google API にアクセスする方法について説明します。
クライアント ライブラリを使用すると、サポートされている言語を使用して、Google Cloud API に簡単にアクセスできます。 Google Cloud API は、サーバーにリクエストを送信して直接使用することもできますが、クライアント ライブラリを使用すると、記述するコードの量を大幅に削減できます。クライアント ライブラリでは、アプリケーションのデフォルト認証情報(ADC)をサポートしているため、この方法は認証処理で非常に効果的です。
API キーを使用する場合、ADC は使用しません。詳しくは、クライアント ライブラリでの API キーの使用をご覧ください。
クライアント ライブラリでアプリケーションのデフォルト認証情報を使用する
アプリケーションのデフォルト認証情報を使用してアプリケーションの認証を行うには、まず、アプリケーションが実行されている環境に対して ADC を設定する必要があります。クライアント ライブラリを使用してクライアントを作成すると、クライアント ライブラリは、ADC に指定した認証情報を自動的にチェックし、コードで使用する API の認証に使用します。アプリケーションでトークンを明示的に認証または管理する必要はありません。これらの要件は認証ライブラリによって自動的に管理されます。
ローカル開発環境では、gcloud CLI でユーザー認証情報またはサービス アカウントの権限借用を使用して ADC を設定できます。本番環境では、サービス アカウントを接続して ADC を設定します。
クライアントの作成例
次のコードサンプルでは、Cloud Storage サービスのクライアントを作成します。実際のコードではさまざまなクライアントが必要になりますが、ここでは、認証を明示的に行わずに使用できるクライアントの作成を目的としているため、このようなコードサンプルになっています。
次のサンプルを実行する前に、次の手順を完了する必要があります。
Go
Java
Node.js
PHP
Python
Ruby
外部ソースの認証情報構成を使用する場合のセキュリティ要件
通常、認証情報の構成は、gcloud CLI コマンドを使用するか、 Google Cloud コンソールを使用して生成します。たとえば、gcloud CLI を使用してローカル ADC ファイルまたはログイン構成ファイルを生成できます。同様に、 Google Cloud コンソールを使用して、サービス アカウント キーを作成してダウンロードすることもできます。
ただし、一部のユースケースでは、認証情報の構成が外部エンティティから提供されます。これらの認証情報の構成は、Google API の認証に使用することを目的としています。
認証情報の構成には、認証ライブラリがトークンの取得に使用するエンドポイントとファイルパスが含まれる場合があります。外部ソースからの認証情報構成を受け入れる場合、構成を使用する前に構成を検証する必要があります。構成を検証しないと、悪意のある攻撃者が認証情報を使用してシステムとデータを侵害する可能性があります。
外部ソースの認証情報の構成を検証する
外部認証情報を検証する方法は、アプリケーションが受け入れる認証情報の種類によって異なります。
サービス アカウント キーを検証する
アプリケーションがサービス アカウント キーのみを受け入れる場合、次の例に示すように、サービス アカウント キーに固有の認証情報ローダを使用します。タイプ固有の認証情報ローダーは、サービス アカウント キーに存在するフィールドのみを解析します。これにより、脆弱性が公開されることはありません。
C#
var saCredential = ServiceAccountCredential.FromServiceAccountData(stream);
C++
auto cred = google::cloud::MakeServiceAccountCredentials(json)
Java
ServiceAccountCredentials credentials =
ServiceAccountCredentials.fromJson(json, new HttpTransportFactory());
Node.js
const keys = JSON.parse(json_input)
const authClient = JWT.fromJSON(keys);
PHP
cred = new Google\Auth\Credentials\ServiceAccountCredentials($scope, $jsonKey);
Python
cred = service_account.Credentials.from_service_account_info(json_data)
Ruby
creds = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: json_stream)
タイプ固有の認証情報ローダを使用できない場合は、type
フィールドの値が service_account
であることを確認して認証情報を検証します。type
フィールドの値が他の値の場合は、サービス アカウント キーを使用しないでください。
他の認証情報の構成を検証する
アプリケーションがサービス アカウント キー以外の任意の種類の認証情報を受け入れる場合は、追加の検証を行う必要があります。他のタイプの認証情報構成の例には、ADC 認証情報ファイル、Workload Identity 連携認証情報ファイル、Workforce Identity 連携ログイン構成ファイルなどがあります。
次の表に、認証情報に存在する場合に検証が必要なフィールドを示します。これらのフィールドは、すべての認証情報の構成に存在するわけではありません。
フィールド | 目的 | 期待される価値 |
---|---|---|
service_account_impersonation_url |
認証ライブラリは、このフィールドを使用してエンドポイントにアクセスし、権限借用されるサービス アカウントのアクセス トークンを生成します。 | https://iamcredentials.googleapis.com.com/v1/projects/-/serviceAccounts/service account email:generateAccessToken |
token_url |
認証ライブラリは、外部トークンをこのエンドポイントに送信して、連携アクセス トークンと交換します。 | https://sts.googleapis.com.com/v1/token |
credential_source.file |
認証ライブラリは、このフィールドで指定された場所にあるファイルから外部トークンを読み取り、token_url エンドポイントに送信します。 |
外部トークンを含むファイルのパス。このパスは認識できるはずです。 |
credential_source.url |
外部トークンを返すエンドポイント。認証ライブラリは、この URL にリクエストを送信し、token_url エンドポイントにレスポンスを送信します。 |
次のいずれかの項目:
|
credential_source.executable.command |
GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES 環境変数が 1 に設定されている場合、認証ライブラリはこのコマンドまたは実行可能ファイルを実行します。 |
外部トークンを返す実行可能ファイルまたはコマンド。このコマンドを認識し、安全であることを確認する必要があります。 |
credential_source.aws.url |
認証ライブラリは、この URL にリクエストを発行して AWS セキュリティ トークンを取得します。 |
次のいずれかの正確な値:
|
credential_source.aws.region_url |
認証ライブラリは、この URL にリクエストを発行して、アクティブな AWS リージョンを取得します。 |
次のいずれかの正確な値:
|
credential_source.aws.imdsv2_session_token_url |
認証ライブラリは、この URL にリクエストを発行して AWS セッション トークンを取得します。 |
次のいずれかの正確な値:
|
次のステップ
- アプリケーションのデフォルト認証情報について学習する。
- 認証方法の概要を表示する。