主なメリット
- ライセンスを消費しない: サービスアカウントはユーザーシートやライセンスを消費しません
- 専用のAPIキー: 自動化されたワークフロー向けの安全な認証情報
- ユーザー帰属: 自動化された run を人間のユーザーに紐付けることが可能です
- エンタープライズ対応: 本番環境での大規模な自動化のために設計されています
- 委任された操作: サービスアカウントは、それを作成したユーザーまたは組織に代わって操作を実行します
概要
- Organization スコープ: 組織管理者が作成し、すべてのチームへのアクセス権を持つ
- Team スコープ: チーム管理者が作成し、特定のチームのみにアクセスが制限される
- CI/CD パイプライン: GitHub Actions、GitLab CI、Jenkins からモデル学習の run を自動的にログする
- スケジュールされたジョブ: 毎晩のモデル再学習、定期的な評価 run、あるいはデータ検証ワークフロー
- 本番監視: 本番システムから推論メトリクスやモデル性能をログする
- Jupyter ノートブック: JupyterHub や Google Colab 環境で共有されるノートブック
- Kubernetes ジョブ: K8s クラスターで実行される自動ワークフロー
- Airflow/Prefect/Dagster: ML パイプラインのオーケストレーションツール
Service account は、Dedicated Cloud、エンタープライズライセンスを持つ Self-Managed インスタンス、および Multi-tenant Cloud のエンタープライズアカウントで利用できます。
組織スコープのサービスアカウント
組織スコープのサービスアカウントを作成する
- W&B にログインし、ユーザープロファイルアイコンをクリックしてから、次を実行します。
- Dedicated Cloud または Self-Managed の場合: Organization Dashboard をクリックし、Service Accounts をクリックします。
- Multi-tenant Cloud の場合: Service Accounts をクリックします。
- Create service account をクリックします。
- 名前を入力し、デフォルトのチームを選択します。
- Create をクリックします。
- 作成したばかりのサービスアカウントを探します。
- アクションメニュー(
...)をクリックし、Create API key をクリックします。 - APIキーの名前を入力し、Create をクリックします。
- APIキーをコピーして、安全な場所に保管します。
- Done をクリックします。
組織スコープのサービスアカウントは、組織内のすべてのチームが所有する、制限されていないプロジェクトへアクセスできますが、デフォルトチームの指定が必須です。これは、モデル学習や生成 AI アプリ向けのワークロードで、
WANDB_ENTITY 変数が環境に設定されていない場合に処理が失敗するのを防ぐためです。別のチームのプロジェクトに対して組織スコープのサービスアカウントを使用するには、WANDB_ENTITY 環境変数をそのチームを指す値に設定する必要があります。チームスコープのサービスアカウント
チームスコープのサービスアカウントを作成する
- チームの設定で Service Accounts をクリックします。
- New Team Service Account をクリックします。
- サービスアカウントの名前を入力します。
- Authentication Method をデフォルトの Generate API key に設定します。Federated Identity を選択した場合、そのサービスアカウントはAPIキーを所有できません。
- Create をクリックします。
- 作成したサービスアカウントを探します。
- アクションメニュー(
...)をクリックし、Create API key をクリックします。 - APIキーの名前を入力し、Create をクリックします。
- APIキーをコピーして、安全な場所に保管します。
- Done をクリックします。
サービスアカウントの API キーを追加作成する
- チームまたは組織の設定の Service Accounts タブに移動します。
- 一覧から対象のサービスアカウントを探します。
- アクションメニュー(
...)をクリックし、Create API key をクリックします。 - APIキーの名前を入力し、Create をクリックします。
- 表示されたAPIキーをすぐにコピーして、安全な場所に保管します。
- Done をクリックします。
サービスアカウントの API キーを削除する
- Organization settings に移動し、API Keys をクリックします。
- 対象の APIキー を探します。リストには、組織およびチームのサービスアカウントに属するすべての APIキー が含まれます。キー名または ID で検索やフィルターができ、任意の列でソートできます。
- Delete ボタンをクリックします。
WANDB_USERNAME や WANDB_USER_EMAIL 変数を使ったユーザーの紐付けは 機能しません。
外部サービスアカウント
ベストプラクティス
- シークレットマネージャーを使用する: サービスアカウントのAPIキーは、プレーンテキストの設定ファイルではなく、AWS Secrets Manager、HashiCorp Vault、Azure Key Vault などの安全なシークレット管理システムに保存します。
- 最小権限の原則: 必要なプロジェクトへのアクセスに限定するために、可能な場合は組織スコープのアカウントではなく、チームスコープのサービスアカウントを作成します。
- ユースケースごとに固有のサービスアカウント: 監査性を高め、きめ細かなアクセス制御を可能にするために、異なる自動化ワークフローごとに個別のサービスアカウントを作成します(例: CI/CD 用とスケジュールされた再学習用で分ける)。
- 定期的な監査: アクティブなサービスアカウントを定期的に確認し、使用されていないものは削除します。監査ログを確認してサービスアカウントのアクティビティをモニタリングします。
-
APIキーの安全な取り扱い:
- APIキーをバージョン管理にコミットしない
- 環境変数を使ってアプリケーションにキーを渡す
- 誤って漏えいした場合はキーをローテーションする
-
命名規則: サービスアカウントの目的が分かる説明的な名前を使用します:
- 良い例:
ci-model-training,nightly-eval-pipeline,prod-inference-monitor - 避ける例:
service-account-1,test-sa,temp
- 良い例:
-
ユーザーの紐付け: 複数のチームメンバーが同じ自動化ワークフローを利用する場合は、各runを誰がトリガーしたかを追跡するために
WANDB_USERNAMEまたはWANDB_USER_EMAILを設定します: -
環境設定: チームスコープのサービスアカウントでは、runが正しいチームにログされるよう、必ず
WANDB_ENTITYを設定します: - エラー処理: サービスアカウントの認証情報に関する問題を素早く特定できるよう、認証失敗に対する適切なエラー処理とアラートを実装します。
-
ドキュメント化: 次の内容を文書化して維持します:
- どのサービスアカウントが存在し、それぞれの目的は何か
- 各サービスアカウントをどのシステム/ワークフローが利用しているか
- 各アカウントに責任を持つチームの連絡先情報
トラブルシューティング
- “Unauthorized” エラー: APIキーが正しく設定されていることと、サービスアカウントに対象プロジェクトへのアクセス権があることを確認してください
- Runs が表示されない:
WANDB_ENTITYが正しいチーム名に設定されていることを確認してください - ユーザーの紐付けが機能しない:
WANDB_USERNAMEで指定したユーザーがチームのメンバーであることを確認してください - 制限付きプロジェクトへのアクセス拒否: 制限付きプロジェクトのアクセスリストにサービスアカウントを明示的に追加してください