ユーザー名とパスワードで MongoDB を保護する
この MongoDB の記事では、最も基本的なセキュリティ機能を適切に構成する方法を説明します。MongoDB にリモート アクセスする際に認証ユーザーを作成することで、ユーザー名とパスワードで MongoDB を保護します。
ご存知のように、MongoDB は NoSQL データベースとして記述されており、リレーショナル DB 構造には従いません。 代わりに、JSON ドキュメントにデータを格納します。
MongoDB をインストールすると、MongoDB リモート接続セキュリティでは認証が有効になりません。つまり、HOST IP を持つ人は誰でも MongoDB サービスにすばやくアクセスして、MongoDB 認証なしで CRUD 操作を実行できます。これは、mongod
を統合する安全な方法ではありません。 データベースをグローバルに。
さらに、認証がないということは、誰もがデータベースに入るよう招待され、すべてが押収され、データの身代金を要求される可能性があることを意味します。
この MongoDB の記事では、MongoDB 認証資格情報を持つユーザーのみがデータベースにアクセスできるように、MongoDB 認証を保護する方法について説明します。
この MongoDB 記事で取り上げるトピックは次のとおりです。
-
MongoDB でのセキュリティ認証の有効化
- 認証なしで MongoDB を起動する
- MongoDB シェルを使用してサーバーに接続する
- ユーザー管理者を作成する
mongod
構成ファイルで認証を有効にします- ユーザー管理者として接続して認証する
- 追加のユーザーを作成する
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
セクションで、#
を削除するか、authorization
を enabled
に変更するか、欠落している場合は追加します。 次のようになります。
security:
authorization: "enabled"
mongod.conf
が見つからない場合、または代わりに mongodb.conf
という名前になっている場合は、古くて壊れたバージョンの MongoDB を使用しています。
この場合、おそらく MongoDB の最新バージョンへのアップグレードを検討する必要があります。 ただし、気にしない場合は、次のようにします。
$ sudo vi /etc/mongodb.conf
auth
を探し、#
を削除し、true
に設定されていることを確認します。 次のようになります。
auth = true
disabled
を enabled
に変更した後、ファイルを保存して 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 を使用します。