web-dev-qa-db-ja.com

クラウドベースのCI / CDサーバーを安全に使用するにはどうすればよいですか?

クラウドベースの継続的デプロイサーバーを使用して、アプリケーションの本番コードをプッシュすることを検討しています。

これはクラウドベースのサーバーであるため、適切なファイルを本番サーバーにプッシュするためのアクセス権を持つ秘密のSSHキーを提供する必要があります。最小特権の原則を考えれば、このSSHキーは、少数のディレクトリへの書き込み特権を持つロックダウンされたユーザーへのログインを許可するはずです。次に、本番サーバーは、コードの変更を検出して新しいコードの実行を開始するupstartまたは他のタイプのスクリプトを使用できます。

私の脅威モデルが、SSHの秘密鍵が彼らの側から漏洩するというものだとしましょう。このリスクを完全に軽減することは可能ですか?可能な限りユーザーをロックダウンしても、最終的にはユーザーがプッシュするコードは、より大きな権限を持つWebサーバーユーザーによって実行されます。したがって、私が提供したSSHキーが漏洩すると、リモートでコードが実行される可能性があります。

クラウドベースのCI/CDサーバーをセットアップする際のベストプラクティスはありますか、それとも私がとらなければならないリスクだけですか?

3
Hetul Patel

使用できる緩和策の1つは、そのアップロードもIP制限することです。結局のところ、正当なアップロードの送信元はわかっています。これは、実際のサーバーを危険にさらさない手段(つまり、バックアップの損失、ディスクの複製、読み取り専用のエクスプロイトなど)を通じて、sshキーの損失を軽減します。

契約を使用すると、さらに軽減できます。契約は適切なセキュリティ対策に従い、データをバックアップする前に暗号化し、サーバーに定期的にパッチを適用します。

制御するシステムによってソースリポジトリプロジェクトに追加され、その変更がビルドのトリガーとなる、ある種の1回限りのトークンを想像できます。 Webサーバーは、有効なトークンがないか、以前に見たトークンがあるビルドを拒否する可能性があります。ただし、これは過剰な場合があり、はるかに複雑です。テストに合格した場合にCDが入るよりも、本番展開の前に手動ゲートがあるCIの方が適切である可能性があります。

1
crovers