MongoDBサーバーのセキュリティ保護/強化の経験はありますか?チェックリストやガイドを歓迎します。
NoSQLデータベースは比較的新しい(おそらく古い概念ですが)ので、特定のMongoDB強化ガイドや、私が見ている通常の場所( CISSecurity 、ベンダーの出版物、Sansなどすべてが不足しています)を見たことがありません。組織、単数学生、infosecコミュニティがプロジェクトを作成して維持することは、良いプロジェクトになると示唆しています。
Mongodb.orgにはいくつかの基本的な情報があります。ここでのすべての手順は、セキュリティの有効化を含めて実行する必要があります。サイト自体は、MongoDBには非常に基本的なレベルのセキュリティしかないと述べています。 http://www.mongodb.org/display/DOCS/Security+and+Authentication
MongoDBやその他のNoSQLデータベースも、成熟したSQLデータベースよりも機能が非常に少ない(特にセキュリティ)ため、きめ細かい権限やデータ暗号化を見つけることはほとんどありません。ユーザー名をシードとしてパスワードハッシュにMD5を使用します。バージョン1.9.1より前のシャーディングでは認証を使用できないなどの制限もあります。そのため、常にリスク評価を実行し、脅威モデルを構築してセキュリティニーズと直面する脅威を解決することをお勧めします。この出力に基づいて、MongoDBまたはNoSQLデータベースは一般にニーズに適さない場合があります。または、その利点を最大化し、弱点を最小化する別の方法で使用する必要がある場合があります(たとえば、最も機密性の高い情報ではなく、データの抽出の場合)。または、Webアプリケーションに直接接続するのではなく、ネットワークコントロールの多数のレイヤーの背後にあります)。
とはいえ、セキュリティの原則はテクノロジーにとらわれないものであると私は固く信じています。最新の攻撃、およびdatalossdb.orgの優れたリストでさえ分析すると、デフォルトのパスワードと不足しているパッチに関連している数が驚くべきものになります。多層防御を使用する場合、以下の慣行は、おそらく軍事的でない可能性が高いほとんどの資産(個人、商業など)を保護するのに十分なセキュリティを備えている必要があります。
データベース強化の原則:
MongoDBのセキュリティのチェックリストは次のとおりです
認証を有効にする– Mongodbサーバーを信頼できるネットワークに展開している場合でも、認証を有効にすることをお勧めします。ネットワークが侵害された場合に、「多層防御」を提供します。 mongod設定ファイルを編集して認証を有効にします
本番データベースをインターネットに公開しないでください。データベースへの物理アクセスを制限することは、セキュリティの重要な側面です。必要がない場合は、本番データベースをインターネットに公開しないでください。攻撃者がMongoDBサーバーに物理的に接続できない場合に何らかの妥協があった場合でも、データははるかに安全です。 AWSを使用している場合は、データベースをVPCプライベートサブネットに配置できます。詳細については、ブログ投稿「VPCでのMongoDBのデプロイ」をご覧ください。
ファイアウォールを使用する–ファイアウォールを使用して、mongodbサーバーへの接続を許可する他のエンティティを制限します。ベストプラクティスは、アプリケーションサーバーのみがデータベースにアクセスできるようにすることです。 AWSでホストされている場合は、「セキュリティグループ」を使用してアクセスを制限します。ファイアウォール構造をサポートしていないプロバイダーでホストされている場合は、「iptables」を使用して簡単に自分で構成できます。シナリオに合わせてiptablesを構成するには、mongodbのドキュメントを参照してください。
キーファイルを使用してレプリカセットをセットアップする–レプリカセット内のmongodbインスタンス間の通信を可能にする共有キーファイルを指定します。これを有効にするには、以下のように設定ファイルにkeyfileパラメータを追加します。ファイルの内容は、すべてのマシンで同じである必要があります。
HTTPステータスインターフェースを無効にするMongodbはデフォルトで、「ホーム」ステータスページを提供するポート28017でデフォルトで実行されるhttpインターフェースを提供します。このインターフェースは本番環境での使用は推奨されておらず、無効にするのが最適です。 「nohttpinterface」構成設定を使用して、httpインターフェースを無効にします。
RESTインターフェースを無効にします。monogdbRESTインターフェースは、本番環境ではお勧めしません。認証はサポートされていません。デフォルトではオフになっています。 「rest」構成オプションを使用する場合は、本番システムではオフにする必要があります。
Bind_ipの構成システムに複数のネットワークインターフェイスがある場合は、「bind_ip」オプションを使用して、mongodbサーバーが関連するインターフェイスでのみリッスンするように制限できます。デフォルトでは、mongodbはすべてのインターフェースにバインドします
SSLを有効にする– SSLを使用しない場合、データは暗号化されずにMongoクライアントとMongoサーバーの間を移動し、盗聴、改ざん、および「中間者攻撃」の影響を受けやすくなります。これは、インターネットなどの安全でないネットワークを介してMongodbサーバーに接続している場合に特に重要です。
ロールベースの承認– MongoDBはロールベースの認証をサポートしており、各ユーザーが実行できるアクションをきめ細かく制御できます。すべてのユーザーを管理者にする代わりに、役割ベースの構成を使用してアクセスを制限します。詳細については、役割のドキュメントを参照してください。
エンタープライズmongodbとKerberosエンタープライズmongodbは、認証のためにKerberosと統合します。詳細については、mongodbのドキュメントを参照してください。ユーザー名/パスワードシステムは本質的に安全ではありません。可能であれば、縁石ベースの認証を使用してください。
https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/
免責事項:私はscalegrid.ioの創設者です
さらに、他のコメントが示しているように、保存しているmongodbデータも暗号化することをお勧めします。 LUKS(Linux統合キーセットアップ)を使用して、ボリュームレベルの暗号化をセットアップできます。
最初に覚えておくべきことは次のとおりです。
実際には、すべてのDataStorageサービスに適用できます
PS:mongodbの非常に限られた経験