sql >> データベース >  >> NoSQL >> MongoDB

MongoDBセキュリティのベストプラクティス

    データベースシステムの管理に関して、重要な側面の1つはデータベースのセキュリティです。データベースシステムのセキュリティの適切な基盤を構築できないと、データ侵害が発生し、サードパーティの侵入者が不正にアクセスする可能性があります。その結果、このようなイベントは、ブランドの評判の低下、違反に対する罰金や罰則、知的財産の侵害につながる可能性があり、さらには事業の閉鎖につながる可能性があります。

    最も人気のあるNoSQLデータベースであるMongoDBは、情報セキュリティの3つの柱である機密性、整合性、可用性の基盤を提供するために策定されたさまざまなツール、制御、および手段を提供します。データのセキュリティは、使いやすさとアクセス性が向上するため、ほとんどの場合、機密性レベルで危険にさらされます。

    保護する必要のあるデータの種類

    他のデータベースと同様に、MongoDBには2種類のデータが含まれます。

    1. 保存データ—これはファイルシステムディスクに保存されているデータです。
    2. 転送中のデータ—これには、データベースとアプリケーションの間など、ネットワークを介して移動するデータが含まれます。

    データベース内のデータを保護するには、セキュリティ対策で次のことに対処する必要があります。

    • データベースファイル内のデータ。
    • データベースに関連付けられているアプリケーション。
    • データベースへのアクセスに使用されるコンピューティングおよびネットワークインフラストラクチャ。
    • 物理データベースサーバーと基盤となるハードウェア。

    MongoDBセキュリティチェックリスト

    MongoDB実稼働デプロイメントをセットアップする前に、デプロイメントが安全であることを確認するために考慮すべき最低限のセキュリティ基準があります。次のMongoDBセキュリティチェックリストを確認してください

    1. アクセス制御を有効にして認証メカニズムを指定します 。データベースへのアクセスを許可する前に、ユーザーIDを確認することが不可欠です。この場合、MongoDBは2つのメカニズムをサポートします。最初のメカニズムは、MongoDBのデフォルトの認証メカニズムであるSalted Challenge Response Authentication Mechanism(SCRAM)です。提供された資格情報(ユーザー名とパスワード)を認証データベースと照合し、X.509証明書認証は、クライアント認証とレプリカセットメンバーおよびシャードクラスターの内部認証の両方に使用されます。

    2. 役割ベースのアクセス制御を確立する 。データベースにアクセスできるすべてのアプリケーションまたはユーザーは、ユーザー管理者によって作成された一意のIDを持っている必要があります。正確なアクセス権を持つ役割を定義し、操作を実行する必要があるユーザーに割り当てます。

    3. mongod、mongos、アプリケーション、MongoDB間の通信は暗号化する必要があります 。暗号化はTLS/SSL構成によって実現されます。

    4. データ保護 。保存データにWiredTigerストレージエンジンを使用している場合は、保存データの暗号化を使用してデータを暗号化できます。別のストレージエンジンを使用している場合は、ファイルシステム、物理、またはデバイスの暗号化を使用してデータを暗号化し、ファイルシステムのアクセス許可を追加します。さらに、サーバーからデータを渡す前に、クライアント側のフィールドレベルの暗号化を使用してドキュメント内のフィールドを暗号化できます。

    5. 安全な運用ネットワーク 。 MongoDBは、信頼できるクライアントのみがネットワークインターフェイスとポートにアクセスできるように、信頼できるネットワーク環境で実行する必要があります。これを実現するには、SSHルートへの直接アクセスを無効にし、MongoDBインスタンスへのインバウンドトラフィックとアウトバウンドトラフィックのセキュリティグループを使用してセットアップを構成します。

    6. システムアクティビティの監査 。データベースへのユーザーアクセスアクティビティを追跡することは非常に重要です。監査により、管理者は適切な管理を行い、適切なフォレンジック分析を行うことができます。 MongoDB Enterpriseなどの一部の監査機能は、認証イベントなどの特定のイベントにフィルターを提供して、分析する必要のあるデータを削減します。

    7. MongoDBの実行時に安全な構成オプションを有効にする 。 mapReduce、$ where、$functionなどのMongoDBでサポートされているJavaScriptコードの使用を制限することをお勧めします。 --noscriptingオプションを使用すると、これらのオプションを完全に無効にできます。マングースなどのモジュールを使用して入力フィールドを検証します。さらに、net.writeObjectCheckを使用して、mongodインスタンスによって保存されたすべてのドキュメントが有効なBSONであることを確認できます。

    8. 専用ユーザーでMongoDBを実行する 。複数のユーザーがアクセスできるオペレーティングシステムでMongoDBを実行することは価値がありません。安全のために、MongoDBは、データにアクセスするためのアクセス許可を持っているが、データの整合性を損なう可能性のある不要なアクセス許可を持っていない専用のシステムユーザーアカウントで実行する必要があります。

    避けるべきMongoDBのセキュリティ慣行が不十分

    最近、データベースハッキングのインシデント、特にMongoDBが増加しています。これは、MongoDBがセキュリティの懸念に対処するための基準を満たしていないためではなく、開発者がセキュリティのベストプラクティスに従わなかったためです。

    MongoDBはオープンソースのDBMSです。つまり、一部の開発者は他の開発者よりも詳細を知っている可能性があります。これは、次のいずれかの間違いに陥らない限り、データベースが外部からの侵入のリスクにさらされていることを常に意味するわけではありません。

    1. デフォルトのポートを使用する 。デフォルトのポート(27017および27018)を使用しても問題はありませんが、システムへのトラフィックの管理を担当するセキュリティグループを設定するのを忘れることがあります。ハッカーは、他のことを試みる前に、常にデフォルトのポートを使用してデータベースにアクセスしようとします。ポートオプションを使用して別のポートでMongoDBを実行できます。つまり、$ mongo –port 23456です。ただし、推奨される方法は、以下の行を希望のポート番号で編集して、/ etc/mongod.confファイルの構成を変更することです。

      net:
      	port:27017


      デフォルトでは、MongoDBは認証なしで実行されます。これは、本番環境に移行する新しいデプロイメントでしばしば問題になります。認証を有効にしないということは、誰でも簡単にデータベースにアクセスできることを意味します。 MongoDBデータベースと対話するには、常に役割ベースのアクセス許可を持つユーザーを作成してください。

    2. 不適切なユーザー資格情報の保存 。一部の開発者は、ユーザー名とパスワードのクレデンシャルをプロジェクトにハードコーディングします。それらを公開すると、誰でもアクセスできるため、データベースが脆弱になります。

    3. 既知のネットワークデバイスへのデータベースアクセスを制限できませんでした 。この場合、データベースへのアクセスを、ホワイトリストを介して既知のアプリケーションとロードバランサーのみに制限する必要があります。これにより、データベースの可用性が、セキュリティ上の脅威をもたらす可能性のある未知のネットワークに制限されます。

    4. SSLの使用を避ける 。 SSL認証は、信頼できる接続のみがデータベースに接続されるようにするために非常に重要です。

    5. パスワードローテーションにLDAPを使用できない 。 LDAPは、ユーザーの役割が変更されたとき、またはユーザーが会社を辞めたときに、変更がデータベースグループに自動的に適用されるように、ユーザーを企業ディレクトリに関連付けます。これにより、データへのアクセスが、再割り当てされた役割に制限されるか、会社を辞めた場合に完全に制限されます。

    ネットワークインフラストラクチャの強化

    多くの場合、セキュリティの脅威はネットワークの露出レベルから始まります。これは、ほとんどのハッカーにとって最も簡単にアクセスできる部分だからです。信頼できるホストのみがMongoDBにアクセスできるようにするだけでなく、ネットワークを強化することでセキュリティを強化できます。ネットワークの強化には、MongoDBに関して2つの手順が含まれます。

    1. ファイアウォール 。ファイアウォールは、MongoDBデータベースを外部からの侵入にさらす可能性のある信頼できないホストからの着信トラフィックを制限するために使用されます。 Windowsオペレーティングシステムの場合、netshコマンドラインインターフェイスはWindowsファイアウォールへのアクセスを提供します。 Linuxシステムでは、iptablesインターフェースが基盤となるnetfilterファイアウォールへのアクセスを提供します。ファイアウォールは信頼できないホストを除外し、信頼できる出力との接続を作成する以外に、信頼できるソースからのトラフィックのみがmongodとmongosに到達できるようにします。

    2. 仮想プライベートネットワーク(VPN) 。 VPNを使用すると、2つのネットワークが暗号化されたアクセスが制限された信頼できるネットワークを介してリンクできます。これは、証明書の検証と、厳密なレベルの認証とすべてのクライアントの識別を必要とする可能性のある暗号化プロトコルの選択を提供することによって行われます。 VPNは安全なトンネルを提供します。したがって、VPNを使用してMongoDBインスタンスに作成された接続は、改ざんや中間者攻撃を防ぐことができます。

    まとめ

    すべてのオープンソースデータベースと同様に、セキュリティはMongoDBインフラストラクチャの最優先事項である必要があります。 MongoDBデータベースをデフォルト設定でデプロイすることは、セキュリティ災害への明確な道です。したがって、MongoDB内のセキュリティがどのように機能するかを完全に理解し、すべてのベストプラクティスに従って最大限のセキュリティを確保することが重要です。最も重要なことは、認証などのユーザーアクティビティを監査することで、抜け穴を特定し、災害が発生する前の将来を計画するためのウィンドウを提供することです。

    ClusterControlのようなツールは、データベースのセキュリティから当て推量を取り除き、MongoDBの展開が常にそれぞれのセキュリティモデルに従うようにするのに役立ちます。 ClusterControlを使用すると、データベース、アクセス制御、および保存中および転送中のデータの暗号化を簡単に構成できます。まだダウンロードしていない場合は、今すぐClusterControlをダウンロードし、30日間の無料トライアルを開始して、ClusterControlがMongoDBデータベースのセキュリティの管理と改善にどのように役立つかを確認してください。


    1. MongoDBの'count()'は非常に遅いです。どのようにそれを改良/回避しますか?

    2. MongoDB:配列要素のプロパティの一意のインデックス

    3. ElasticBeanstalk EC2からRedis(ElastiCache)への接続が失敗する

    4. MongoDB-プロジェクションクエリ