GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/API / SDK
API / SDK/2026-04-09中級

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

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

troubleshooting57error14fix10vertex-ai8authentication2service-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 Userroles/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-05-31
Gemini APIで「Unsupported MIME type」エラーが出るときの原因と対処
画像や音声をGemini APIに渡したときに発生する『Unsupported MIME type』エラーを、MIMEタイプの綴り間違い・octet-stream問題・非対応フォーマットの3つの観点から切り分けて、確実に動くコードで解決します。
API / SDK2026-05-30
Gemini 2.5 Pro で thinkingBudget を 0 にすると INVALID_ARGUMENT になる原因と対処
Gemini 2.5 Pro で thinkingBudget を 0 にすると 400 INVALID_ARGUMENT が返る原因を、モデルごとの思考予算レンジの違いから解説します。Pro でレイテンシを抑える正しい書き方と Flash への切り替え判断を Python・JavaScript のコード付きで紹介します。
API / SDK2026-04-14
Veo API で動画生成がうまくいかないとき — エラーと詰まりポイントの完全対処法
Veo API の動画生成でよく起きるエラーを徹底解説。ポーリング実装の落とし穴、セーフティフィルター拒否、クォータ超過、動画ファイル取得失敗など、実際に詰まりやすいポイントと解決策をコード付きで紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →