エラーメッセージ
HCLを書き、プロバイダーを初期化して、terraform planを実行したところ、リソース一覧が表示されるはずが、次のブロッキングエラーが表示されています:
Error: google: could not find default credentials
これは通常、Google CloudプロバイダーがAPIリクエストを認可するための有効なIDを見つけられない場合に発生します。よくある障害ですが、通常は60秒以内に解決できます。
発生原因
ブラウザのGCPコンソールにログインしているからといって、Terraformが自動的にあなたのIDを認識するわけではありません。Terraformは**アプリケーションデフォルト認証情報(ADC)**と呼ばれる特定のハンドシェイクに依存しています。gcloud auth loginを実行済みであっても、ローカル実行でその認証情報にアクセスするには、Terraformで別途手順が必要です。
Terraformは次の優先順位でIDを検索します:
provider "google"ブロック内に直接定義されたcredentials属性。- JSONキーを指す
GOOGLE_APPLICATION_CREDENTIALS環境変数。 - Google Cloud CLIによって生成されたローカルADCファイル。
- メタデータサーバー(GCEインスタンスまたはGKEクラスタ内で実行している場合のみ)。
プロバイダーが4つすべての場所を確認しても見つからない場合、エラーをスローして停止します。
手順ごとの修正方法
解決策1:gcloudアプリケーションデフォルトログインを使用する(推奨)
90%のケースでは、これだけで解決します。サービスアカウントキーを管理・保存するリスクなしにユーザーIDを使用できるため、ローカル作業において最も安全な方法です。
ターミナルを開いて次のコマンドを実行します:
gcloud auth application-default login
ブラウザのタブが自動的に開きます。Googleアカウントでログインし、「許可」をクリックしてください。フローが完了すると、CLIは次のいずれかの場所に小さなJSONファイル(約2.3 KB)を生成します:
- Linux/macOS:
~/.config/gcloud/application_default_credentials.json - Windows:
%APPDATA%\gcloud\application_default_credentials.json
再度terraform planを実行してみてください。すぐに動作するはずです。
解決策2:環境変数を設定する
CI/CDパイプラインで作業している場合や、特定のサービスアカウントを使用する必要がある場合は、環境変数を使用します。これにより、使用するJSONキーファイルをTerraformに明示的に指定できます。
- GCP IAMコンソールからサービスアカウントのJSONキーをダウンロードします。
- 現在のシェルセッションでパスを設定します:
macOS/Linuxの場合:
export GOOGLE_APPLICATION_CREDENTIALS="/Users/username/keys/my-sa-key.json"
Windows(PowerShell)の場合:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\keys\my-sa-key.json"
解決策3:プロバイダーへの明示的な設定
認証情報のパスをコードに直接ハードコードすることもできます。チームメンバーが持っていないローカルファイルパスへの依存関係が生まれるため、共有プロジェクトではリスクがあります。使用は最小限にとどめてください。
provider "google" {
project = "production-project-123"
region = "us-central1"
credentials = file("local-auth-key.json")
}
重要:この方法を使用する場合は、シークレットがリポジトリに漏洩しないよう、すぐに.gitignoreに*.jsonを追加してください。
確認:正常に動作しているか
TerraformがあなたのCredentialsを認識していることを確認するには、シンプルなplanを実行します。インフラの変更をコミットする必要はまだありません。
terraform plan
「No changes. Your infrastructure matches the configuration」と表示されれば、認証に成功しています。エラーが続く場合は、ターミナルを再起動して新しい環境変数が読み込まれるようにしてください。
次のコマンドを実行して、ADCファイルの存在を確認することもできます:
# macOS/Linux
cat ~/.config/gcloud/application_default_credentials.json | grep "client_id"
GCP認証のプロヒント
認証の問題は、ローカル設定がクラウドプロジェクトの要件と一致しない「環境ドリフト」から発生することが多いです。クリーンな状態を保つためのヒントを紹介します:
- 長期間有効なキーを廃止する: JSONキーをダウンロードする代わりに
gcloud auth application-default loginを使用しましょう。静的ファイルに比べ、個人のログイン情報が誤って漏洩するリスクは格段に低くなります。 - プロジェクトIDに注意する: 認証情報は有効でもプロジェクトが間違っている場合があります。
export GOOGLE_CLOUD_PROJECT="your-project-id"でターゲットプロジェクトを明示的に設定し、混乱を避けましょう。 - 安全な文字列を生成する: TerraformコードでSQLユーザーやメタデータのランダムパスワードが必要な場合は、ToolCraftのパスワードジェネレーターなどのツールを使用しましょう。ローカルで高エントロピーな文字列を生成するため、シークレットをインターネット上に公開せずに済みます。
- 権限を確認する: エラーが「403 Forbidden」に変わった場合、認証情報は見つかっているものの、アカウントに
Service Usage Consumerロールが不足しています。このロールは、GCPプロジェクトでほぼすべてのAPIコールを行うために必須です。

