このトピックでは、アプリケーションをサービス アカウントとして認証する方法について説明します。一般的な認証シナリオや方法など、Google Cloud APIs への認証に関する一般的な情報については、認証の概要をご覧ください。サービス アカウントの詳細については、Identity and Access Management のドキュメントでサービス アカウントをご覧ください。
認証情報の自動検出
アプリケーションがデフォルトのサービス アカウントのある Google Cloud 環境内で実行されている場合、アプリケーションは Google Cloud APIs を呼び出すためにサービス アカウントの認証情報を取得できます。このような環境には、Compute Engine、Google Kubernetes Engine、App Engine、Cloud Run、Cloud Functions があります。これは、認証情報を手動で提供するよりも便利で安全なため、この方法をおすすめします。
また、アプリケーションには Google Cloud クライアント ライブラリを使用することをおすすめします。Google Cloud クライアント ライブラリでは、アプリケーションのデフォルト認証情報(ADC)というライブラリを使用して、サービス アカウントの認証情報を自動的に検索します。サービス アカウントの認証情報は次の順序で検索されます。
環境変数
GOOGLE_APPLICATION_CREDENTIALS
が設定されている場合、ADC はその変数が参照しているサービス アカウント ファイルを使用します。環境変数
GOOGLE_APPLICATION_CREDENTIALS
が設定されていない場合、ADC はコードを実行しているリソースに関連付けられているサービス アカウントを使用します。環境変数
GOOGLE_APPLICATION_CREDENTIALS
が設定されておらず、コードを実行しているリソースにサービス アカウントが関連付けられていない場合、ADC は、Compute Engine、Google Kubernetes Engine、App Engine、Cloud Run、Cloud Functions が提供するデフォルトのサービス アカウントを使用します。ADC が上記のどの認証情報も使用できない場合、エラーが発生します。
次のサンプルコードは、アプリケーション コードで ADC ライブラリを使用する方法を示しています。
C#
Go
Java
Node.js
PHP
Python
Ruby
認証情報を手動で提供する
デフォルトのサービス アカウントを提供する Google Cloud 環境以外でアプリケーションを実行する場合は、サービス アカウントを手動で作成する必要があります。その後、1 つ以上のサービス アカウント キーを作成します。これは、サービス アカウントに関連付けられた認証情報です。作成したサービス アカウント キーをアプリケーションに手動で渡します。
サービス アカウントの作成
サービス アカウントがない場合は、次の手順で作成します。
Cloud Console
-
Cloud Console で、[サービス アカウント キーの作成] ページに移動します。
[サービス アカウント キーの作成] ページに移動 - [サービス アカウント] リストから [新しいサービス アカウント] を選択します。
- [サービス アカウント名] フィールドに名前を入力します。
[ロール] リストから、プロジェクト > オーナー
- [作成] をクリックします。キーが含まれている JSON ファイルがパソコンにダウンロードされます。
コマンドライン
ローカルマシン上の Cloud SDK を使用するか、または Cloud Shell 内で以下のコマンドを実行できます。
-
サービス アカウントを作成します。NAME をサービス アカウントの名前に置き換えます。
gcloud iam service-accounts create NAME
-
サービス アカウントに権限を付与します。PROJECT_ID を実際のプロジェクト ID に置き換えます。
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role="roles/owner"
-
キーファイルを生成します。FILE_NAME はキーファイルの名前に置き換えてください。
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=NAME@PROJECT_ID.iam.gserviceaccount.com
環境変数を使用して認証情報を提供する
環境変数 GOOGLE_APPLICATION_CREDENTIALS
を設定して、アプリケーション コードに認証情報を指定します。[PATH] は、サービス アカウント キーが含まれる JSON ファイルのファイルパスに置き換えます。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定します。
Linux または macOS
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
Windows
PowerShell を使用する場合:
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
例:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\my-key.json"
コマンド プロンプトを使用する場合:
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
この手順を完了すると、上記のセクションで説明したように、認証情報が自動的に検出されます。必要なコードが少なく、さまざまな環境にコードを移植できるため、ADC の使用をおすすめします。
コードを使用して認証情報を提供する
次の例に示すように、サービス アカウント ファイルを明示的に参照するコードを使用することもできます。以下のサンプルを実行するには、Cloud Storage クライアント ライブラリをインストールする必要があります。
C#
Go
Java
Node.js
PHP
Python
Ruby
認証情報を管理する際のベスト プラクティス
機密データにアクセスするには、認証情報が必要です。次の方法で認証情報へのアクセスを保護します。
API キー、OAuth トークン、サービス アカウント キーなど、認証に関する重要な情報をソースコード内に組み込まないでください。代わりに、アプリケーションのソースコードの外部にある認証情報を指す環境変数を使用できます(Cloud Key Management Service など)。
テスト環境と本番環境のように、異なるコンテキストには異なる認証情報を使用してください。
認証情報が第三者に盗まれないように、認証情報の転送には必ず HTTPS などのセキュア チャネルを使用してください。クリアテキストや URL の一部として転送しないようご注意ください。
有効期間が長い認証情報をクライアント側アプリケーションに組み込まないでください。たとえば、モバイルアプリには、サービス アカウント キーを組み込まないでください。クライアント側アプリを調べることは可能なため、認証情報が第三者によって簡単に見つけられて、使用されてしまう可能性があります。
不要になったトークンは無効にしてください。
API エラーのトラブルシューティング
API リクエストが失敗した場合のトラブルシューティング方法について詳しくは、Cloud APIs のエラーをご覧ください。
次のステップ
- Google Cloud API に対する認証について学習する
- エンドユーザーとして認証する方法を学習する
- API キーの使用方法について学習する
使ってみる
Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
無料で開始