allegrogikenです。2022/10/18 に GitHub 公式のブログにて発表された新しい personal access token (以下、PATと表現します) がとても便利そうだったので、その速報をお届けします。
GitHubのブログは下のURLからご参照ください。
https://github.blog/2022-10-18-introducing-fine-grained-personal-access-tokens-for-github/
Fine-grained personal access token(PAT) とは?
GitHub の API を利用する際などに使われるPATですが、従来は発行者がアクセスできる範囲であればどのようなリポジトリに対しても使えるものでした。scope
という概念があり、PATを通して行う操作の種類については絞ることが可能でした。
これに対し、今回新たにbeta実装された Fine-grained
なPATでは所属するOrganization、および影響を及ぼせるリポジトリが選択可能になるようです。また、scope
に代わる操作の制御に関しても刷新されています。
Fine-grained
の意味することろですが「きめ細かな」ということで、非常に直感的なネーミングですね。対して、従来のPATは Classic
の枕詞が付いて呼ばれるようで、UI上もそのような表現が見られます。
早速試してみた
発行は従来通りの導線、つまり Developer settings
から可能です。折角なのでURLも記載します。
https://github.com/settings/personal-access-tokens/new
Organizationの選択
画像のように、発行する際に「Resouce owner」の選択をする必要があります。ここで選択した Organization に属する部分にだけアクセス可能なPATになります。
特段困ることは無さそうですが、複数の Organization をまたがるような設定はできない感じがしますね。また、Fine-grained PAT
の有効期限は最大で1年間となっているようです。従来のPATでは永続するものが作成できましたが、こちらも安全志向になっています。
Permissionsの設定
続けると、対象のリポジトリ設定と権限についての項目がたくさん出てきます。画像では「全リポジトリ」と雑な設定にしていますが、個別で複数のリポジトリを選択することもできます。
GitHub Apps を作成したことがある人であれば、この Permissions 設定は GitHub Apps のそれとほぼ同じであることに気づくのではないでしょうか。おそらく、GitHub Apps の設定が PAT の方に輸入されてきているような形ではないかと思います。
これらを設定することで、Fine-grained PAT
の作成は完了です。
作成されたPATをOrganization側から見る
作成時に「Resource owner」として指定された Organization からは、有効なPATを一覧で見ることができます。
この画面から無効化(revoke)することもできるので、とても便利ですね!
OrganizationはPATに対する全体的な許可・拒否設定ができる
画像のように、現時点では3つの項目でPATに対する全体的な振る舞いを選択できます。具体的には「Classic PAT
の許可」「Fine-grained PAT
の許可」「Fine-grained PAT
に対する承認有無」を選択できます。
「承認済みのFine-grained PAT
だけ許可して、他は全て拒否する」みたいな使い方が想像できますね。
まとめ
beta版ではありますが、非常に実用的で便利なアップデートの一言に尽きます!ありがたい・・!
最近では GitHub Actions に組み込みの権限があったり、より安全に設計できるGitHub Apps が登場したということもあり、従来のPATはなるべく使わないようにしてきました。とはいえ、検証段階ではサクッと用意できる PAT が欲しくなることも度々ありました・・
その点 Fine-grained PAT
であれば、セキュリティ上の懸念はほとんど払拭されるのではないでしょうか。また、GitHub Apps と PAT に付与される権限設定が似通ったものになったことも個人的には価値が大きいと感じています。
開発者個人も組織の管理者にとっても嬉しいこと間違いなしの Fine-grained PAT
、ぜひ使ってみてはいかがでしょうか。
プロフィール
- D言語で競技プログラミングをやったりしています。お仕事では雑食です。devopsのdはD言語のDです。