GCP Model Garden にIAMを使用して認証する

GCP (Google Cloud Platform) を利用して高度なAIモデルを活用する際には、IAM (アイデンティティとアクセス管理) を適切に構成することが不可欠です。

この記事では、GCPのModel Garden APIを使用する際に、IAMを通じた効率的な認証手法を具体例を交えて紹介します。

概要

IAMは、安全なアクセス制御を提供し、リソースに対する適切なアクセス権を管理するための強力なツールです。GeminiをはじめとするGCPの提供するAIモデルを個人・システム等からプログラム経由で利用する際、IAMを管理・設定することが必要になります。

モデルを利用するには、適切な認証が必要です。オーナーロールを持つ場合には利用からIAM設定までスムーズに行えますが、エンドポイント用の最小権限のロール設計などについても、この記事で解説します。

Model Garden

Model Gardenは、さまざまな機械学習モデルを管理・使用できるプラットフォームです。データ取得やモデルのトレーニング、推論を行うために使用されます。

Geminiを筆頭に、ClaudeやLlamaなどのモデルを使用することもできます。

前提

GCPにおけるプロジェクトが作成されているものとします。

まずGCPでIAMの設定を変更するためには、プロジェクトごとに、作業者に以下のロールが必要になります。

  • オーナー
  • 編集者+Project IAM 管理者

また、外部ベンダーのモデルは利用申請が必要となります。

例えばClaudeの場合はAnthropicへの利用申請が必要となりますので、すぐに使用できない点に注意してください。

IAMの設定&アクセストークンの発行

ユーザー認証

認証情報の作成

Python のプログラムから Google Cloud にアクセスするには、Application Default Credentials (ADC) を使う方法が便利です。

以下の手順で、個人の Google アカウントで認証情報を設定できます。

gcloud config set project [プロジェクトID]
gcloud auth application-default login

この操作により、application_default_credentials.json が生成されます。このファイルは ADC の仕組みによって自動的に読み込まれます。

アクセストークンの発行

この状態で以下のコードを実行すると、自動的に認証情報が取得され、access_token を発行できます。

from google.auth import default
from google.auth.transport.requests import Request

def get_access_token():
    try:
        credentials, project = default()
        if not credentials.valid or credentials.expired:
            credentials.refresh(Request())
        return credentials.token
    except Exception as e:
        raise Exception(f"Failed to get access token: {e}")

サービスアカウント認証

Google Cloud の本番環境やシステム間連携などで推奨されるのが、サービスアカウントを利用した認証方法です。

ここでは、Python のプログラムからサービスアカウントを用いて認証する方法を説明します。

サービスアカウント作成
  1. GCP コンソール → 「IAMと管理」 → 「サービスアカウント」
  2. 「サービスアカウントを作成」
  3. 名前と説明を入力し、サービスアカウントに対して以下3つのロールを付与

[必要なロール]

  • Cloud Functions 閲覧者
  • Storage オブジェクト 閲覧者
  • Vertex AI ユーザー

秘密鍵を発行
  1. 作成したサービスアカウントの「鍵」タブを選択
  2. 「鍵を追加」→「新しい鍵を作成」→ JSON形式 を選択
  3. your-service-account.json がダウンロードされる(※このファイルは安全な場所に保管してください)
プログラムから秘密鍵をロード

Python からは、GOOGLE_APPLICATION_CREDENTIALS 環境変数を使う方法が一般的です。

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your-service-account.json"

この設定後、自動でサービスアカウント認証になります。

先ほどのget_access_token関数をそのまま使って、同様に認証できます。

Model Gardenへの接続

Model Gardenには既定のURLとBodyを使用してアクセスします。

ここではGeminiとClaudeのAPIにアクセスする例を示しています。

import requests

PROJECT_ID = ""
MODEL = ""
REGION = ""
API_VERSION = "" #Claudeの場合は定義してください(vertex-2023-10-16など)

# URL
gemini_url = f'https://{MODEL_REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/publishers/google/models/{MODEL}:streamGenerateContent'
claude_url =  f'https://{MODEL_REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/publishers/anthropic/models/{MODEL}:streamRawPredict'

# Body sample
gemini_body = {
  "contents": {
    "role": "user",
    "parts": [
      {
        "text": "こんにちは"
      }
    ]
  }
}
claude_body = {
  "anthropic_version": API_VERSION, 
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": system_prompt
        }
      ]
    }
  ],
  "max_tokens": 8192
}

def request_api(url: str, model_name: str, access_token: str, data: dict) -> dict:
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    }
    response = requests.post(
       url,
        json=data,
        headers=headers
    )
    if response.status_code==200:
        return response.json()
    else:
        return {"code": response.status_code, "error": f"Error: {response.text}"}

おわりに

Google CloudのModel Gardenは、最新のAIモデルを効率的に活用するためのプラットフォームです。本記事で紹介したIAMの適切な構成とAPIアクセス手法を活用することで、安全かつ迅速なAI導入が可能となります。

GeminiやClaudeなどの高度な機能を試して、GCPの力を活かしたソリューション開発を進めてください。

執筆担当者プロフィール
西野 佑基

西野 佑基(日本ビジネスシステムズ株式会社)

機械学習系ソリューション開発、業務Webアプリ開発、開発環境自動化などを担当。

担当記事一覧