エンジニアの皆さん、こんにちは。現場で泥臭いトラブルシューティングを繰り返していると、ふと「なぜこんなに権限管理で疲弊するのか?」と考えることはありませんか?
GitHubで外部ツールや自動化スクリプトを連携させる際、真っ先にぶつかる壁が「GitHub Apps」か「OAuth Apps」かという二択です。
多くの人は「とりあえずOAuthでトークンを発行して終わり」にしがちですが、それは「家の鍵を合鍵屋に預けず、自分の財布ごと渡して玄関を開けさせている」ようなものです。今日は、プロとして絶対に知っておくべき、この2つの本質的な違いと、賢い使い分け方を伝授します。
—
1. そもそも何が違うのか?:役割の明確化
一言で言うなら、「OAuth Appsは『あなた自身』として振る舞い、GitHub Appsは『アプリそのもの』として振る舞う」という点に集約されます。
| 特徴 | OAuth Apps | GitHub Apps |
| :— | :— | :— |
| 主語 | 「ユーザー」 (あなた) | 「アプリ自身」 |
| 権限 | あなたの全権限を共有しがち | 必要なリポジトリにのみ最小限の権限を付与 |
| 推奨度 | 低い(レガシー) | 高い(現代の標準) |
なぜGitHub Appsが「正解」なのか?
OAuth Appsは、ユーザー個人のアクセストークンを使い回すため、もしそのトークンが漏洩したら、あなたがGitHub上でできる「すべての操作」が乗っ取られます。
一方、GitHub Appsは「最小権限の原則」に基づいています。「Issuesを読み取るだけ」なら、「Pull Requestをマージする権限」は与えられません。これがセキュリティ上の決定的な差です。
—
2. GitHub Appsで始める:HelloWorld的セットアップ
では、最も安全で現代的な「GitHub Apps」で、特定のリポジトリにだけアクセスする仕組みを構築してみましょう。
ステップ1:Appの作成
1. GitHubのSettings > GitHub Apps から「New GitHub App」を作成。
2. Permissions (権限):ここで欲張らないこと。「Issues: Read-only」だけ選ぶ、といった具合に、機能に必要な最小限に絞ります。
3. Webhook:イベント(Issue作成など)を受け取りたい場合は設定。今回はAPI連携がメインなので空欄でOK。
ステップ2:秘密鍵の発行
GitHub Appsは「秘密鍵(Private Key)」を使用して認証します。
- 「Private keys」セクションで鍵を生成・ダウンロードしてください。この`.pem`ファイルがあなたの「合鍵」です。
ステップ3:動作確認(Pythonによる認証)
GitHub Appsの認証には `PyJWT` を使ってアクセストークンを生成します。
import jwt
import time
import requests
1. GitHub Appの設定情報
app_id = ‘123456’ # GitHub AppのID
private_key = open(‘your-key.pem’, ‘r’).read()
2. JWT(JSON Web Token)を生成してGitHubに認証を要求
payload = {
‘iat’: int(time.time()),
‘exp’: int(time.time()) + 600,
‘iss’: app_id
}
encoded_jwt = jwt.encode(payload, private_key, algorithm=’RS256′)
3. アプリケーション用トークンの取得
headers = {‘Authorization’: f’Bearer {encoded_jwt}’, ‘Accept’: ‘application/vnd.github.v3+json’}
response = requests.post(f’https://api.github.com/app/installations/
token = response.json()[‘token’]
print(f”安全な一時トークンを取得しました: {token}”)
—
3. 現場で震えるほど役立つ「権限管理の極意」
実務で導入する際、以下の3点を徹底するだけで、あなたのチームのセキュリティレベルは劇的に向上します。
1. スコープを絞り込む癖をつける:
「とりあえず `repo` スコープ全部」は禁止です。GitHub Appsなら「Metadata」「Pull Requests」「Issues」など、必要なものだけを選択可能です。
2. 組織全体への導入は「Installations」を使う:
GitHub Appsは、組織(Organization)の管理者がインストールを許可することで、特定のリポジトリへのアクセス権を制御できます。これにより、開発者が勝手に個人トークンをスクリプトに埋め込むという「シャドーIT」を防げます。
3. トークンを環境変数で管理する:
コードにハードコードしてGitHubにプッシュする事故は、今日で卒業しましょう。`.env` ファイルを使い、`.gitignore` で確実に除外してください。
—
結論:プロの道を選択しよう
「OAuth Apps」は、個人のツールや、ユーザー認証を伴うWebサービス(GitHubでログイン機能など)を作る場合には依然として必要です。しかし、CI/CDパイプラインや自動化Botを組むのであれば、迷わず「GitHub Apps」を選んでください。
最初は少し設定が面倒に感じるかもしれません。しかし、その手間は「将来のセキュリティ事故」を防ぐための最良の投資です。
これをマスターすれば、あなたは単なる「ツールを使う人」から「堅牢なシステムを設計できるエンジニア」へと一歩近づくはずです。まずは一つ、小さな自動化BotをGitHub Appsで作ってみることから始めてみてください。応援していますよ!