◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-04-09中級

Vertex AI + Gemini 認証エラーの解決方法:サービスアカウント・ADC 完全対処ガイド

Vertex AI で Gemini を使う際の認証エラーを完全解説。サービスアカウントの権限設定ミス・ADC(Application Default Credentials)の原因と解決手順をStep by Stepで紹介します。

troubleshooting59error14fix10vertex-ai8authentication3service-accountadcgoogle-cloud6

Vertex AI と Gemini を組み合わせて本番環境を構築しようとしたとき、認証まわりのエラーで詰まった経験はありませんか?「APIキーは有効なのにアクセスが弾かれる」「ローカルでは動くのに Cloud Run で動かない」——そういった症状の多くは、サービスアカウントや Application Default Credentials(ADC)の設定ミスが原因です。

よくある認証エラーの症状

Vertex AI + Gemini の認証エラーは、大きく次の4パターンに分類できます。

パターン①:PERMISSION_DENIED エラー

google.api_core.exceptions.PermissionDenied: 403 Permission 'aiplatform.endpoints.predict' denied on resource

サービスアカウントに必要な IAM ロールが付与されていない場合に発生します。

パターン②:UNAUTHENTICATED エラー

google.api_core.exceptions.Unauthenticated: 401 Request had invalid authentication credentials.
Expected OAuth 2 access token, login cookie or other valid authentication credential.

認証情報が見つからない・有効期限切れ・フォーマット不正の場合に出ます。

パターン③:ADC(Application Default Credentials)が見つからない

google.auth.exceptions.DefaultCredentialsError: Your default credentials were not found.
To set up Application Default Credentials, see https://cloud.google.com/docs/authentication/external/set-up-adc

ローカル開発環境や CI/CD 環境で gcloud auth application-default login が未実行の際に発生します。

パターン④:サービスアカウントキーファイルが読み込めない

FileNotFoundError: [Errno 2] No such file or directory: '/path/to/service-account-key.json'
ValueError: Service account info was not in the expected format, missing fields: token_uri

環境変数 GOOGLE_APPLICATION_CREDENTIALS のパスが誤っているか、JSONファイルの中身が壊れている場合です。

原因の分析:なぜ認証エラーが起きるのか

Vertex AI は通常の Gemini API(generativelanguage.googleapis.com)と異なり、Google Cloud のサービスとして IAM で認証・認可を管理します。この違いを把握していないと混乱しやすいです。

主な原因は以下の5つです。

  • IAM ロールの不足:サービスアカウントに Vertex AI User(roles/aiplatform.user)ロールが付与されていない
  • ADC の未設定:ローカル環境で gcloud auth application-default login を実行していない、または古い認証情報が残っている
  • プロジェクトIDの不一致:コードで指定した project が、サービスアカウントが所属するプロジェクトと異なる
  • リージョンの指定ミス:Vertex AI はリージョンエンドポイントを使うため、us-central1 などの指定が必要
  • API の未有効化:Google Cloud コンソールで Vertex AI API が有効になっていない

解決手順:Step by Step

Step 1:Vertex AI API を有効化する

まず Google Cloud コンソールで API が有効になっているか確認します。

# gcloud CLIで確認(有効になっていなければ enable する)
gcloud services list --enabled --project YOUR_PROJECT_ID | grep aiplatform
 
# 有効化する場合
gcloud services enable aiplatform.googleapis.com --project YOUR_PROJECT_ID

Step 2:サービスアカウントを作成して IAM ロールを付与する

# サービスアカウントを作成
gcloud iam service-accounts create gemini-sa \
  --display-name="Gemini Service Account" \
  --project=YOUR_PROJECT_ID
 
# Vertex AI User ロールを付与
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member="serviceAccount:gemini-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/aiplatform.user"
 
# (必要に応じて)Storage の読み取り権限も追加
gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member="serviceAccount:gemini-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

Step 3:ローカル開発で ADC を設定する(個人アカウント利用の場合)

ローカル開発では、サービスアカウントキーよりも ADC(ユーザー認証)が推奨されています。

# ユーザーアカウントでログイン(ブラウザが開く)
gcloud auth application-default login
 
# 特定プロジェクトをデフォルトに設定
gcloud config set project YOUR_PROJECT_ID
 
# 確認
gcloud auth application-default print-access-token

Step 4:サービスアカウントキーを使う場合(本番・CI/CD 向け)

サービスアカウントキーを使う場合は、キーファイルを安全に管理したうえで環境変数に設定します。

# サービスアカウントキーを生成
gcloud iam service-accounts keys create key.json \
  --iam-account=gemini-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
 
# 環境変数に設定
export GOOGLE_APPLICATION_CREDENTIALS="/absolute/path/to/key.json"
 
# Pythonコードでの使用例
import vertexai
from vertexai.generative_models import GenerativeModel
 
# プロジェクトとリージョンを明示的に指定
vertexai.init(project="YOUR_PROJECT_ID", location="us-central1")
 
model = GenerativeModel("gemini-2.5-pro-preview-03-25")
response = model.generate_content("こんにちは、Geminiさん!")
print(response.text)
# 期待する出力例: "こんにちは!何かお手伝いできることはありますか?"

Step 5:Cloud Run / GKE などのサーバー環境での設定

Cloud Run や GKE では、インスタンスにサービスアカウントをアタッチするのが最善です。キーファイルを使わずに済むため、セキュリティリスクを最小化できます。

# Cloud Run サービスにサービスアカウントをアタッチ
gcloud run deploy my-service \
  --image gcr.io/YOUR_PROJECT_ID/my-image \
  --service-account gemini-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com \
  --region us-central1 \
  --project YOUR_PROJECT_ID

Python コード内では認証情報の指定が不要になります:

import vertexai
from vertexai.generative_models import GenerativeModel
 
# Cloud Run 環境ではメタデータサーバーから自動的に認証情報を取得
vertexai.init(project="YOUR_PROJECT_ID", location="us-central1")
 
model = GenerativeModel("gemini-2.5-pro-preview-03-25")
response = model.generate_content("Vertex AIからこんにちは!")
print(response.text)

Step 6:google-cloud-aiplatform SDK のバージョン確認

古いバージョンの SDK では認証フローが異なる場合があります。

# 現在のバージョン確認
pip show google-cloud-aiplatform
 
# 最新版へアップデート
pip install --upgrade google-cloud-aiplatform
 
# 必要な依存パッケージも含めて確認
pip install google-cloud-aiplatform[langchain]

解決できたかの確認方法

以下のスクリプトを実行して、認証が正しく機能しているか確認してください。

import vertexai
from vertexai.generative_models import GenerativeModel
import google.auth
 
# 現在の認証情報を確認
credentials, project = google.auth.default()
print(f"認証情報の種類: {type(credentials).__name__}")
print(f"プロジェクトID: {project}")
 
# Vertex AI に接続テスト
try:
    vertexai.init(project="YOUR_PROJECT_ID", location="us-central1")
    model = GenerativeModel("gemini-2.0-flash-001")
    response = model.generate_content("テスト: 1+1は?")
    print(f"✅ 認証成功!応答: {response.text}")
except Exception as e:
    print(f"❌ 認証エラー: {e}")

期待する出力:

認証情報の種類: google.oauth2.credentials.Credentials
プロジェクトID: your-project-id
✅ 認証成功!応答: 2です。

予防策:再発防止のベストプラクティス

認証エラーを未然に防ぐために、以下の点を意識してください。

最小権限の原則を守る:roles/aiplatform.user だけで十分なのに roles/owner を付与しないこと。必要なロールを都度確認して付与します。

サービスアカウントキーをコードにハードコードしない:キーのパスや内容をソースコードに直書きしてしまうと、Git に漏洩するリスクがあります。環境変数や Secret Manager を使いましょう。

# ❌ 絶対に避けること
credentials_info = {
    "type": "service_account",
    "project_id": "YOUR_PROJECT_ID",
    # 以下にキーの内容を直書きしない
}
 
# ✅ 推奨:環境変数か Secret Manager を使う
import os
# GOOGLE_APPLICATION_CREDENTIALS 環境変数に任せる(コードは変更不要)

定期的なキーローテーション:サービスアカウントキーは90日ごとに更新する運用が推奨されています。Google Cloud の Key rotation 機能を活用しましょう。

Workload Identity を活用する(GKE 環境):GKE では Workload Identity を使うと、キーファイルなしにサービスアカウントの権限を Pod に付与できます。サービスアカウントキーの管理コストとリスクを大幅に削減できます。

全体を振り返って

Vertex AI + Gemini の認証エラーは、症状さえ正しく読み解ければ、多くの場合 IAM ロールの設定または ADC の設定を直すことで解消できます。

まとめると:

  • ローカル開発 → gcloud auth application-default login で ADC を設定
  • Cloud Run / GCE → サービスアカウントをインスタンスにアタッチ
  • GKE → Workload Identity を活用
  • CI/CD(GitHub Actions 等) → Workload Identity Federation で対応

本番環境での Vertex AI 活用

シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

◈ API / SDK2026-04-09
Gemini API のエラーを status で見分ける — 本番で止めない実装
Gemini API のエラーを HTTP status と finish_reason の2軸で切り分け、待つべきものと直すべきものを即断するための実装ノート。429 の3種類の上限、モデル廃止時のフォールバック、google-genai SDK 移行後の例外階層まで扱います。
◈ API / SDK2026-10-16
models は 200 なのに generateContent だけ 403 になる日 — 切り分けの順番を先に決めておく
モデル一覧の取得は 200 で通るのに、生成リクエストだけが 403 permission_denied で止まるときの切り分け手順です。キー・プロジェクト・請求の順に確かめる小さな診断スクリプトと、リトライしてはいけない理由、サポートへ渡す材料の揃え方をまとめました。
◈ API / SDK2026-05-20
Gemini API のストリーミングが本番だけまとめて返ってくる — Cloud Run・Vercel・Cloudflare のバッファリング対処
ローカル開発では一文字ずつ流れるのに本番デプロイ後だけ応答が一括で返ってくる — Cloud Run / Vercel / Cloudflare Workers / Nginx で発生するストリーミングバッファリング問題を、原因と対処パターン別に整理しました。