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