サポートされているアクセス トークンの識別

完了

ここでは、さまざまな GitHub アクセス トークンと、それらのアプリケーション、制限、レート制限について学習します。

社内のユーザーにアクセスを許可する場合、認証は非常に重要になります。 ユーザー アクセスのスコープは厳密に調べて、ユーザーが自分のタスクを完了するために必要なものだけを含める必要があります。 さまざまなアクセス トークンを理解しておくことが重要です。そうすることで、ユース ケースに最適なオプションを使用できるように社内のユーザーを導くことができます。

GitHub は各種のトークンを使用して、ユーザーが実行する必要のあるさまざまなアクティビティを認証できるようにします。 通常、これらの各種トークンは単純明快であり、使用するトークンを簡単に知ることができます。 しかし、使用結果が同じになるトークンが複数存在する場合があるため、トークンの選択が結果的に適切さの程度を決定することになります。 このような状況では、GitHub のトークンの特性とトークンのアクセスを正しくスコープする方法の判断が重要です。 使用可能な各種のアクセス トークンのリストを以下に示します。

  • GitHub 個人用アクセス トークン
  • GitHub ユーザーからサーバーへのトークン
  • GitHub サーバーからサーバーへのトークン
  • OAuth アクセス トークン
  • 更新トークン

セキュリティの脆弱性が検出された際に、迅速にリスクを軽減できるように、開発チームが適切なスコープのトークンを使用するように推奨することが重要です。 これらの各アクセス トークンについて、詳しく見ていきます。

個人用アクセス トークン

個人用アクセス トークン (PAT) は、パスワードを使用した GitHub の認証に代わる方法です。 リポジトリをプッシュおよびプルするには、GitHub でユーザー アクセスを検証する必要があります。 検証は、ユーザーの検証済みのメール アドレスを使用して行われます。 ワークフローに必要な数の個人用アクセス トークンを作成できます。これらはパスワードと同じくらい安全に扱う必要があります。 アプリケーションごとに各種のトークンを使用することは、セキュリティのベスト プラクティスです。 GitHub で個人用アクセス トークンを作成するには、[Settings](設定) に移動します。[Developer settings](開発者の設定) の下に [Personal access tokens](個人用アクセス トークン) があります。

Screenshot with an example of a GitHub personal access token.

個々のトークンは、割り当て対象のジョブの認証に必要なアクセスにのみ、スコープを指定できます。 トークンは特定のユーザーに関連付けられています。また、組織およびリポジトリに対するユーザーのアクセス権に合わせて調整されます。 個人用アクセス トークンは、いつでも無効にできます。これは、セキュリティ ハッキングが発生した場合に特に重要になります。 チームの個人用アクセス トークンを、ユーザー名やパスワードと同じくらい安全重視で扱う必要があることを、チームに伝えることが重要です。 トークンが侵害された場合は、直ちにアクションを実行してトークンを無効にする必要があります。

個人用アクセス トークンを作成する詳細な手順については、GitHub Docs の「個人用アクセス トークンの作成」を参照してください

デバイス トークン

デバイス トークンは、基本的には PAT のマシン アカウント バージョンであり、デバイスのコンテキストで使用されます。デバイス トークンを使用すると、ユーザーにバインドされていない特定のユース ケースで特定のリポジトリにアクセスできます。 OAuth フローを使用したアプリケーションのセットアップでは、デバイス トークンを使用します。 これらは通常、ランナー、特別なアプリケーション サービス、Cron ジョブ (Linux)、または自動化されたタスクに関連する同様の別シナリオで使用されます。 これは個人用アクセス トークンのように個人のアカウントと関連付けられます。デバイス トークンを作成したアカウントはライセンスを消費します。

GitHub アプリケーションのインストール トークン

インストール トークンを使用すると、GitHub アプリは組織でのアプリケーションのインストールに対して、認証済みの API 要求を行うことができます。 インストール トークンを作成する前に、トークンを適用する GitHub アプリを目的のリポジトリにインストールする必要があります。 インストール トークンの有効期限は 1 時間です。特定の目的のために生成され、比較的短い時間で期限切れになるため安全です。

OAuth アクセス トークン

OAuth 2 トークンは、ブラウザーで実行される標準的な OAuth アプリや、ヘッドレス アプリ (CLI ツールなど) のユーザーの認可に使用されます。 これにより、アプリはユーザー アクセス トークンを使用して API にアクセスできます。 これらのトークンを使用すると、GitHub ユーザー ID とサードパーティのアプリケーションが結び付けられ、アプリがユーザーに代わってアクションを実行できるようになります。 たとえば、user:email スコープを要求するアプリを使用する必要がある場合、アプリは個人用メール アドレスへの読み取り専用アクセス権を持つことになります。 これらのトークンは、実稼働アプリケーションの Web アプリケーション フローを使用して取得できます。 これらのトークンも有効期限が短く、10 分で期限切れになるため安全です。

更新トークン

更新トークンは OAuth トークンと結び付けられます。 新しい OAuth トークンが付与されると (ユーザーからサーバーへの要求経由で)、応答に更新トークンが含まれます。 ユーザー トークンの有効期限が切れたときは、コールバック要求を使用して、更新トークンを新しいユーザー トークンと交換できます。 新しい OAuth トークンが発行されるたびに、更新トークンが含まれます。 更新トークンは 6 か月間有効であり、OAuth トークンを更新するための有用なリマインダーになります。

識別可能なプレフィックス

業界全体で見られるように、トークンのプレフィックスはトークンを識別可能にするための明確な方法です。 GitHub には各トークンを表す 3 文字のプレフィックスが含まれています (会社の記号、gh、トークンの種類の最初の文字の順)。 トークンの種類は次のようになります。

  • ghp GitHub 個人用アクセス トークン
  • ghu GitHub ユーザーからサーバーへのトークン
  • ghs GitHub サーバーからサーバーへのトークン
  • gho OAuth アクセス トークン
  • ghr 更新トークン

また、これらのプレフィックスには、トークン内に区切り文字 (_) を入れます。これにより、読みやすさが向上します。 アンダースコアは Base64 文字ではありません。そのため、これらのトークンが SHA などランダムに生成された文字列で誤って複製されることを回避できます。 これらのプレフィックスは、シークレット スキャンの誤検知率を低減するためにも有用です。これは、GitHub リポジトリ内のセキュリティを一段と向上させる、GitHub の高度なセキュリティ機能です。

トークン レート制限

レート制限を超えると、開発時間を失う可能性があります。 GitHub アプリと OAuth アプリのレート制限について説明します。 レート制限を理解することにより、チームの開発者のリソースとなり、GitHub リソースに対する組織の投資を最適化できます。

レート制限は GitHub のトラフィックのレートを制御するのに役立ちます。レート制限は 1 時間あたりの要求数に基づいています。

  • GitHub Enterprise アカウントにインストールされた GitHub アプリには、1 時間あたり 15,000 要求までの要求レート制限があります。
  • OAuth アプリは個別のユーザーに対して認証され、1 時間あたり 5,000 要求に制限されています。

Enterprise の管理者は、アプリのレート制限を監視し、開発者と協力して、制限内に収まるようにスクリプトを調整する必要があります。 通常、レート制限は、開発者がワークフローで大量の情報を要求するスクリプトを作成するなどの作業を行うまでは問題になりません。 開発は突然停止し、レート制限がボトルネックになります。 これらのレート制限超過の問題は、1 時間あたりの要求数を制限するか、要求間で待機するようにワークフローを変更することで回避できます。 基本認証または OAuth を使用してレート制限を超えた場合は、API 応答をキャッシュし、条件付き要求を使用することで問題を解決できる可能性があります。

管理コンソールでは、企業内の認証されていないユーザーにカスタム レート制限を設定できます。また、特定のユーザーが完全な API レート制限を利用できるようにする除外リストを作成できます。

Screenshot of the management console setting the API rate limits.

次の Rate Limit API を使用して、現在のレート制限の状態をいつでも確認できます。 API 要求から返された HTTP ヘッダーは、現在のレート制限の状態を示しています。

curl \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/rate_limit

応答の例

{
  "resources": {
    "core": {
      "limit": 5000,
      "remaining": 4999,
      "reset": 1372700873,
      "used": 1
    },
    "search": {
      "limit": 30,
      "remaining": 18,
      "reset": 1372697452,
      "used": 12
    },
    "graphql": {
      "limit": 5000,
      "remaining": 4993,
      "reset": 1372700389,
      "used": 7
    },
    "integration_manifest": {
      "limit": 5000,
      "remaining": 4999,
      "reset": 1551806725,
      "used": 1
    },
    "code_scanning_upload": {
      "limit": 500,
      "remaining": 499,
      "reset": 1551806725,
      "used": 1
    }
  },
  "rate": {
    "limit": 5000,
    "remaining": 4999,
    "reset": 1372700873,
    "used": 1
  }
}

レート制限の詳細については、GitHub Docs の「レート制限」を参照してください。