GitHubの認証まとめ
なんかあんまり理解してなかったのでまとめる
自動トークン
GitHub Actions内で自動的に作成されるGITHUB_TOKEN
として使えるやつ。アクションを実行しているリポジトリに対しての読み書きの権限などはあるが他のリポジトリへのアクセス権はないのでそういった操作が必要であれば他の方法を使う必要がある。
アクションを実行しているリポジトリに対して簡単な操作をするだけであれば十分で一番簡単に使える。
ちなみに、有効期限はアクション終了後か24時間で期限が切れる。
Deploy keys
リポジトリへの読み込みや書き込みの権限を与えるためにssh鍵を追加することができる。これはアカウントではなくリポジトリに対して設定し紐づけることになる。
設定の仕方は自分のマシンなどで用意したssh鍵の公開鍵の方をGitHubの設定画面から追加する。
で、秘密鍵を使ってssh認証することでCI環境などからリポジトリのcloneなどができる
デメリットは秘密鍵の扱いをどうするか
以下の記事ではGitHub Actionsから別のprivateリポジトリをクローンするのにprivateリポジトリのDeploy keysに公開鍵を登録し、GitHub Actionsのsecretに秘密鍵を指定することでクローンする方法を紹介している。
PAT(Personal Access Token)
PATはユーザーのアカウントに紐づいて作成することができ、ユーザーのユーザー名とパスワードの代わりに使用することでAPIリクエストの認証に使うことができる。トークンは細かく権限の設定をすることができる。
PATは以下の2種類がある。
- fine-grained personal access token
- personal access tokens (classic)
GitHub的にはより細かな権限管理ができるfine-grained personal access tokenを推奨しているので基本的にはこっちを使ったほうがいい。
PATはあくまで生成したユーザーアカウントがアクセスできる範囲で権限を与えるのでアカウントに読み書きの権限がなければそのトークンもアクセス権限はない。
PATは有効期限を設定する必要があり、CI環境などで使う場合有効期限が切れる前にトークンを入れ替える必要があるためCI環境などで使う場合は他の認証方法のほうがいいかもしれない。
マシンユーザー
チーム開発でCI環境で認証を通すのにメンバーアカウントを使うとチーム内での運用で不都合がありえるのでマシンユーザーというCI専用のアカウントみたいなのも作れる。これはGitHubも容認しているっぽい。
これはあくまで個人アカウントで特定のユーザーに紐づかないアカウントを作成してCI用に使うのはありだよみたいな話だと思う。
しかし、後述するGiHub Appの登場でマシンユーザーの作成自体不要になっているっぽい。
GitHub Apps
こちらがわかりやすかった
AWS Lambdaで動くプログラムをGitHub Appとしてだれでも公開でき、リポジトリにインストールすることで使えるみたい。GitHub Appはマーケットプレイスで公開されているものがチェックできる。
ざっと見てみたけどCode rabbitとか無料で使える枠があるみたいだから使ってみたいかも。Cloud BuildのAppとかもあってなんか便利そうなのがあれば使ってみたい。
で認証の話に戻るとこのGitHub Appを作成し、Appから作成したIDと秘密鍵を使うことでGitHub Actionsなどで一時的に使用できるトークンを生成して使うことができる。
これを使うことでPATもマシンユーザーも使わずにGitHub Actionsなどから別のリポジトリへのアクセスなどが簡単にできるという流れ。