自分が書いた文章を添削してもらう目的で、文章の一部に生成AIを使用しました。
トークンとは?
ローカル環境からGitHub上のリポジトリへ安全にアクセスするために必要となるのが、Personal Access Token(個人アクセストークン)です。
これはパスワードの代わりに利用される認証情報ですが、ただのリポジトリへの「鍵」ではありません。トークンを発行する際に 権限(スコープ) を設定することで、このトークンを使用するPCやアプリケーションが、どこまでの操作を許可されるかという制約を細かく設定できます。
例えば
後ほど登場するdelete_repoというスコープがあります。このスコープを使用することで、リポジトリを削除することが可能です。トークンの中でこのスコープを許可しない設定にしておくことで、トークンが流出しても、悪意のあるユーザーがリポジトリを削除することが出来なくなるというメリットがあります。
でも
しかし、スコープの種類は非常に多岐にわたるため、ちゃんと理解できてないし使いこなせてないなと思いました。そこで、今回いい機会なのでまとめてみました。
各スコープで何が出来るのか
| スコープ | 説明 | 可能な操作の例 |
|---|---|---|
| repo | プライベートリポジトリのフルアクセス。 | リポジトリの読み書き/削除、Git操作、コミットステータスなど。 |
| public_repo | パブリックリポジトリのフルアクセス。 | パブリックリポジトリに対するrepoと同様の操作。 |
| repo:status | コミットステータスの読み取り/書き込み。 | CI/CDのビルド結果などのステータス設定。 |
| repo_deployment | デプロイメントステータスのアクセス。 | デプロイメントステータスの設定と取得。 |
| delete_repo | ユーザーが所有するリポジトリの削除。 | リポジトリの削除(強力な権限)。 |
| workflow | GitHub Actions ワークフローファイルの読み書き。 | ワークフローファイルの管理。 |
| notifications | 通知への読み取りアクセス。 | 通知、チームのプッシュなどの閲覧。 |
| gist | Gistの読み取りと書き込み。 | Gistの作成、削除、読み取り、更新。 |
| read:org | Organizationおよびチームの読み取り専用アクセス。 | メンバーシップの表示、チーム情報の表示。 |
| write:org | Organizationおよびチームへの読み書きアクセス。 | チームの作成/編集、メンバーシップの管理。 |
| admin:org | Organizationのフル管理アクセス。 | メンバー、チーム、Webhookの管理。 |
| admin:public_key | 公開SSHキーのフル管理。 | 公開SSHキーの取得、追加、削除。 |
| write:public_key | 公開SSHキーの読み取りと書き込み。 | 公開SSHキーの追加、変更。 |
| read:public_key | 公開SSHキーの読み取り。 | 公開SSHキーの取得。 |
| admin:gpg_key | GPG署名キーのフル管理。 | GPGキーの取得、追加、削除。 |
| write:gpg_key | GPG署名キーの読み取りと書き込み。 | GPGキーの追加、変更。 |
| read:gpg_key | GPG署名キーの読み取り。 | GPGキーの取得。 |
| user | ユーザープロファイルのフルアクセス。 | ユーザープロファイルデータ、メールアドレスの読み書き、フォロー管理。 |
| read:user | ユーザープロファイルの読み取り専用アクセス。 | パブリックユーザープロファイルデータ、パブリックアクティビティの表示。 |
| user:email | プライベートなメールアドレスの読み取り専用アクセス。 | 登録されているプライベートメールアドレスの取得。 |
| user:follow | ユーザーのフォロー/アンフォローの管理。 | ユーザーのフォロー、アンフォロー。 |
| admin:repo_hook | リポジトリ Webhookのフル管理。 | Webhookの作成、読み取り、更新、削除。 |
| write:repo_hook | リポジトリ Webhookの読み書き。 | Webhookの作成、読み取り、更新。 |
| read:repo_hook | リポジトリ Webhookの読み取り専用アクセス。 | Webhookの取得。 |
| admin:org_hook | Organization Webhookのフル管理。 | Organization Webhookの作成、読み取り、更新、削除。 |
| read:packages | GitHub Packagesの読み取り(ダウンロード)。 | パッケージのダウンロード。 |
| write:packages | GitHub Packagesの読み書き(アップロード/削除)。 | パッケージのアップロード、削除。 |
| delete:packages | GitHub Packagesの削除。 | パッケージの削除。 |
| admin:enterprise | GitHub Enterprise Cloudでのフル管理アクセス。 | エンタープライズレベルでの設定管理。 |
| manage_runners | GitHub Actionsセルフホストランナーの管理。 | ランナーの登録、削除、設定変更。 |
| manage_billing | 課金情報の管理。 | 課金情報の表示、変更。 |
結局どの権限を許可すればいいのか
- ケースバイケースですが、自分のような個人開発レベルのリポジトリだと基本的には、
repo,public_repoのいずれかを許可すれば良いと思います。
まとめてみて
-
GPG,user,organaizatonなど、自分の知らないトークンの権限があることを学べました。トークン発行時に不要なものは許可しないようにしたいですね。