Vertex AI API リクエストを認証する

このページでは、Google Distributed Cloud(GDC)エアギャップで Vertex AI サービスへの呼び出しを認証する方法について説明します。エアギャップのあるアプリケーション内で Vertex AI API へのリクエストを保護するには、トークン認証を設定する必要があります。このプロセスでは、ID を提供してインタラクションを認可することで、API リクエストを検証します。

このページは、AI 機能を有効にするためにアプリケーションと開発環境を設定するアプリケーション オペレーター グループ内のアプリケーション デベロッパーを対象としています。詳細については、GDC エアギャップ ドキュメントの対象読者をご覧ください。

始める前に

API リクエストを認証してサービス アカウントを構成するには、必要な権限を管理者にリクエストします。また、Vertex AI 用にプロジェクトが設定されていることを確認します。詳細については、Vertex AI 用にプロジェクトを設定するをご覧ください。

  • 開発環境で認証を設定する前に、ローカル トラスト ストアを更新してください。

IAM ロールをリクエストする

IAM プロジェクト管理者に連絡して、プロジェクトの名前空間で次のロールをリクエストします。

  • IAM プロジェクト管理者(project-iam-admin): サービス アカウントを作成し、プロジェクトの名前空間でロール バインディングを管理します。
  • AI OCR デベロッパー(ai-ocr-developer): OCR API へのリクエストを認証します。
  • AI Speech デベロッパー(ai-speech-developer): Speech-to-Text API へのリクエストを認証します。
  • AI テキスト エンベディング デベロッパー(ai-text-embedding-developer): Text-Embedding-Gecko モデルへのリクエストを認証します。
  • AI テキスト エンベディング多言語デベロッパー(ai-text-embedding-multilingual-developer): Text-Multilingual-Embedding モデルへのリクエストを認証します。
  • AI Translation デベロッパー(ai-translation-developer): Vertex AI Translation API へのリクエストを認証します。
  • Vertex AI Prediction ユーザー(vertex-ai-prediction-user): オンライン予測モデルに対する予測リクエストを認証します。

これらのロールの詳細については、IAM 権限を準備するをご覧ください。

Vertex AI サービスに対する認証

Vertex AI サービスとのやり取りは、認証トークンを介して行われます。トークンは、有効な認証情報を提供した後に ID と認可を確認するデジタル オブジェクトです。トークンには、アカウントに関する特定の情報と、サービスやリソースにアクセスして操作するための権限が含まれています。

認証を設定するには、次の 2 つの方法があります。

ユーザー アカウントで認証する

ユーザー アカウントの認証トークンを取得する手順は次のとおりです。

  1. 使用する API のエンドポイントをメモします。

  2. IAM 権限を準備するに記載されている対応するロールをユーザー アカウントに付与して、使用する Vertex AI サービスまたは生成 AI モデルへのアクセス権を取得します。

  3. API とやり取りする必要があるユーザー アカウントで Distributed Cloud にログインします。

    gdcloud auth login
    
  4. 認証トークンを取得します。

    gdcloud auth print-identity-token --audiences=https://ENDPOINT
    

    ENDPOINT は、組織で使用する API エンドポイントに置き換えます。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。

    認証トークンの用途によっては、次のように、オーディエンス パスのサービス エンドポイントの後にポートを含める必要があります。

    • リクエストにクライアント ライブラリを使用する場合は、オーディエンス パスのサービス エンドポイントの後にポート :443 を含める必要があります。したがって、コマンドの --audiences パスは https://ENDPOINT:443 にする必要があります。
    • リクエストに gRPC、curl、またはプログラムによる REST 呼び出しを使用する場合は、ポートを含めないでください。したがって、コマンドの --audiences パスは https://ENDPOINT にする必要があります。

    出力に認証トークンが表示されます。次の例のように、作成したコマンドライン リクエストのヘッダーにトークンを追加します。

     -H "Authorization: Bearer TOKEN"
    

    TOKEN は、出力に表示される認証トークンの値に置き換えます。

サービス アカウントで認証する

サービス アカウントの認証トークンを取得する手順は次のとおりです。

  1. 使用する API のエンドポイントをメモします。

  2. Vertex AI サービスまたは生成 AI モデルへのアクセスに使用するサービス アカウントを設定します。

  3. 使用するサービスまたはモデルにアクセスできるように、IAM 権限を準備するに記載されている対応するロールをサービス アカウントに付与します。

  4. サービス アカウントのサービス鍵ペアを取得します。

  5. 次の環境変数を設定します。

    export GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_SERVICE_KEY
    

    PATH_TO_SERVICE_KEY は、サービス アカウントの鍵ペアを含む JSON ファイルのパスに置き換えます。

  6. google-auth クライアント ライブラリをインストールします。

    pip install google-auth
    
  7. Python スクリプトに次のコードを追加します。

    import os
    import google.auth
    from google.auth.transport import requests
    import requests as reqs
    
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "PATH_TO_SERVICE_KEY"
    os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "CERT_NAME"
    
    # If you use a client library for your request,
    # you must include port :443 after the service endpoint
    # in the audience path.
    audience = "https://ENDPOINT"
    
    creds, project_id = google.auth.default()
    print(project_id)
    creds = creds.with_gdch_audience(audience)
    
    def test_get_token():
      sesh = reqs.Session()
      req = requests.Request(session=sesh)
      creds.refresh(req)
      print(creds.token)
    
    if __name__=="__main__":
      test_get_token()
    

    次のように置き換えます。

    • PATH_TO_SERVICE_KEY: サービス アカウントの鍵ペアを含む JSON ファイルへのパス。
    • CERT_NAME: 認証局(CA)証明書ファイルの名前(org-1-trust-bundle-ca.cert など)。この値は、開発環境でのみ必要です。それ以外の場合は省略します。
    • ENDPOINT: 組織で使用する API エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。認証トークンの用途によっては、次のように、オーディエンス パスのサービス エンドポイントの後にポートを含める必要があります。

      • リクエストにクライアント ライブラリを使用する場合は、オーディエンス パスのサービス エンドポイントの後にポート :443 を含める必要があります。したがって、スクリプトの audience パスは "https://ENDPOINT:443" にする必要があります。
      • リクエストに gRPC、curl、またはプログラムによる REST 呼び出しを使用する場合は、ポートを含めないでください。したがって、スクリプトの audience パスは "https://ENDPOINT" にする必要があります。
  8. Python スクリプトを保存します。

  9. Python スクリプトを実行してトークンを取得します。

      python SCRIPT_NAME
    

    SCRIPT_NAME は、Python スクリプトに付けた名前(token.py など)に置き換えます。

    出力に認証トークンが表示されます。次の例のように、作成したコマンドライン リクエストのヘッダーにトークンを追加します。

     -H "Authorization: Bearer TOKEN"
    

    TOKEN は、出力に表示される認証トークンの値に置き換えます。