GitHub・GitLabのソースコードを守る:ゼロトラスト開発環境と固定IPの活用
ソースコードは、ソフトウェア企業の最重要資産です。 プロダクト企業の場合は、競争優位性の源泉です。 クライアント企業の場合は、顧客に提供する価値の源泉です。 このソースコードへのアクセスが無防備では、企業の存続さえも危険にさらされます。
GitHub SECURITYとGitLab IP制限は、開発者であれば誰もが聞いたことのあるプラットフォームです。 しかし多くの企業では、これらのプラットフォームへのアクセス制御が十分でないまま運用されています。 本記事では、ソースコード アクセス制御を強化し、開発環境 ゼロトラストを実現するための方策について解説します。
⇒【ロリポップ!固定IPアクセス】 月額490円、すぐに使えて最大2ヶ月間無料!
ソースコード漏洩のリスク
GitHub セキュリティが重要な理由を、まず理解しておきましょう。
ソースコード漏洩の直接的な損害
ソースコードが漏洩すれば、競争他社はそのコードを分析し、製品開発を高速化することができます。 あるいは、セキュリティ脆弱性を発見し、攻撃に利用することもできます。 さらに、メモリリークやバッファオーバーフロー、あるいはハードコードされたAPIキーといった脆弱性を含むコードが流出すれば、攻撃者の絶好のターゲットになります。
人的セキュリティインシデント
退職者がコードへのアクセス権を保持したまま、企業を去るケースがあります。 その後、元従業員が競争相手に転職し、かつてのコードを利用して競争製品を開発するといったシナリオも考えられます。
内部脅威
不正な従業員が、個人的な利得のためにコードを外部に売却するリスクもあります。 あるいは、ランサムウェア攻撃の一環として、GitHubからコードを盗んで身代金を要求する攻撃者も存在します。
外部攻撃者によるアカウント奪取
開発者のアカウントが弱いパスワード、多要素認証なしの状態であれば、ブルートフォース攻撃やフィッシング攻撃によるアカウント奪取が可能です。 その後、攻撃者が自由にリポジトリにアクセスできるようになります。
⇒【ロリポップ!固定IPアクセス】月額490円、すぐに使えて最大2ヶ月間無料!
ゼロトラスト開発環境の構築
開発環境 ゼロトラストとは、GitHubやGitLabへのアクセスについて、「本当にこの開発者か」「このアクセスは正当か」を常に検証し続けるというアプローチです。
認証の強化
GitHub SECURITYの第一層は、ユーザー認証です。 パスワード認証だけでなく、多要素認証(MFA)をすべての開発者に必須化します。
特に重要なのは、リポジトリへの書き込み権(push権)を持つ開発者には、より強力な認証を要求することです。 例えば、セキュリティキー(YubikeyなどのFIDO2対応デバイス)による生体認証認証を必須にするといったアプローチが考えられます。
SSO(シングルサインオン)の導入
GitHubをSaaSとして利用している場合、企業のSSOシステムとの連携が有効です。 Azure AD、Okta、あるいはGoogle Workspaceといった企業のアイデンティティプロバイダーとGitHubを連携させることで、企業のセキュリティ方針をGitHubに適用できます。
IPアドレス制限の活用
GitLab IP制限は、オンプレミス環境だけでなく、SaaS版でも利用可能です。 GitHub SECURITYを高めるため、特に重要なリポジトリへのアクセスを、特定のIPアドレスからのみに限定することが有効です。
開発者ロール別のアクセス制御
ソースコード アクセス制御は、開発者の職務に応じて段階的に設計すべきです。
シニア開発者・アーキテクト
システムアーキテクチャを設計する立場の開発者は、複数のリポジトリへの広范なアクセスが必要です。 しかし、本来関係のないプロジェクトのコードまで閲覧する権限は不要です。 「プロジェクト単位での権限分離」が重要です。
一般開発者
通常の開発者は、自分が関わるプロジェクトのリポジトリへのアクセスのみが必要です。 他部門のプロジェクトコードを読む必要がないはずです。
新入社員・インターン
新入社員やインターンシップ学生に対しては、さらに限定的なアクセスが適切です。 読み取り専用(pull権)のみ、あるいは特定のブランチへのアクセスのみといった制限が考えられます。
退職者・異動者
部門異動や退職の際は、速やかにアクセス権を削除する必要があります。 これを自動化するため、人事管理システムとGitHubを連携させ、異動日に自動的にアクセス権が削除される仕組みが望ましいです。
固定IP によるIP制限の実装
GitHub SECURITYとGitLab IP制限を具体的に実装する手順を説明します。
ステップ1:開発環境のネットワーク構成把握
開発者がどこからアクセスするか整理します。 本社オフィス、リモート環境、あるいは子会社のオフィスなど、複数の拠点があるかもしれません。
ステップ2:固定IP の割り当て
各アクセス拠点ごとに固定IPアドレスを確保します。 本社開発部門は固定IP A、サテライトオフィスは固定IP B、といった具合です。
ステップ3:GitHubのIP許可リスト設定
GitHubのエンタープライズ版では、IPアドレスの許可リスト機能があります。 これを活用して、許可されたIP以外からのアクセスを自動的にブロックします。
ステップ4:VPN経由アクセスの統一
リモートワークやテレワークの開発者に対しては、VPN経由でのアクセスを義務付けます。 VPN経由でアクセスすれば、開発者の物理的な場所がどこであれ、企業の固定IPでGitHubにアクセスできます。
⇒【ロリポップ!固定IPアクセス】月額490円、すぐに使えて最大2ヶ月間無料!
ソースコード保護のベストプラクティス
GitHub SECURITYを強化するための実践的なポイントをまとめます。
リポジトリ保護ルールの設定
GitHubの「branch protection rule」機能を活用し、以下のルールを設定すべきです。
- mainブランチへの直接pushを禁止し、プルリクエストとコードレビューを必須にする
- プルリクエストには複数の承認者による確認を要求する
- CI/CDパイプラインが成功しない限り、マージを禁止する
これにより、不正なコードの混入を防ぐことができます。
シークレット管理
ソースコード内に、APIキー、データベースパスワード、あるいはAWSアクセスキーなどのシークレット情報を埋め込むべきではありません。 GitHubは自動的にシークレット情報を検出する機能を持っているため、これを有効化して、意図しないシークレット情報のコミットを防ぐべきです。
監査ログの記録と監視
誰がいつ、どのリポジトリを、どのような操作を行ったかを記録します。 特に、機密リポジトリへのアクセスや、権限変更に関するログは定期的に確認すべきです。
セキュリティパッチの迅速な適用
GitHubは定期的にセキュリティアップデートをリリースします。 これを迅速に適用することが重要です。
依存関係の脆弱性チェック
プロジェクトが外部ライブラリに依存している場合、これらのライブラリに既知の脆弱性がないか定期的にチェックする必要があります。 GitHubのDependabotやDependency Graphといった機能を活用することで、自動的に脆弱性を検知できます。
よくあるセキュリティ課題と対応策
開発環境 ゼロトラスト導入時に直面しやすい課題を紹介します。
課題1:レガシーシステムの対応
古い開発プロジェクトでは、GitLabやGitHubへの移行が完全でないかもしれません。 あるいは、SvnやMercurialといった別バージョン管理システムを使用しているかもしれません。 この場合は、段階的な移行計画を立て、セキュリティ要件を満たすまで、新しいプロジェクトはGitHubで運用し、既存プロジェクトは段階的に移行するといったアプローチが考えられます。
課題2:マイクロサービス時代のリポジトリ爆発
マイクロサービスアーキテクチャでは、サービスごとにリポジトリが分かれます。 数百のリポジトリを管理することになった場合、個別のアクセス制御が破綻しやすくなります。 この場合は、チーム単位でリポジトリをグループ化し、チーム単位でのアクセス権管理を行う方法が有効です。
課題3:外部開発パートナーとのコラボレーション
クライアント企業やフリーランスの開発者と共同でプロジェクトを進める場合、彼らのアクセス権をどう管理するかは課題です。 この場合は、パートナー用の限定的なリポジトリを用意し、そこだけをアクセス許可するといったアプローチが考えられます。
ロリポップ!固定IPアクセスで開発環境を守る
ソースコード アクセス制御は、企業の生存戦略に関わるほど重要な課題です。 GitHub SECURITYとGitLab IP制限を組み合わせることで、堅牢な開発環境を構築できます。
ロリポップ!固定IPアクセスは、GMOペパボ株式会社が提供する固定IPアドレス対応のVPNサービスです。 月額490円(税込539円)〜という国内最安級の価格で、VPN経由でどこからでも常に同じ固定IPアドレスを使ってインターネットにアクセスできます。 高速かつ安全なVPNプロトコル「WireGuard」を採用しており、オンライン申し込み後すぐに利用を開始できます。 最大2ヶ月間の無料お試し期間も用意されているため、まずは気軽に導入テストが可能です。 分散した開発チームであっても、VPN経由で固定IPを確保することで、ソースコード アクセス制御を統一的に実現できます。