ユーザー名とパスワードで MongoDB を保護する

Tahseen Tauseef 2023年6月20日
ユーザー名とパスワードで MongoDB を保護する

この MongoDB の記事では、最も基本的なセキュリティ機能を適切に構成する方法を説明します。MongoDB にリモート アクセスする際に認証ユーザーを作成することで、ユーザー名とパスワードで MongoDB を保護します。

ご存知のように、MongoDB は NoSQL データベースとして記述されており、リレーショナル DB 構造には従いません。 代わりに、JSON ドキュメントにデータを格納します。

MongoDB をインストールすると、MongoDB リモート接続セキュリティでは認証が有効になりません。つまり、HOST IP を持つ人は誰でも MongoDB サービスにすばやくアクセスして、MongoDB 認証なしで CRUD 操作を実行できます。これは、mongod を統合する安全な方法ではありません。 データベースをグローバルに。

さらに、認証がないということは、誰もがデータベースに入るよう招待され、すべてが押収され、データの身代金を要求される可能性があることを意味します。

この MongoDB の記事では、MongoDB 認証資格情報を持つユーザーのみがデータベースにアクセスできるように、MongoDB 認証を保護する方法について説明します。

この MongoDB 記事で取り上げるトピックは次のとおりです。

  • MongoDB でのセキュリティ認証の有効化

    1. 認証なしで MongoDB を起動する
    2. MongoDB シェルを使用してサーバーに接続する
    3. ユーザー管理者を作成する
    4. mongod 構成ファイルで認証を有効にします
    5. ユーザー管理者として接続して認証する
    6. 追加のユーザーを作成する

MongoDB でセキュリティ認証を有効にする

この MongoDB の記事は、セルフマネージド MongoDB サーバーにのみ適用されます。 すべての MongoDB as a Service プロバイダーは、すでに事前に認証を有効にしています。

認証なしで MongoDB を起動する

シェルを開き、MongoDB クライアントを実行します。 これは MongoDB のデフォルトの動作であるため、簡単です。

$ mongo

MongoDB シェルを使用してサーバーに接続する

$ mongo mongodb://<host>:<port>

ポート番号はおそらく27017ですが、セキュリティを強化するためにいつでも別の番号に変更できます。

ユーザー管理者を作成する

管理データベースに変更します。

> use admin

userAdminAnyDatabase ロールを持つユーザーを作成する必要があります。これにより、既存のデータベースに他のユーザーを作成できます。 次の例では、パスワード pass123 を持つ admin123 ユーザーを作成します。

> db.createUser(
  {
    user: "admin123",
    pwd: "pass123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

次に、Ctrl+D を使用して mongo シェルから切断します。

mongod 構成ファイルで認証を有効にする

mongod.conf を任意のエディターで編集し、authorization を有効にします。

$ sudo vi /etc/mongod.conf

任意のコード エディターで /etc/mongod.conf を開き、次の行を検索します。

security:
    authorization: "disabled"

security セクションで、# を削除するか、authorizationenabled に変更するか、欠落している場合は追加します。 次のようになります。

security:
  authorization: "enabled"

mongod.conf が見つからない場合、または代わりに mongodb.conf という名前になっている場合は、古くて壊れたバージョンの MongoDB を使用しています。

この場合、おそらく MongoDB の最新バージョンへのアップグレードを検討する必要があります。 ただし、気にしない場合は、次のようにします。

$ sudo vi /etc/mongodb.conf

auth を探し、# を削除し、true に設定されていることを確認します。 次のようになります。

auth = true

disabledenabled に変更した後、ファイルを保存して mongod を再起動する必要があります。

$ sudo service mongodb restart

このサーバーに接続するすべてのクライアントは、有効なユーザーとして自分自身を認証する必要があり、割り当てられた役割によって決定されるアクションのみを実行できます。

ユーザー管理者として接続および認証する

$ mongo mongodb://<host>:<port>> db.auth("admin123", "pass123")
1

ユーザーは、mongo mongodb://superadmin:thepianohasbeendrinking@<host>:<port> を使用して、ワンステップで接続および認証することもできます。 それでも、このオプションはお勧めできません。端末の履歴に資格情報が表示されたままになり、コンピューター上のすべてのプログラムが読み取れるからです。

追加ユーザーの作成

次の操作は、test データベースで readWrite ロールを持つユーザー admin456 を test データベースに追加します。

> use test
> db.createUser(
  {
    user: "admin456",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" } ]
  }
)

Enter を押すと、mongo は Successfully added user: … で応答します。 次に、exit と入力するか、CTRL+C を使用します。

関連記事 - MongoDB Authentication