GitHub Apps の秘密キーについて
GitHub App を作成した後、アプリケーション自体として GitHub Enterprise Cloud API に要求を行うために、秘密キーを生成する必要があります。 たとえば、インストール アクセス トークンを要求するには、JSON Web Token (JWT) に署名するための秘密キーが必要です。 詳細については、「GitHub アプリの JSON Web トークン (JWT) の生成」を参照してください
鍵が危殆化したり、鍵を紛失した場合にダウンタイムを回避するため、複数の秘密鍵を作成してローテーションすることができます。 秘密キーが公開キーと一致することを確認するには、「秘密キーを検証する」を参照してください。
GitHub Apps の秘密キーは、安全に保管する必要があります。 詳細については「秘密キーの格納」を参照してください。
秘密キーの生成
秘密鍵を生成するには、以下の手順に従います。
- アカウント設定にアクセスしてください。
- 個人アカウントが所有する GitHub App の場合、任意のページの右上でプロファイル写真をクリックしてから、 [設定] をクリックします。
- 組織が所有する GitHub App の場合、任意のページの右上でプロファイル写真をクリックしてから、 Your organizations をクリックします。 次に、組織の右側にある [設定] をクリックします。
- 左側のサイドバーで [ 開発者設定] をクリックします。
- 左側のサイドバーで、 [GitHub App] をクリックします。
- 秘密キーを生成する GitHub App の横にある [編集] をクリックします。
- [秘密キー] で、 [秘密キーの生成] をクリックします。
- お手元のコンピュータにダウンロードされた PEM フォーマットの秘密鍵が表示されます。 このファイルは必ず保存してください。GitHub では公開鍵の部分しか保存しません。 キーを安全に格納する方法の詳細については、「秘密キーの格納」を参照してください。
注: 特定のファイル形式を必要とするライブラリを使用している場合、ダウンロードする PEM ファイルは PKCS#1 RSAPrivateKey
形式になります。
秘密鍵を検証する
GitHub Enterprise Cloud は、SHA-256 ハッシュ関数を使用して、秘密キーと公開キーのペアごとにフィンガープリントを生成します。 秘密鍵のフィンガープリントを生成し、GitHub Enterprise Cloud で表示されているフィンガープリントと比較することにより、秘密鍵が GitHub Enterprise Cloud に保存宇されている公開鍵と適合することを検証できます。
秘密鍵を検証するには、以下の手順に従います。
-
GitHub App の開発者設定ページにある [Private keys] セクションで、検証する秘密鍵と公開鍵のペアを見つけます。 詳細については、「秘密キーの生成」を参照してください。
-
次のコマンドを使用して、秘密鍵 (PEM) のフィンガープリントをローカルで生成します。
$ openssl rsa -in PATH_TO_PEM_FILE -pubout -outform DER | openssl sha256 -binary | openssl base64
-
ローカルで生成されたフィンガープリントの結果と、GitHub Enterprise Cloud に表示されているフィンガープリントを比較します。
秘密鍵を削除する
紛失または侵害されたした秘密キーは、削除によって排除することができますが、既存のキーを削除する前に新しいキーを再生成する必要があります。
- アカウント設定にアクセスしてください。
- 個人アカウントが所有する GitHub App の場合、任意のページの右上でプロファイル写真をクリックしてから、 [設定] をクリックします。
- 組織が所有する GitHub App の場合、任意のページの右上でプロファイル写真をクリックしてから、 Your organizations をクリックします。 次に、組織の右側にある [設定] をクリックします。
- 左側のサイドバーで [ 開発者設定] をクリックします。
- 左側のサイドバーで、 [GitHub App] をクリックします。
- 秘密キーを削除する GitHub App の横にある [編集] をクリックします。
- [秘密キー] の下にある、削除する秘密キーの右側にある [削除] をクリックします。
- ダイアログが表示されたら、 [削除] をクリックして秘密キーを削除することを確認します。 お使いの GitHub App にキーが 1 つしかない場合は、以前のキーを消去する前に新しいキーを生成する必要があります。 詳細については、「秘密キーの生成」を参照してください。
秘密キーの格納
秘密キーは、GitHub App にとって最も重要な唯一のシークレットです。 Azure Key Vault のようなキー コンテナーにキーを格納し、署名専用にすることを検討します。 これにより、秘密キーを紛失することがないようにします。 秘密キーはキー コンテナーにアップロードされると、そこから読み取ることはできなくなります。 秘密キーは署名にのみ使用でき、秘密キーへのアクセスはインフラストラクチャのルールによって決定されます。
または、キーを環境変数として格納することもできます。 これは、キー コンテナーにキーを格納するほど強力ではありません。 攻撃者が環境へのアクセス権を獲得した場合、秘密キーを読み取り GitHub App として永続的な認証を受けることができます。
コードがプライベート リポジトリに格納されている場合でも、アプリに秘密キーをハードコーディングしないでください。
詳しくは、「Best practices for creating a GitHub App」を参照してください。