0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Apps の認証フローについてまとめてみた(AWS Security Agentを例に)

0
Posted at

はじめに

GitHub App を使ったサービス連携を設定したことはありますか?

AWS Security Agent (現在は AWS Continuum の一部) 、GitHub Actions の一部、Slack 連携など、最近のサードパーティサービスは GitHub App を認証基盤に使っています。
どれも初回セットアップはGitHubの画面に遷移し「Install」をクリックしてリポジトリを選ぶだけ。

最初はあまり気にしてませんでしたが、お客様から「認証認可どうなってるの?」と聞かれたときに回答できませんでした。

この記事では、調査したGitHub App の認証フローを AWS Security Agent(GitHub リポジトリのコードレビューを実施するサービス)を題材に図解します。
JWT・Installation Access Token がどう組み合わさっているかを理解すれば、GitHub App を採用する他のサービスにも応用が利きます。

この記事は GitHub.com との連携を前提とし、 GitHub 側の認証フローに絞って説明しています。
また、GitHub App の標準仕様(一般論)AWS Security Agent 固有の話 を区別して書いています。
Security Agent の内部実装が非公開の部分は「GitHub App の仕様上こうなる」という推定であることを明示しています。

結論

いきなり結論ですが、GitHub App という GitHub 公式の連携メカニズムを使っています。
ユーザーが「Install」をクリックした瞬間に GitHub App が Organization/ユーザー にインストールされ、以降はすべて短命トークン(JWT → Installation Access Token)で API アクセスします。

初回セットアップ

① AWS コンソールから GitHub にリダイレクト

AWS マネジメントコンソールの 統合 → 統合を追加 → GitHub → 「GitHubでAWS SecurityAgentを開く」 をクリックすると、GitHub にリダイレクトされます。

image.png

② GitHub 側でインストール対象を選択

GitHub の画面で以下を選びます:

  • どの Organization(または個人アカウント)にインストールするか
  • どのリポジトリにアクセスを許可するか(All / Only select)

選択後、GitHub 側の 「Install」 をクリックするとインストールが実行されます。

image.png

③ AWS コンソールに戻って接続登録

GitHub から AWS コンソールにリダイレクトされ、登録名、アカウントタイプ等を入力して「接続」をクリックすれば完了です。

📎 出典: Connect AWS Security Agent to GitHub repositories

実行時の認証: 2段階トークンの仕組み

初回セットアップが終わった後、Security Agent がリポジトリにアクセスするたびに走る認証フロー(推定)です。

スクリーンショット 2026-06-18 102928.png

GitHub App の認証仕様上、Installation Access Token の取得には JWT 認証が必須です。
そのため AWS Security Agent の内部実装の詳細は非公開ですが、認証部分はこの流れに従うと考えられます。

図の各ステップを説明します。

JWT(JSON Web Token)は署名付きの JSON データ構造です。改ざん検知が可能なため、認証情報の受け渡しに広く使われています。
読み方は「ジョット」です。

# 図の位置 やっていること 補足
AWS → Security Agent 秘密鍵で JWT を生成 RS256 署名、寿命最大10分。GitHub App 作成時に生成された秘密鍵をサービス提供者(AWS)が保管し、JWT の署名に使う。公開鍵は GitHub 側に保管される
Security Agent → GitHub JWT を添えてアクセストークンをリクエスト POST /app/installations/{installation_id}/access_tokens を JWT の Bearer 認証で呼び出す
GitHub 側 JWT の検証 GitHub が公開鍵で署名を検証し、正規の App であることを確認
GitHub → Security Agent Installation Access Token を返却 寿命1時間。インストール時に選択したリポジトリへのアクセスのみ許可
Security Agent → GitHub アクセストークンで GitHub API を実行 PR の diff 取得、コメント投稿等

なぜ2段階なのか

JWT は「自分が正規の App である」という身分証明書で、Installation Access Token は「この Org のこのリポジトリにアクセスしていい」という入場許可証です。
役割が異なるため、GitHub App では JWT と Installation Access Token が明確に分離されています。

トークン 寿命 用途
JWT 最大10分 App 自身の証明。Installation Access Token の取得専用
Installation Access Token 1時間 リポジトリへの実際の操作(diff 取得、コメント投稿等)

PR コードレビューの自動トリガー

PR 作成時に自動でセキュリティレビューが走る仕組みについて説明します。

AWS 公式ドキュメントによると、コードレビューが有効なリポジトリで PR を Ready for review にすると、Security Agent が自動的に分析を開始します。
分析が始まると「AWS Security Agent is analyzing your code…」というコメントが投稿され、完了後にセキュリティ所見がまとめてレビューとして投稿されます。

GitHub App では通常 Webhook でイベントを受信しますが、AWS Security Agent が具体的にどの仕組み(Webhook / GitHub Event API 等)を使っているかは公開されていません。

コメントは aws-security-agent[bot] というボットアカウントから投稿されるため、操作主体が一目でわかります。

📎 出典: Review code security findings in pull requests

まとめ

「Install」の裏で動いている仕組みを振り返ります。

  1. 初回セットアップ: GitHub App を Org / 個人 にインストール
  2. JWT: 秘密鍵で署名した短命トークン(10分)で App 自身を証明
  3. Installation Access Token: JWT 認証を経て取得する1時間限定のリポジトリ操作トークン
  4. PR イベント受信: Ready for review をトリガーに自動レビューを起動

この方式の本質は 「短命・最小権限・ユーザー非依存」を同時に実現している ことです。
GitHub App の仕組みを理解しておけば、Security Agent に限らず、GitHub App を使う他のサービスの認証も同じフレームワークで説明できます。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?