LoginSignup
1
0

Bitrise向けのGitHub Personal Access Tokensを駆逐する

Last updated at Posted at 2023-12-03

はじめに

株式会社ゆめみ Advent Calendar 2023の4日目の記事です

BitriseとGitHubの連携における課題

BitriseをCI環境で利用する際、Dangerを実行するためにGitHubのPersonal Access Tokensを使用していました。
GitHub Actionsの様に、GITHUB_TOKENは利用できないためです

GitHub Personal Access Tokensの使用に伴う懸念点

管理ユーザのPersonal Access Tokensを使用していたため権限が強く
流出した時のセキュリティリスクが高い問題があり、社内でメンバー(@s6n)からプロリク1が出されました

pr.png

GitHub Appsの導入

GitHub Appsの設定手順

他でも解説記事があるので見たい人だけ
  1. GitHubの「Developer settings」の「New GitHub Apps」から作成する

    • 直接Organizationに作成する権限がある場合
      1. https://github.com/organizations/ORGS/settings/apps から
    • 権限がない場合は、Developer settingsで作成
      Developer settings
  2. GitHub Appsの設定

    • GitHub App name: 必須です、公開されます。アプリケーションのpublicなURLにもなります
      https://github.com/apps/yumemi-pat-expulsion
    • 説明: 必須です、公開されます
    • Homepage URL: 必須です、公開されます
      Register new GitHub Apps
    • Callback URL: Danger用途では不要
    • Expire user authorization tokens: チェックをつけるとrefresh_tokenができるようになりますDanger用途では不要
    • Request user authorization (OAuth) during installation: OAuthを使わないので、Danger用途では不要
    • Enable Device Flow: デバイス認証を組み込みます、Danger用途では不要
    • Webhook: Danger用途では不要なので、チェックを外します
    • Permissions
      • Repository permissions
        • Commit statuses, Issues, Pull requests: Read and write
    • Where can this GitHub App be installed?: 他のユーザやORGSへインストールしても使えないので、Only on this accountを 🔘
      Where can this GitHub App be installed?
  3. private keyの作成

    • 上部のリンクかPrivate keysからprivate keyを作成すると、自動でprivate keyがDLされます
      Private keys annotation
      Private keys
  4. 移行

    • 直接Organizationに作成していない場合、アプリケーションをAdvancedからTransferします
      Advanced
    • ORGSの管理者に移行の確認と、対象アプリのApp managersに入れてもらう事で権限をつける依頼をします
      Developer SettingsのGitHub Appsから編集できます
  5. インストール

    • ORGSにアプリケーションをインストールし、対象のリポジトリを選択します

GitHub Appsへの移行

GitHub Appsを呼び出すStepはBitriseに用意されていないので
scriptsで書いてもよかったのですが、対象のリポジトリが多いためStepを作成しました

private keyとApp IDを使って、GitHub Appsへtokenの発行リクエストを行います

private keyを扱うため、ご利用は自己責任の範囲でお願いします

BitriseのAPIを使って、指定SlugのGENERIC FILE STORAGEからDLを行います
private keyを複数のリポジトリへ配置したくなかったので、作成しました

Personal Access Tokensを扱うため、ご利用は自己責任の範囲でお願いします

使い方

  1. step: github-app-tokenの呼び出し
    bitrise.ymlでDangerを呼び出す前に追記

    bitrise.yml
        steps:
        - git::https://github.com/yumemi-inc/bitrise-step-github-app-token@2.0.0:
            inputs:
            - github_app_id: {作成したGitHub AppsのApp ID}
        - ...
    
  2. private keyをBitriseに登録

    • Secretsを使う場合

      • GITHUB_APP_KEY: 作成したGitHub Appsのprivate keyを内容をそのまま貼り付ける
      • Dangerで使うのでExpose for Pull Requests?を ✅
        Secrets
    • GENERIC FILE STORAGEを使う場合
      1. 作成したGitHub Appsのprivate keyをGENERIC FILE STORAGEへ登録
      2. Generic File StorageでDL
        Generic File Storage
      3. bitrise-step-github-app-tokenの設定
        1. github_app_key_path: $GENERIC_FILE_STORAGE/{1.で登録したファイル名}
    • Bitriseで別slugのGENERIC FILE STORAGEを使う場合
      1. 作成したGitHub Appsのprivate keyを別slugのGENERIC FILE STORAGEへ登録
      2. download-bitrise-generic-fileを使います2
      bitrise.yml
          steps:
          - git::https://github.com/yumemi-inc/bitrise-step-download-bitrise-generic-file.git@0.0.2:
              inputs:
              - BITRISE_API_TOKEN: $BITRISE_API_TOKEN
              - BITRISE_APP_SLUG: {1.で登録した時のslug}
              - TARGET_BITRISE_FILE_KEY: {1.で登録したFile Storage ID}
              - OUTPUT_FILE_NAME: private-key.pem
      
  3. Dangerで使うTokenにGITHUB_APP_TOKENを指定する

    DANGER_GITHUB_API_TOKEN=$GITHUB_APP_TOKEN swift run danger-swift ci
    

参考

  1. ゆめみではプロリクを使って、運用ルールの変更など、様々な事がメンバーが自発的に行う事ができます

  2. BITRISE_API_TOKENにはBitriseのPersonal Access Tokensを発行してください

1
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
1
0