速報

JAL・JTAの予約情報約9万2千人分に外部参照の形跡|対象項目と利用者対応

CATEGORY

GitHub Copilot SDKのサーバー間認証を導入|GitHub Appと1時間トークンの運用

※本ページのリンクにはプロモーションが含まれています。

組織のGitHub Appが短命トークンを発行し複数のCopilot SDKサービスへ渡し利用量を台帳で確認する概念イラスト

目次

GitHubは2026年10月27日、GitHub Copilot のサーバー間認証をパブリックプレビューとして公開した。GitHub Appのインストールトークンを使い、サインイン中の個人がいないバックエンドサービスや常駐エージェントからCopilotを呼び出せる。利用はGitHub Appをインストールした組織へ帰属し、その組織のモデルポリシー、予算、支出制御が適用される。

対象は、Copilot SDKを、社内ポータル、チケット処理、コードレビュー補助などのサーバープロセスへ組み込む開発チームだ。これまでは利用者ごとのをサービスへ持ち込む設計になりやすかった。今回の方式では、GitHub Appをワークロードの主体として扱える。ただし、トークンは1時間で失効し、SDKの実行プロセスへ明示的に渡す必要がある。本稿はニュースの紹介にとどまらず、導入条件、実装、更新、課金確認、失敗時の切り分けまでを整理する。

スポンサーリンク

変わったのは「誰の利用として実行するか」

サーバー間認証の中心は、個人アカウントではなく組織へインストールしたGitHub Appで利用主体を表すことだ。アプリには組織権限のCopilot Requestsを読み取り専用で付与する。実行時にはアプリのインストールを発行し、Copilot SDKへ渡す。GitHubはこの短命トークンからアプリとインストール先組織を識別し、Copilotの利用量を組織へ計上する。

この方式は「ユーザーの代わりに操作する」とは目的が異なる。ユーザーOAuthは対話的なアプリで利用者本人の権限を使う場合に向く。サーバー間認証は、夜間ジョブや共有サービスのように利用者セッションが存在しない処理に向く。個人アクセストークンを共有アカウントへ固定する設計から移行できる点が固有の価値になる。

方式主な用途利用の帰属運用上の注意
GitHub Appのサーバー間認証バックエンド、常駐エージェントインストール先組織1時間トークンの更新が必要
ユーザーOAuth対話型アプリサインインした利用者利用者ごとの同意とセッション管理
GitHub ・保存済みローカル開発開発者無人サーバーでは主体が曖昧になりやすい
のGITHUB_TOKENActionsワークフローワークフローを実行する組織専用の権限宣言と組織ポリシーが必要

導入前に組織側の条件をそろえる

  1. GitHub Appを作成し、対象組織へインストールする。
  2. 組織権限のCopilot Requestsを読み取り専用で許可する。上の権限名はorganization_copilot_requests: readである。
  3. 組織でGitHub Copilotを利用でき、サーバー間認証を許可するポリシーが有効か確認する。
  4. 利用可能なモデル、予算、支出制御を組織の運用方針に合わせる。

Copilot Requestsは、内容を読み書きする権限とは別に扱う。Copilotを呼ぶだけのサービスなら、不要なリポジトリ権限を追加しない。サービスがソースを取得する場合も、Copilot利用権限とリポジトリ権限を分けて設計すると、障害時にどの許可が不足しているか判定しやすい。アプリを停止またはアンインストールすれば、GitHubは以後のCopilot利用を拒否するため、運用停止の手段としても使える。

スポンサーリンク

GitHub Actionsでは組み込みトークンを使う

GitHub Actions内でCopilot SDKを動かす場合、別途GitHub Appを作らず、ワークフローに用意されるGITHUB_TOKENを利用できる。権限にはcontents: readとcopilot-requests: writeを明示する。あわせて組織ポリシーで、組織へ課金されるCopilot CLIの利用を許可する必要がある。

permissions:
  contents: read
  copilot-requests: write

steps:
  - uses: actions/checkout@v4
  - name: Run Copilot SDK service
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    run: npm run copilot-task

組み込みトークンはワークフロー単位で発行されるため、外部サーバーへ持ち出す用途ではない。Actions外のコンテナ、ジョブ、常駐APIではGitHub Appのインストールトークンを発行する。実行場所で方式を分けることが、認証経路を単純に保つ第一歩になる。

外部サービスではトークンを明示的に渡す

GitHub Appのなどを使ってインストールアクセストークンを発行したら、その値をCopilot SDKの接続へ渡す。公式ドキュメントは、明示トークンとuseLoggedInUser: falseの併用を示している。後者を有効にすると、環境変数やGitHub CLIなどから別の利用者資格情報を自動発見しないため、意図しない個人課金を防ぎやすい。

import { CopilotClient, RuntimeConnection } from "@github/copilot-sdk";

const token = await mintInstallationToken(installationId);

const client = new CopilotClient({
  connection: RuntimeConnection.forStdio({
    gitHubToken: token,
    useLoggedInUser: false,
  }),
});

await client.start();

上のmintInstallationTokenは説明用の抽象化であり、GitHubがその名前の関数を提供するという意味ではない。実装ではGitHub Appの認証ライブラリまたはを使い、対象組織のinstallation IDに対するトークンを取得する。秘密鍵はSDKプロセスへ広く配らず、トークン発行を担う小さなブローカーへ集約する構成が扱いやすい。

スポンサーリンク

1時間の失効を前提にプロセスを更新する

インストールアクセストークンは1時間で失効する。公式手順では、期限前に新しいトークンを発行し、SDKの子プロセスまたはランタイムを再起動して差し替える。長時間接続を維持したままトークンだけを上書きできると仮定しない。ジョブ単位でSDKクライアントを起動する構成なら、各ジョブの開始時に発行すればよい。常駐サービスなら、期限の数分前に新クライアントを立ち上げ、準備完了後に新規処理を切り替え、旧クライアントを終了する。

更新失敗時には、期限切れクライアントへ処理を流し続けず、新規受付を止めて再発行を試す。トークン値そのものをログへ出さず、installation ID、app client ID、発行時刻、失効予定、再起動結果だけをに残す。複数組織を扱うサービスでは、要求されたとinstallation IDの対応をサーバー側で固定し、クライアントから渡された組織名だけで発行先を選ばない。

認証経路の優先順位をテストする

Copilot SDKは、明示したgitHubTokenを最優先し、続いて直接API向け、COPILOT_GITHUB_TOKEN、GH_TOKEN、GITHUB_TOKEN、保存済みOAuth、GitHub CLIの順に認証情報を探す。開発端末で成功し、コンテナで失敗する場合は、この探索順の差が原因になり得る。サーバー間認証の試験ではuseLoggedInUser: falseを設定し、明示トークンを外したときに必ず失敗することも確認する。

  • 正常系:対象組織のトークンでセッションを開始し、許可モデルへ要求できる。
  • 期限切れ:古いトークンで401となり、再発行後の新プロセスで回復する。
  • 権限不足:Copilot Requestsを外すと403となり、リポジトリ権限の追加では直らない。
  • 別組織:組織Aの要求を組織Bのinstallation IDで実行しない。
  • ポリシー:許可されていないモデルを指定したとき、代替モデルへ黙って切り替えずエラーを記録する。

課金と利用主体はCSVで確認する

組織所有のIDに切り替える目的は、認証だけでなく費用と利用主体を一致させることにある。組織所有者はAI利用レポートのCSVでapp_client_idを確認できる。公開前にテスト用GitHub Appで少量の要求を実行し、想定した組織へ記録され、対象アプリのclient IDが残るかを確認する。予算超過時や利用停止時の挙動も、組織の支出制御と合わせて試験する。

リクエスト数だけでなく、処理種別、呼び出し元サービス、成功・失敗、利用モデルを自社側のメトリクスへ記録すると、GitHubの集計と照合しやすい。本文や生成内容を無条件にログへ残す必要はない。費用配賦には、アプリを用途別に分けるか、単一アプリ内のサービス識別子を自社メトリクスへ持たせるかを先に決める。

401・403・モデルエラーを順番に切り分ける

症状最初に確認する項目対応
401トークンの有効期限と発行先対象installationで再発行し、SDKプロセスを再起動
403・機能無効組織がサーバー間認証を許可しているか組織設定と利用資格を確認
403・権限不足Copilot Requests権限GitHub AppまたはActionsの権限宣言を修正
モデルを利用できない組織のモデルポリシーとSDK指定許可モデルへ明示的に変更
別アカウントへ計上使用したinstallation IDテナント対応表と発行経路を修正

401を受けたときに個人のGH_TOKENへ自動させると、障害が隠れて課金先も変わる。サーバーでは明示トークン以外の探索を止め、認証失敗を運用アラートへ上げる。403では、機能の有効化、Copilot Requests権限、モデルポリシーを分けて確認する。GitHub Appのリポジトリ権限を広げても、Copilot利用権限の不足は解消しない。

スポンサーリンク

段階導入とパブリックプレビューの限界

まず非本番の組織と専用GitHub Appで、短時間ジョブを1つ移行する。次にトークン更新、権限削除、アプリ停止、予算制御を試す。利用CSVの反映と自社メトリクスが一致したら、常駐サービスへ広げる。個人認証をすぐ削除せず、利用経路が残っていないことをログで確認してから撤去する。

2026年10月28日時点で本機能はパブリックプレビューである。提供条件、SDKのオプション、組織設定は一般提供までに変わる可能性がある。大規模展開では、利用中のSDKバージョンに対応する公式ドキュメントを固定してレビューし、変更履歴を追う。個人アカウントを介さず、組織単位の課金と停止を必要とするサービスには適合しやすい。一方、利用者本人の権限や同意が必要な対話型アプリは、ユーザーOAuthを選ぶ方が自然である。

関連記事

スポンサーリンク

参考資料

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

フォールバック

本来の方法が使えないときに、代わりの方法に切り替えて動作を続けること。また、その代わりの方法。

詳しく見る

プロンプト

生成AIに入力する指示や質問の文章。内容や書き方によって、AIの出力が大きく変わる。

詳しく見る

環境変数

OSや実行環境に設定しておき、プログラムから読み取って使う値。環境ごとの設定や秘密の値を渡すのに使う。

詳しく見る

テナント

クラウドやSaaSで、利用する組織ごとに分けられた区画。一つの仕組みを複数の組織で共有する形をマルチテナントと呼ぶ。

詳しく見る

監査ログ

誰が、いつ、何をしたかを記録したログ。不正な操作の調査や、操作の正しさの確認に使う。

詳しく見る

REST API

URLでデータを指定し、HTTPのメソッド(GET・POSTなど)で操作する、Webでよく使われるAPIの設計の考え方。

詳しく見る

ランタイム

プログラムを実行するときに必要な環境や仕組み。Node.jsやブラウザのJavaScriptの実行環境など。

詳しく見る

秘密鍵

公開鍵暗号で、持ち主だけが厳重に保管する鍵。署名や、公開鍵で暗号化されたデータの復号に使う。

詳しく見る

クラウド

サーバーやソフトウェアを自分で持たずに、インターネット経由で必要な分だけ利用する形態。AWSやGoogle Cloudなど。

詳しく見る

リポジトリ

ソースコードなどのファイルと、その変更の履歴をまとめて保管する場所。Gitで管理し、GitHubなどで共有する。

詳しく見る

API

ソフトウェアやサービスの機能を、ほかのプログラムから決まった方法で呼び出して使えるようにした窓口。

詳しく見る

GitHub Actions

GitHubに組み込まれたCI/CDの仕組み。リポジトリへの変更などをきっかけに、テストやビルド、デプロイを自動で実行する。

詳しく見る

認証

アクセスしてきた相手が本人であることを確かめる仕組み。パスワードや生体情報、電子証明書などを使う。

詳しく見る

CLI

コマンドラインインターフェース。文字のコマンドを入力してコンピューターやツールを操作する方法、またはそのためのツール。

詳しく見る

OAuth

パスワードを渡さずに、外部のアプリにアカウントの一部の操作を許可するための仕組み(認可の標準)。

詳しく見る

アクセストークン

サービスやAPIを利用する権限を表す文字列。ログインや認可のあとに発行され、リクエストに付けて送る。

詳しく見る

認証情報

本人であることを証明するための情報。IDとパスワード、APIキー、アクセストークン、秘密鍵など。

詳しく見る

CI/CD

コードの変更をきっかけに、テストやビルド、本番への反映までを自動で行う開発の仕組み。

詳しく見る

SDK

ソフトウェア開発キット。特定のサービスや環境向けの開発に必要なライブラリやツール、ドキュメントをまとめたもの。

詳しく見る