◾️はじめに
https://dk521123.hatenablog.com/entry/2025/02/02/161957
で、別レポジトリ(クロスレポジトリ)のアクセスについて考えたが 以下の本で「第17章 GitHub Appsトークンによるクロスリポジトリアクセス」 が書かれていたので、実際にやってみた内容などをまとめておく
目次
【1】Github Actionsで推奨されるクレデンシャル 1)GITHUB_TOKEN 2)デプロイキー (Deploy Key) 3)GitHub Apps トークン 【2】Github Actionsで非推奨されるクレデンシャル 1)Fine-grained personal access tokens 2)個人アカウントから作成したSSHキー 3)パーソナルアクセストークン (clasic) 【3】GitHub Appsの設定手順 1)GitHub Appsの作成 2)App ID取得およびトークン生成用の秘密鍵生成 3)GitHub Appsをインストール 4)Secrets にApp IDと秘密鍵を保存 5)実装する 【4】GitHub Apps トークンの運用 1)秘密鍵のキーローテーション
【1】Github Actionsで推奨されるクレデンシャル
* 以下の通り。(★がお勧めで、今回のテーマの一つ) 1)GITHUB_TOKEN 2)デプロイキー (Deploy Key) 3)GitHub Apps トークン ★
1)GITHUB_TOKEN
* 詳細は、以下の関連記事を参照のこと
Github Actions ~ GITHUB_TOKEN / permissions ~
https://dk521123.hatenablog.com/entry/2024/04/22/221027
デメリット
* トークンの権限は、ワークフローを含むリポジトリに限定されるため
2)デプロイキー (Deploy Key)
* 特定リポジトリ専用のSSHキー
デメリット
* Git によるコードの読み書きしかできないため GitHub APIの実行ができない * アクセス可能なリポジトリは1つのみ
3)GitHub Apps トークン
* 利用時に都度発行される
メリット
* 有効期限が短いため、セキュア
構造
+-------- GitHub Apps ----------+ 生成 +--------------------------+ | 秘密鍵(長命。事前に準備が必要)] | -----> | GitHub Apps Token(短命) | +-------------------------------+ +--------------------------+
【2】Github Actionsで非推奨されるクレデンシャル
以下1)〜3)いずれも その個人がプロジェクトから離脱した時のことを考えると 本番運用には適していない
1)Fine-grained personal access tokens
cf. Fine-grained(ファイングレイン) = きめの細かい, 微粒子の
理由
* 有効期限が存在し、長期運用には不向き
2)個人アカウントから作成したSSHキー
理由
* リポジトリ単位のアクセス制御ができない(Organization関係なく全てにアクセスできる)
3)パーソナルアクセストークン (clasic)
理由
* アクセス制御が大雑把にしかできない
【3】GitHub Appsの設定手順
* 以下のサイトを参考にするのが良さそう
https://zenn.dev/suzutan/articles/how-to-use-github-apps-token-in-github-actions
1)GitHub Appsの作成
[1] GitHub Apps 作成ページに移動
* 以下のサイトに移動
https://github.com/settings/apps/new
[2] GitHub Apps 作成ページに移動
* 以下を入力し、「Create GitHub App」ボタン押下 * GitHub App name:任意の文字列(e.g. HelloWorldGoGo) * Write: 任意の文字列(e.g. Hello world) * Homepage URL: (e.g. https://dk521123.hatenablog.com) --- * Webhook + Active : チェック外す --- * Repository permissions(リポジトリレベルのパーミッション) + Contents: Read-only ... 別リポジトリのソースコードが取得可能になる --- * Account permissions(個人アカウントレベルのパーミッション) * Organization permissions(Organizationレベルのパーミッション) => 今回特に何も触らない --- * Where can this GitHub App be installed? + Only on this account にチェック
2)App ID取得およびトークン生成用の秘密鍵生成
* 「1)GitHub Appsの作成」の続きとして、、、
[1] App IDをコピーしておく
* App ID: 1XXXXXX
* 下スクロールして、「Private keys」欄の「Generate a private key」ボタン押下 => 秘密鍵のファイル(<AppName>.YYYY-MM-DD.private-key.pem)がダウンロードされる
3)GitHub Appsをインストール
[1] GitHub Apps設定の左メニュー[Install App]を選択 [2] 「Install」ボタン押下し、インストールする [3] [Only select repositories]を選択 [4] 「Select repositories」プルダウンを選択し、 使いたいリポジトリを選択(複数選択可能) [5] 「Install」ボタン押下
4)Secrets にApp IDと秘密鍵を保存
Case1:Web UIから設定する場合 Case2:ghコマンドから設定する場合
GitHub CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/02/17/233836
Case1:Web UIから設定する場合
[1] 使用したいリポジトリに移動 [2] [Settings]-[Secrets and variables]を選択 [3] 「Secrets」タブを選択し「Merge environment secrets」ボタン押下 [4] 「New environment」ボタン押下 [5] 「Name」欄に任意の文字列(e.g. Sample)を入力し「Configure environment」ボタン押下 [6] 下スクロールで「Environment secrets」欄までいき、「Add secrets environment」ボタン押下 あとは必要なシークレットを登録する APP_ID:1XXXXXX PRIVATE_KEY:<秘密鍵ファイルの内容>
Case2:ghコマンドから設定する場合
# gh secret set 【シークレット名】 --body "【内容】" gh secret set APP_ID --body "1XXXXXX" # gh secret set 【シークレット名】<< "【ファイルパス】" gh secret set PRIVATE_KEY << "【ファイルパス】"
5)実装する
on: push jobs: hello-world: runs-on: ubuntu-latest steps: - uses: actions/create-github-app-token@v1 id: app-token with: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.PRIVATE_KEY }} owner: another-owner - uses: actions/checkout@v4 id: clone-private-repo with: repository: your-org/yout-private-repo token: ${{ steps.app-token.outputs.token }} # ★出力結果★ path: your-tools
【4】GitHub Apps トークンの運用
1)秘密鍵のキーローテーション
* 目安は1年 * 複数登録可能なので、問題なければ、切り替える運用でOKそう * 公式ドキュメントの以下の記述も参考
https://docs.github.com/ja/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps
https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app#private-keys
関連記事
Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ GITHUB_TOKEN / permissions ~
https://dk521123.hatenablog.com/entry/2024/04/22/221027
Github Actions ~ Self-hosted runners / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/12/18/204119
Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736
Github Actions ~ セキュリティ/Third-Party Github Action ~
https://dk521123.hatenablog.com/entry/2024/04/05/000136
Github Actions ~ セキュリティ/インジェクション攻撃 ~
https://dk521123.hatenablog.com/entry/2024/04/16/222419
Github Actions ~ deprecationによるエラー防止を考える ~
https://dk521123.hatenablog.com/entry/2025/02/01/214020
Github Actions ~ 別レポジトリをcloneすることを考える ~
https://dk521123.hatenablog.com/entry/2025/02/02/161957
Self-hosted runner下の Github actions が突然エラー
https://dk521123.hatenablog.com/entry/2024/07/05/000212
GitHub Apps ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/07/06/230610
GitHub CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/02/17/233836
状態を戻す際には ~ reset / revert etc ~
https://dk521123.hatenablog.com/entry/2020/07/12/103726
Gitで状態を戻す方法を考える
https://dk521123.hatenablog.com/entry/2020/07/11/182959