一種のソーシャルプラットフォームを開発しています。限られた数のユーザー向けのクローズドベータ版として始まりますが、目標は数百万のサブスクリプションに到達することです。
現在、インフラストラクチャと、 DevOps。そのため、ソースコードのバージョン管理にGitLabを使用しています。
私たちはそれを作ったとしましょう、そして数年後にサービスは百万のユーザーを持っています。この段階でソースコードのバージョン管理にGitLabを使用することについてどう思いますか?あなたはそれを重大なセキュリティの脅威と見ていますか?考慮すべきいくつかの理由:
私はポイントが偏執的に聞こえることを知っています。ネットワークの目的は完全に合法的で倫理的ですが、この種のサービスはユーザーのプライバシーを保護する必要があると思います。後でプライベートサーバーに移動する予定ですが、なんとかして開始する必要があります。
では、プロジェクトの初期段階でプライベートGitLabまたはBitbucketリポジトリを使用することは問題ないと思いますか、それとも許容できないセキュリティの脅威ですか?
免責事項:私は、GitLabが説明されていることのすべてを行うとは主張していません。
残念ながら、脅威モデルが正当であるかどうかを確認するのはあなたです。したがって、プラットフォームの使用をセキュリティ上の脅威と見なすかどうかにかかわらず、明確な「イエス」を与えることはできません。
しかし、私が拡張したい2つのポイントがあります:
個人的には、セキュリティがオープンソースではないソースコードに依存しているユーザーにサービスを提供することに自信がありません。私にとって、これはあいまいさによるセキュリティのようなものです。最高の世界では、コードがリークした場合でも、プラットフォームを安定させる必要があります。したがって、私はあなたがいくつかのペンテスター/コードレビューア、または少なくとも非常にセキュリティを意識しているいくつかの開発者と提携することを強くお勧めします。
すぐにこれを行い、これで完了です。率直に聞こえるかもしれませんが、これがあなたが始めていることを考えると、これが複雑で費用のかかるステップであると思われるなら、私はあなたの技術的スキルに疑問を投げかけます。 Gitlabは自己ホスト型ソリューションも提供しています。プラットフォームを確認し、その部分が心配な場合はサーバーとの通信をブロックするようにしてください。
幸運を祈ります。
@Simonはすでにすばらしい回答を提供していますが、この点に対応して追加したいと思います。
gitlabのスタッフがソースを調査してセキュリティホールや機密性の高い構成を見つけることができないという実際の保証はありません
構成はリポジトリに属していません。 twelve の3番目の要素に従って、構成は展開前にではなく、コードと組み合わせる必要があります。
これを行うには、アプリケーションに実行時に環境から構成値を読み取らせます。たとえばDjangoの場合、秘密鍵を次のように定義する必要があります。
import os
SECRET_KEY = os.environ['Django_SECRET_KEY']
そして、systemd(またはプロジェクトを実行するもの)にその環境変数を設定させます。
以下のコメントで@Aveが指摘しているように、プロダクションのビルドステップとサーバーにのみプロダクションシークレットを保存します。 CIサーバー、ステージングサーバーなどに偽のシークレットまたはランダムなシークレットを設定します。問題がシークレットに関してリポジトリホストで信頼できる場合は、リポジトリホストのCDではなく、Chef、Spinnaker、Puppet、またはその他の任意のものを使用することを選択できます。
Gitlab(純粋なGitを含む)を除いて、複数のオプションがあります。 Gitlabはオープンソース/オープンコードプロジェクトであり、プライベートサーバーにインストールできるため、チーム以外の誰もアクセスできません。
これは、より顕著な問題を提起すると私は考えています。your staffセキュリティホールや機密性の高い構成を知っており、ソースコードを第三者や政府に販売する可能性があります。さらに、あなたのスタッフはデータにアクセスできます。これは、ソースコードよりもはるかに重要で機密性が高いです。これにどのように対処する予定ですか?
プライベートなgitlabインスタンスを使用しないのはなぜですか、これはあなたの懸念を軽減します!
プラットフォームが数百万のユーザーにリーチする場合、少なくとも月額$ 5のクラウドインスタンスを実行することができます。
しかし、あなたの懸念は、SaaS使用しているプラットフォームにプラットフォームへの最終的なアクセス権があることを示す従業員/管理者から来ています。これは、クラウドサービスプロバイダーや物理的な専用サーバープロバイダーにも当てはまります(ディスクが暗号化されていないと想定)。その場合は、オンプレミスサーバーを実行します。
この時点で、人々があなたのシステムにどれほど敏感であるか/その可能性が高いかを自問する必要があります