Skip to main content

個人用アクセス トークンを管理する

コマンド ラインまたは API を使用して GitHub への認証を行うときに、パスワードの代わりに personal access token を使用することができます。

警告

アクセス トークンは、パスワードと同じように扱ってください。 詳細については、「personal access token のセキュリティ保護を維持する」を参照してください。

personal access tokenについて

GitHub API またはコマンド ラインを使うと、GitHub に対する認証にパスワードを使う代わりに、Personal access token を使用できます。

Personal access tokenは、GitHub リソースに自動的にアクセスすることを目的としています。 Organization に代わってリソースにアクセスするため、または有効期間の長い統合を行う場合、GitHub App を使用する必要があります。 詳しくは、「GitHub App の作成について」をご覧ください。

トークンは、トークンのオーナーと同様に、リソースにアクセスしてそれらのリソースに対してアクションを実行できますが、さらに、トークンに付与されるスコープまたはアクセス許可によって制限されます。 トークンは、ユーザーに追加のアクセス権を付与できません。 たとえば、personal access token は admin:org スコープで構成できますが、トークンのオーナーが Organization のオーナーでない場合、トークンは Organization への管理アクセス権を付与しません。

personal access token の種類

現在、GitHub では、2 種類のpersonal access token (fine-grained personal access token と personal access tokens (classic)) がサポートされています。 GitHub では、可能な限り、personal access tokens (classic) ではなく fine-grained personal access token を使用することをお勧めします。

メモ

Fine-grained personal access token は、より安全で制御しやすい一方で、personal access token (classic) で実行できるすべてのタスクを実行できるわけではありません。 詳細については、以下の Fine-grained personal access tokens の制限事項に関するセクションを参照してください。

fine-grained personal access token と personal access tokens (classic) の両方が、それらを生成したユーザーに関連付けられ、ユーザーがそのリソースにアクセスできなくなった場合は非アクティブになります。

組織の所有者は、組織にpersonal access tokens (classic)へのアクセスを制限するポリシーを設定できます。Enterprise の所有者は、Enterpriseが保有する Enterprise または組織にpersonal access tokens (classic)へのアクセスを制限できます。 詳しくは、「組織の個人用アクセス トークン ポリシーを設定する」をご覧ください。

Fine-grained personal access token

Fine-grained personal access tokens には、personal access tokens (classic) に比べてセキュリティ上の利点がいくつかありますが、いくつか制限事項があり、シナリオによっては使用できません。 これらの制限事項とその修正計画については、後述するセクションを参照してください。

実際のシナリオに fine-grained personal access token を使用できる場合は、次の機能強化の恩恵が受けられます。

  • 各トークンは、1 人のユーザーまたは 1 つの organization が所有するリソースへのアクセスに制限されています。
  • 各トークンは、そのユーザーまたは organization の特定のリポジトリにのみアクセスするようにさらに制限できます。
  • 各トークンには、個別のより詳細なアクセス許可が付与されるので、personal access tokens (classic) に付与されるスコープよりも鼓膜制御できます。
  • 組織の所有者は、組織のリソースにアクセスできるfine-grained personal access tokenに承認を要求できます。
  • Enterprise オーナーは、Enterprise が所有する Organization 内のリソースにアクセスできる fine-grained personal access token の承認を要求できます。
Fine-grained personal access tokens の制限事項

Fine-grained personal access tokens は、personal access tokens (classic) のすべての機能をサポートしているわけではありません。 これらの機能の差異は永続的なものではありません。GitHub ではその解消に取り組んでいます。 これらのシナリオがサポートされる時期の詳細については、公開ロードマップのページを参照してください。

fine-grained personal access token の主な差異は次のとおりです。

  • fine-grained personal access token を使って、ユーザーがメンバーではないパブリック リポジトリに投稿する。
  • fine-grained personal access token を使って、ユーザーが外部またはリポジトリのコラボレーターであるリポジトリに投稿する。
  • fine-grained personal access token を使って、複数の organization に同時にアクセスする。
  • fine-grained personal access token を使って、ユーザーが属する Enterprise 内の internal リソースにアクセスする。
  • fine-grained personal access token を使って、Enterprise アカウントを管理する API を呼び出す。
  • fine-grained personal access token を使ってパッケージにアクセスする。
  • fine-grained personal access token を使って Checks API を呼び出す。
  • fine-grained personal access token を使って、ユーザー アカウントが所有しているプロジェクトにアクセスする。

GitHub は、より安全なアクセス パターンへの投資を継続するため、このような差異はすべて徐々に解消される予定です。

Personal access tokens (classic)

Personal access tokens (classic) は安全性が低くなります。 ただし、現在、一部の機能は personal access tokens (classic) でしか機能しません:

  • 自分、または自分がメンバーではない組織によって所有されていないパブリック リポジトリに対する書き込みアクセス権を持つのは、personal access tokens (classic) のみです。
  • エンタープライズが所有する内部リポジトリに対する書き込みアクセス権を自動的に持つのは、personal access tokens (classic) のみです。 Fine-grained personal access tokenには、内部リポジトリへのアクセス権を付与する必要があります。
  • 外部コラボレーターは、personal access tokens (classic) のみを使って、コラボレーターである組織のリポジトリにアクセスできます
  • personal access tokens (classic) のみがエンタープライズにアクセスできます。 (Fine-grained personal access token は、エンタープライズが所有する組織にアクセスできます。)
  • いくつかの REST API エンドポイントは、personal access tokens (classic)でのみ利用できます。 エンドポイントがfine-grained personal access tokenもサポートしているかどうかをチェックするには、そのエンドポイントのドキュメントを参照するか、「きめ細かい個人用アクセス トークンに使用できるエンドポイント」を参照してください。

personal access token (classic) を使う場合は、それによって、そのユーザーがアクセスできる Organization 内のすべてのリポジトリと、そのユーザーの個人アカウント内のすべての個人リポジトリへのアクセスが許可されることに注意してください。

セキュリティ上の理由から、GitHub は過去 1 年間使われていない personal access token を自動的に削除します。 セキュリティを強化するため、personal access token には有効期限を設けることを強くお勧めします。

personal access token のセキュリティ保護を維持する

Personal access token はパスワードのようなものであり、どちらにも同じ固有のセキュリティ リスクがあります。 新しい personal access token を作成する前に、より安全な認証方法を使用できるかどうかを検討してください。

  • コマンド ラインから GitHub にアクセスするには、personal access token を作成する代わりに、GitHub CLI または Git Credential Manager を使用できます。
  • GitHub Actions ワークフローで personal access token を使う場合は、代わりに組み込み GITHUB_TOKEN を使用できるかどうかを検討してください。 詳しくは、「ワークフローでの認証に GITHUB_TOKEN を使用する」をご覧ください。

これらのオプションを使用できず、personal access token を作成する必要がある場合は、別の CLI サービスを使ってトークンを安全に格納することを検討してください。

スクリプトで personal access token を使う場合は、トークンをシークレットとして格納し、GitHub Actions を使ってスクリプトを実行できます。 詳細については、「GitHub Actions でのシークレットの使用」を参照してください。また、トークンを Codespaces シークレットとして格納し、Codespaces でスクリプトを実行することもできます。 詳細については、「GitHub Codespaces のアカウント固有のシークレットの管理」を参照してください。

ベスト プラクティスの詳細については、「API 資格情報をセキュリティで保護する」を参照してください。

fine-grained personal access token の作成

メモ

作成できる fine-grained personal access tokens は 50 個に制限されています。 これ以上のトークンが必要な場合、または自動化を構築する場合は、スケーラビリティと管理の向上のために GitHub App を使用することを検討してください。 詳しくは、「GitHub App を作成するタイミングを判断する」をご覧ください。

  1. まだ検証していない場合は、メール アドレスを検証します。 1. GitHub で、任意のページの右上隅にある自分のプロフィール写真をクリックしてから、 [設定] をクリックします。

  2. 左側のサイドバーで [ 開発者設定] をクリックします。

  3. 左側のサイドバーの [ Personal access tokens] の下にある [Fine-grained tokens] をクリックします。

  4. [新しいトークンの生成] をクリックします。

  5. [トークン名] にトークンの名前を入力します。

  6. [有効期限] で、トークンの有効期限を選びます。 無限の有効期間は許可されますが、組織または企業の所有者によって設定された最長の有効期間ポリシーによってブロックされる可能性があります。 詳細については、「personal access tokensの最長の有効期間ポリシーの適用」を参照してください。

  7. 必要に応じて、 [説明] で、トークンの目的を説明するメモを追加します。

  8. [リソース所有者] で、リソース所有者を選びます。 トークンは、選んだリソース所有者が所有するリソースにのみアクセスできます。 Organization が fine-grained personal access token の使用を禁止している場合、自分がメンバーである organization は表示されません。 詳細については、「組織の個人用アクセス トークン ポリシーを設定する」を参照してください。シングル サインオン (SSO) を実行するように求められることがあります。選んだ organization がそれを必須にしていて、アクティブなセッションがまだない場合です。

  9. 必要に応じて、リソース所有者が fine-grained personal access token の承認を要求する Organization である場合、リソース所有者の下にあるボックスに、要求の正当な理由を入力します。

  10. [リポジトリ アクセス] で、トークンでアクセスするリポジトリを選びます。 ニーズを満たす最小限のリポジトリ アクセスを選ぶ必要があります。 トークンには、常に GitHub のすべてのパブリック リポジトリへの読み取り専用アクセスが含まれます。

  11. 前の手順で [リポジトリの選択のみ] を選んだ場合は、 [選択されたリポジトリ] ドロップダウンで、トークンでアクセスするリポジトリを選びます。

  12. [アクセス許可] で、トークンに付与するアクセス許可を選びます。 指定したリソース所有者とリポジトリ アクセスに応じて、リポジトリ、Organization、アカウントのアクセス許可があります。 ニーズに必要な最小限のアクセス許可を選ぶ必要があります。

    各エンドポイントの REST API リファレンス ドキュメントでは、エンドポイントが fine-grained personal access token で動作するかどうかを示し、トークンがエンドポイントを使用するために何のアクセス許可が必要かを示します。 一部のエンドポイントでは複数のアクセス許可が必要な場合があり、一部のエンドポイントでは複数のアクセス許可のうちの 1 つが必要な場合があります。 各アクセス許可を使って fine-grained personal access token がアクセスできる REST API エンドポイントの概要については、「きめ細かい個人用アクセス トークンに必要なアクセス許可」を参照してください。

  13. [トークンの生成] をクリックします。

リソース所有者として Organization を選び、その Organization が fine-grained personal access token の承認を要求する場合、Organization 管理者によって確認されるまで、トークンは pending としてマークされます。 トークンは、承認されるまでパブリック リソースの読み取りのみを実行できます。 Organization のオーナーである場合、要求は自動的に承認されます。 詳しくは、「Organization での個人用アクセス トークンの確認と取り消し」をご覧ください。

URL のパラメーターを使用した fine-grained personal access token の詳細の事前入力

リンクを使って fine-grained personal access token のテンプレートを共有できます。 この方法でトークンの詳細を格納し、関連フィールドが既に設定されているトークンの作成にユーザーを誘導すると、ワークフローの自動化がいっそう簡単になり、開発者のエクスペリエンスが向上します。

サポートされている各フィールドは、特定のクエリ パラメーターを使って設定できます。 すべてのパラメーターは省略可能であり、トークン生成フォームによって検証されて、アクセス許可とリソース所有者の組み合わせが適切であることが確認されます。

ここで示す URL テンプレートの例は、読みやすくするために改行されています。

HTTP
https://github.com/settings/personal-access-tokens/new
  ?name=Repo-reading+token
  &description=Just+contents:read
  &target_name=octodemo
  &expires_in=45
  &contents=read

この URL を試すと、contents:readmetadata:read および指定した名前と説明を使って、有効期限が 45 日後のトークンが作成されます。 作成者が octodemo organization のメンバーではないため、Cannot find the specified resource owner: octodemo を示すエラー メッセージが表示されます。

最もよく見られるトークンを生成する URL の例を次に示します。

サポートされているクエリ パラメーター

独自のトークン テンプレートの作成は、次の表で示すクエリ パラメーターの詳細に従って行います。

パラメーターType例の値有効な値説明
namestringDeploy%20Bot40 文字以下、URL エンコードトークンの表示名を事前入力します。
descriptionstringUsed+for+deployments1,024 文字以下、URL エンコードトークンの説明を事前入力します。
target_namestringoctodemoユーザーまたは organization のスラッグトークンのリソース ターゲットを設定します。 これは、トークンがアクセスできるリポジトリの所有者です。 指定しないと、既定で現在のユーザーのアカウントになります。
expires_ininteger30 または none1 から 366 の間の整数、または none有効期限切れまでの日数。または、期限が切れないようにするには none。 指定しない場合の既定値は 30 日で、ターゲットにトークンの有効期間ポリシーが設定されている場合はそれ未満です。
<permission>stringcontents=read一連のアクセス許可レベルとアクセス レベル。トークンに必要なアクセス許可。 アクセス許可は readwrite、または admin に設定できますが、すべてのアクセス許可でそれらの各レベルがサポートされているわけではありません。

アクセス許可

サポートされる各アクセス許可は、クエリ パラメーターとしてその名前を使って設定し、値で目的のアクセス レベルを指定します。 有効なアクセス レベルは readwriteadmin です。 一部のアクセス許可は read のみをサポートし、一部は write のみをサポートし、admin をサポートするのはほんのわずかです。 &contents=read&pull_requests=write&... の形式で、必要なだけいくつでもアクセス許可を使用します。

URL のアクセス許可に readwrite の両方を含める必要はありません。write には read が常に含まれ、admin には write が常に含まれます。

アカウントのアクセス許可

アカウントのアクセス許可は、現在のユーザーがリソース所有者として設定されている場合にのみ使われます。

パラメーター名[表示名]アクセス レベル
blocking別のユーザーをブロックするread, write
codespaces_user_secretsCodespaces ユーザー シークレットread, write
copilot_messagesCopilot Chatread
copilot_editor_contextCopilot Editor Contextread
emails電子メール アドレスread, write
user_eventsEventsread
followersフォロワーread, write
gpg_keysGPG キーread, write
gistsGistswrite
keysGit SSH キーread, write
interaction_limitsインタラクションの制限read, write
knowledge_basesナレッジ ベースread, write
user_modelsモデルread
planプランread
private_repository_invitationsPrivate repository invitationsread
profileプロファイルwrite
git_signing_ssh_public_keysSSH 署名キーread, write
starringStarread, write
watchingWatch中read, write
リポジトリのアクセス許可

リポジトリのアクセス許可は、ユーザーと organization の両方のリソース所有者に対して機能します。

パラメーター名[表示名]アクセス レベル
actionsアクションread, write
administration管理read, write
attestations構成証明read, write
security_eventsコード スキャンのアラートread, write
codespacesCodespacesread, write
codespaces_lifecycle_adminCodespaces のライフサイクル管理者read, write
codespaces_metadataCodespaces メタデータread
codespaces_secretsCodespaces シークレットwrite
statusesコミットのステータスread, write
contentsContentsread, write
repository_custom_propertiesカスタム プロパティread, write
vulnerability_alertsDependabot アラートread, write
dependabot_secretsDependabot シークレットread, write
deploymentsデプロイread, write
discussionsディスカッションread, write
environments環境read, write
issues問題read, write
merge_queuesMerge queuesread, write
metadataMetadataread
pagesページread, write
pull_requestsPull Requestread, write
repository_advisoriesリポジトリ セキュリティ アドバイザリread, write
secret_scanning_alertsシークレット スキャンニング アラートread, write
secretsシークレットread, write
actions_variables変数read, write
repository_hooksウェブフックsread, write
workflowsWorkflowswrite
Organization のアクセス許可

Organization のアクセス許可は、リソース所有者が organization である場合にのみ使用できます。

パラメーター名[表示名]アクセス レベル
organization_api_insightsAPI Insightsread
organization_administration管理read, write
organization_user_blockingユーザのブロックread, write
organization_campaignsCampaignsread, write
organization_custom_org_rolesカスタム組織ロールread, write
organization_custom_propertiesCustom repository propertiesreadwriteadmin
organization_custom_rolesCustom repository rolesread, write
organization_eventsEventsread
organization_copilot_seat_managementGitHub Copilot Businessread, write
issue_typesIssue Typesread, write
organization_knowledge_basesナレッジ ベースread, write
membersメンバーread, write
organization_modelsモデルread
organization_network_configurationsネットワーク構成read, write
organization_announcement_banners組織のお知らせバナーread, write
organization_codespacesOrganization の codespaceread, write
organization_codespaces_secretsOrganization の codespace シークレットread, write
organization_codespaces_settingsOrganization の codespace 設定read, write
organization_dependabot_secretsOrganization の dependabot シークレットread, write
organization_code_scanning_dismissal_requestsCode scanning dismissal requestsread, write
organization_private_registriesプライベート レジストリread, write
organization_planプランread
organization_projectsプロジェクトreadwriteadmin
organization_secretsシークレットreadwrite
organization_self_hosted_runnersセルフホステッド ランナーread, write
team_discussionsTeam ディスカッションread, write
organization_actions_variables変数read, write
organization_hooksウェブフックsreadwrite

personal access token (classic) の作成

メモ

organization 所有者は、personal access token (classic) のアクセスを自分の organization に制限できます。 personal access token (classic) を使用して、personal access token (classic) のアクセスが無効の Organization 内のリソースにアクセスしようとすると、要求は 403 応答で失敗します。 代わりに、GitHub App、OAuth app、または fine-grained personal access token を使用する必要があります。

警告

personal access token (classic) は、ユーザーがアクセスできるすべてのリポジトリにアクセスできます。 GitHub では、代わりに、特定のリポジトリに制限できる fine-grained personal access token を使用することをお勧めします。 Fine-grained personal access token を使用すると、広範なスコープの代わりにきめ細かなアクセス許可を指定することもできます。

  1. まだ検証していない場合は、メール アドレスを検証します。 1. GitHub で、任意のページの右上隅にある自分のプロフィール写真をクリックしてから、 [設定] をクリックします。

  2. 左側のサイドバーで [ 開発者設定] をクリックします。

  3. 左側のサイドバーの [ Personal access tokens] の下にある [Tokens (classic)] をクリックします。

  4. [新しいトークンの生成] を選択し、[新しいトークンの生成 (クラシック)] をクリックします。

  5. [メモ] フィールドで、トークンにわかりやすい名前を付けます。

  6. トークンに有効期限を設定するには、 [有効期限] を選び、既定オプションをクリックするか、 [カスタム] をクリックして日付を入力します。

  7. このトークンに付与するスコープを選びます。 トークンを使用してコマンドラインからリポジトリにアクセスするには、 [リポジトリ] を選択します。 スコープが割り当てられていないトークンでは、パブリック情報にのみアクセスできます。 詳しくは、「OAuth アプリのスコープ」をご覧ください。

  8. [トークンの生成] をクリックします。

  9. 必要に応じて、新しいトークンをクリップボードにコピーするには、 をクリックします。

    [Personal access tokens] ページのスクリーンショット。 ぼかしたトークンの横には、重なっている 2 つの正方形のアイコンがオレンジ色の枠線で囲まれています。

  10. トークンを使用して、SAML シングル サインオンを使用する Organization が所有するリソースにアクセスするには、トークンを承認します。 詳細については、「シングル サインオンに使用する個人用アクセス トークンの認可」を参照してください。

personal access token を削除する

不要になった場合は、personal access token を削除する必要があります。 デプロイ キーの作成に使用された personal access token を削除すると、デプロイ キーも削除されます。

  1. GitHub で、任意のページの右上隅にある自分のプロフィール写真をクリックしてから、 [設定] をクリックします。
  2. 左側のサイドバーで [ 開発者設定] をクリックします。
  3. 左側のサイドバーの [ Personal access tokens] で、削除する personal access token の種類に応じて、[Fine-grained tokens] または [Tokens (classic)] をクリックします。
  4. 削除する personal access token の右側にある [削除] をクリックします。

メモ

他のユーザーに属する personal access token のリークを見つけた場合は、REST API を使って失効要求を送信できます。 「organization でのデータ 漏洩を防ぐためのベスト プラクティス」を参照してください。

コマンド ラインで personal access token を使用する

personal access token を入手したら、HTTPS 経由で Git の操作を実行するとき、パスワードの代わりにそれを入力できます。

たとえば、コマンド ラインでリポジトリをクローンするには、次の git clone コマンドを入力します。 その後、ユーザー名とパスワードの入力を求められます。 パスワードの入力を求められたら、パスワードの代わりに personal access token を入力します。

$ git clone https://github.com/USERNAME/REPO.git
Username: YOUR-USERNAME
Password: YOUR-PERSONAL-ACCESS-TOKEN

personal access token と共にユーザー名の入力を求められますが、ユーザー名は認証には使われません。 代わりに、personal access token が認証に使われます。 ユーザー名を入力しないと、資格情報が無効であるというエラー メッセージが表示されます。

Personal access tokenは、HTTPS Git 操作にのみ使用できます。 リポジトリで SSH リモート URL が使用されている場合は、リモートを SSH から HTTPS に切り替える必要があります。

ユーザ名とパスワードの入力を求められない場合、資格情報がコンピュータにキャッシュされている可能性があります。 キーチェーンの資格情報を更新して、古いパスワードをトークンに置き換えることができます。

すべての HTTPS Git 操作でpersonal access tokenを手動で入力する代わりに、Git クライアントを使用してpersonal access tokenをキャッシュできます。 Git では、有効期限が経過するまで、資格情報をメモリに一時的に格納します。 また、Git ですべての要求の前に読み取ることができるプレーンテキスト ファイルにトークンを格納することもできます。 詳しくは、「Git に GitHub の認証情報をキャッシュする」をご覧ください。

参考資料