Fine-grained personal access tokensを使ってGitHubにgit pushする最小設定

2023/05/06に公開1

はじめに

GitHubにCLIからgit pushするときのつまずきはいくつかあると思います。
定番は以下のような403エラーです。

❯ git push -u origin main
remote: Permission to ume3/bob-zenn-contents.git denied to ume3.
fatal: unable to access 'https://github.com/ume3/bob-zenn-contents.git/': The requested URL returned error: 403

よくある対応はGitHub名+パスワードによる認証。ではなく、アクセストークンを用います。これは、2021年8月から認証方式の変化の影響です。
さらに2022年10月には、新しいPersonal access tokens (PAT)が登場しました。

久しぶりにリポジトリをこしらえてgit pushするとこの変化を目の当たりにしたのでまとめてみます。

参考記事

新しいPATとは

fine-grained personal access tokens in Public Betaのことです。

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 を使用することをお勧めします。
引用:https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#personal-access-token-の種類

  • personal access tokens (classic) ... 今まで使っていたtoken
  • fine-grained personal access token ... これが新しいtoken。なお、2023年5月確認時はβ版。

このアクセストークンは適切な権限設定が必要です。
classicであれば、そのやりかたが染み付いていたのですが、今回は新しいやり方で設定することにしました。

New fine-grained personal access token (Beta)

やりたいことはbranchをgit pushでファイルをアップロードしたいだけです。そのための権限は最小にしたいです。

まずはGitHub上で、New fine-grained personal access tokenを選択。
マニュアルと参考記事より、Repository accessは、Only select repositoriesを選択。Permissionsをカスタマイズします。

最小設定: Repository permissionsに Read and Write access to codeするだけ

Account permissionsは設定不要です。Repository permissionsを選択。設定する箇所は一箇所だけです。

Contents(Repository contents, commits, branches, downloads, releases, and merges.)の設定をRead and WriteにすればOK。

この設定になっていればOKです。なお、Read access to metadataは必須設定で自動付与されます。
あとは発行されたtokenをコピーして、git pushの際に利用(設定方法はいろいろありますが今回は省略)すればOKです。

workflowsにも設定変更を適用したいとき

なお、このtokenの権限だと.github/workflowsを編集する権限がありません。

 ! [remote rejected] add-reviewdog -> add-reviewdog (refusing to allow a Personal Access Token to create or update workflow `.github/workflows/reviewdog.yml` without `workflow` scope)
error: failed to push some refs to 'https://github.com/ume3/bob-zenn-contents.git'

このようなエラーが出て、git pushでworkflowsのymlを保存できませんでした。
以下の権限設定が最下部にありましたので付与すると動きます。

  • Workflows (Update GitHub Action workflow files.)

こちらも、Access: Read and Writeの権限を付与することでgit pushができるようになりました。最終的な設定は以下となります。

おわりに

personal access tokens (classic) でしか権限を設定したことがないので、いざ新しいやり方をしたときにいろいろとつまずきました。意外とネットで検索しても出てこなかったので今回まとめております。誰かの役に立てばうれしいです。

GitHubで編集を提案

Discussion

tana00tana00

pushに成功すると

$ git push -u origin main
Username for 'https://github.com': xxx
Password for 'https://xxx@github.com':
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 10 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (17/17), 3.56 KiB | 3.56 MiB/s, done.
Total 17 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/xxx/yyy.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

失敗なら

$ git push -u origin main
Username for 'https://github.com': xxx
Password for 'https://xxx@github.com':
remote: Permission to xxx/yyy.git denied to xxx.
fatal: unable to access 'https://github.com/xxx/yyy.git/': The requested URL returned error: 403

Repository Aliasの確認

$ git remote -v
origin  https://github.com/xxx/yyy.git (fetch)
origin  https://github.com/xxx/yyy.git (push)

Repository Aliasを使わずにpush

$ git push -u https://github.com/xxx/yyy.git main