Skip to main content
ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2022-06-03. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

ビルドシステムの保護のベストプラクティス

サプライチェーンの終端である、成果物のビルドと配布に使うシステムの保護の方法に関するガイダンス。

このガイドについて

このガイドは、ビルドシステムのセキュリティを高めることができる、もっと影響の大きい変更について説明します。 各セクションは、セキュリティを改善するためにプロセスに加えることができる変更の概要を説明します。 影響の大きい変更から最初にリストされています。

リスクとは何か?

ソフトウェアサプライチェーンに対する攻撃の中には、ビルドシステムを直接ターゲットとするものもあります。 攻撃者がビルドプロセスを変更できれば、個人アカウントやコードを侵害する労力なしに、システムを悪用できます。 個人アカウントやコードとともに、ビルドシステムを保護することを忘れないようにすることが重要です。

ビルドシステムの保護

ビルドシステムが持つべきセキュリティの機能がいくつかあります。

  1. ビルドステップは明確で再現可能でなければなりません。

  2. ビルドプロセス中に何が実行されているかを正確に知っていなければなりません。

  3. 侵害されたビルドが将来のビルドに影響し続けることがないよう、各ビルドは新しい環境で開始されなければなりません。

GitHub Actionsは、これらの機能を満たすのに役立ちます。 ビルドの手順は、コードとともにリポジトリに保存されます。 ビルドが実行される環境は、Windows、Mac、Linux、自分でホストするランナーを含め、選択できます。 各ビルドは新しい仮想環境で開始され、攻撃がビルド環境に留まり続けるのを難しくします。

セキュリティ上の利点に加えて、GitHub Actionsはビルドを手動、定期的、リポジトリでのgitイベントでトリガーし、頻繁に高速なビルドを行えます。

GitHub Actionsは大きなトピックですが、「GitHubホストランナー」及び「ワークフローのトリガー」と合わせて「GitHub Actionsを理解する」がよい出発点になります。

ビルドへの署名

ビルドプロセスが保護されたら、ビルドプロセスの最終結果が誰かに改ざんされないようにします。 そのための素晴らしい方法が、ビルドへの署名です。 ソフトウェアを公に配布する場合、しばしば公開/秘密暗号鍵のペアとともに行われます。 秘密鍵を使ってビルドに署名し、公開鍵を公開してソフトウェアのユーザが利用までにビルドの署名を検証できるようにします。 もしもビルドのバイトが変更されていた場合、署名は検証されません。

ビルドにどの程度正確に署名するかは、書いているコードの種類や、ユーザがどういった人たちかによります。 秘密鍵を安全に保管する方法を知るのは、多くの場合困難です。 ここでの基本的な選択肢の1つはGitHub Actionsの暗号化されたシークレットを使うことですが、それらのGitHub Actionsワークフローにアクセスできる人を慎重に制限しなければなりません。 秘密鍵にアクセスできるのがプライベートネットワークからのみなのであれば、他の選択肢はGitHub Actionsのセルフホストランナーを使うことです。

詳しい情報については「暗号化されたシークレット」、「セルフホストランナーについて」を参照してください。

GitHub Actionsのセキュリティ強化

GitHub Actionsをさらに保護するために行えるステップがもっとたくさんあります。 特に、サードパーティのワークフローを評価する際には注意し、自分のワークフローを変更できる人はCODEOWNERSを使って制限することを検討してください。

詳しい情報については「GitHub Actionsのセキュリティ強化」、特に「サードパーティアクションの利用」及び「変更をモニタリングするためのCODEOWNERSの利用」を参照してください。

次のステップ