真・Bitrise向けのGitHub Personal Access Tokensを駆逐する
前略
fg-PAT駆逐の際にお世話になりました。
これで満足していいのか?
しかし、上記の記事では最終的に自身が作成したGitHub AppのPrivate KeyをBitriseのSecretsに保存している。本当にそれでいいのか?より危険な状態になってしまっていないか?という疑問を抱いた読者諸賢も多いだろう。私もそうである。
2025年現在、Bitriseは独自のGitHub Appを導入可能になっている。今、fg-PATを駆逐したいと願っている人がいるならば、 Bitriseの GitHub Appを利用するべきだろう。
BitriseのGitHub Appを導入する
こちらのドキュメントで紹介されているステップに従えばBitriseのGitHub Appをインストールし、既存のBitrise Projectに組み込むことができる。
BitriseのGitHub Appはデフォルトで contents: read
が付与されているが、追加のパーミッションをリクエストすることができる。追加できるパーミッションは以下である。
metadata: read
issues: read
checks: write
contents: write
commit-statuses: write
pull-requests: write
これらのパーミッションで解決できる処理であれば、BitriseのGitHub Appから発行されたInstallation Tokenを利用すれば対応できる。例えば DangerでCommit StatusやChecksを変更したいケースにも対応できるので、独自のGitHub Appの秘密情報をBitrise上に保存する必要はないのだ。
BitriseのGitHub Appから発行されたInstallation Tokenを利用する
Bitriseのドキュメント上でInstallation Tokenにアクセスする方法は明示されていないが、環境変数 GIT_HTTP_PASSWORD
に格納されている。
BitriseのGitHub Appから発行されたInstallation Tokenを利用して gh
コマンドからGitHub Releasesを作成するStepの例を以下に示す。
workflows:
create-release:
steps:
- script:
inputs:
- content: |-
#!/usr/bin/env bash
set -ex
# BitriseのGitHub Appを利用して認証を行っていると、 `GIT_HTTP_PASSWORD` にInstallation Tokenがセットされる
echo $GIT_HTTP_PASSWORD | gh auth login --with-token
gh release create v1.2.3 --generate-notes
簡単! gh
コマンドを利用しない場合にも、netrc経由で認証を行うことができる。
workflows:
example:
steps:
- https://github.com/bitrise-io/bitrise-steplib.git::authenticate-host-with-netrc@0:
inputs:
- host: github.com
- username: username # usernameは適当で良い
- password: "$GIT_HTTP_PASSWORD"
まとめ
BitriseのGitHub Appを利用することで、自身が作成したGitHub Appの秘密情報をBitriseにホストすることなく、GitHubのリソースにアクセスすることができる。Step内で環境変数を通じてInstallation Tokenにアクセスできるので gh
コマンドを利用しているケースなどでは対応できる可能性が高いだろう。
補足
注意点として、Bitrise WorkspaceとBitrise GitHub Appの関係は1:1だ。1つのBitrise GitHub Appを複数のBitrise Workspaceと紐づけることはできない。
Discussion