ウェブサイト検索

署名付きコミットとタグでGitリポジトリを保護する方法


Gitリポジトリは貴重なソースコードを保存し、機密データで動作するアプリケーションを構築するために使用されます。

Gitリポジトリは貴重なソースコードを保存し、機密データを扱うアプリケーションを構築するために使用されます。もし攻撃者が脆弱なリポジトリを持つGitHubアカウントを侵害できた場合、悪意のあるコミットを直接本番環境にプッシュすることができてしまいます。署名付きコミットは、そのようなことが起こらないようにするのに役立ちます。

署名されたコミットとは何ですか?

署名付きコミットは、通常GPGを使用してプライベート暗号鍵でコミットにデジタル署名を追加することを含みますが、SSHやX.509もサポートされています。作成後は、署名鍵をGitHubプロファイルとローカルのGitクライアントの両方に追加する必要があります。

署名されたコミットは、コミットが改ざんされていないことを確実にし、さらに重要なことに、GPGキーを所有し、GitHubアカウントにアクセスする権限を持つ信頼できるソースからのものであることを保証することにより、追加のセキュリティ層を提供します。

署名付きコミットを許可するリポジトリにコミットをプッシュするには、攻撃者が被害者のプライベートGPGキーを侵害できなければなりません。これは通常、GitHubアカウントだけでなく、彼らのコンピュータ全体へのアクセスを得ることを意味します。このような攻撃ベクターはあまり一般的ではなく、難易度も高いため、署名付きコミットはコミットが彼らが主張する通りのものであるかを確認するための優れた方法です。

新しいGPGキーの設定

まず、署名に使用する新しいGPGキーを作成する必要があります。その後、GitクライアントとGitHubの両方にそのことを知らせる必要があります。

鍵を生成するには、あなたのシステムにgpgコマンドがインストールされている必要があります。通常はデフォルトで存在していますが、もしインストールされていない場合は、パッケージマネージャーから入手できます。それから、新しい鍵を生成できます:

gpg --full-generate-key

ほとんどのプロンプトではEnterキーを押すことができますが、パスフレーズを入力する必要があり、GitHubのメールアドレスも入力する必要があります。アドレスをプライベートにしたい場合は、GitHubアカウントの「no-reply」アドレスを使用できます。

次に、キーを一覧表示し、作成したキーIDの公開鍵ブロックをエクスポートします:

gpg --list-secret-keysgpg --armor --export [keyID]

次に、それをあなたのGitHubアカウントに追加します。ユーザー設定から「SSHとGPGキー」をクリックし、新しいGPGキーを追加します。また、ここで警戒モードをオンにすることもでき、これらのキーを使用していないGitHub上のコミットを未確認としてマークします。

名前を設定し、gpg --exportでエクスポートした公開鍵ブロックを貼り付けてください。

次は、ローカルのGitクライアントにあなたのキーについて教えます。GitKrakenのようなGUIのGitクライアントを使用している場合は、単純にインポートできるかもしれませんが、そうでなければ、コマンドラインから行う必要があります。

これはあなたのユーザーに結びついているため、グローバル設定として設定したいかもしれませんが、リポジトリレベルの設定も使用できます。user.signingkeyを、エクスポートに使用したGPGキーIDに設定してください。

git config --global user.signingkey [keyID]

次に、すべてのコミットをデフォルトで署名するようにGitに指示したいでしょう。これは、必要に応じて個別のリポジトリに設定できます:

git config --global commit.gpgsign true

さもなければ、-Sフラグを使って手動でコミットに署名することもできます。

ブランチ保護による署名付きコミットの強制

ブランチ保護ルールは、リポジトリ内の特定のブランチに対して制限やガイドラインを適用します。それらは特定のプルリクエストやマージワークフローを強制し、リリースブランチへのアクセスを制限するために一般的に使用されますが、署名されたコミットのみを受け入れるように設定することもできます。

署名付きコミットのみを受け入れることは、追加のセキュリティ層を提供し、すべての貢献者が自分のアカウントに関連付けられたGPGキーを持つことを強制します。

リポジトリ設定の「ブランチ」タブから新しいブランチ保護ルールを作成するのは簡単です。すべてのブランチを含めるためにフィルターを「*」に設定することをお勧めします。

次に「署名されたコミットを必要とする」を選択します。

今後、このリポジトリのすべてのブランチにプッシュされたすべてのコミットには、GPG署名が含まれている必要があります。

関連: GitHubのブランチ保護ルールを設定し維持する方法

関連記事: