Linux上のMongoDBにリモート接続をリッスンさせる
1. 概要
このチュートリアルでは、リモートマシンで実行されているMongoDBに接続する方法を学習します。 MongoDBのデフォルト構成では、インストールされているのと同じサーバーからの接続のみが許可されます。 MongoDBは、デフォルト構成にいくつかの変更を加えることで、リモートで管理することも、別のアプリケーションサーバーに接続することもできます。
まず、 docker コンテナーを使用してMongoDBをインストールし、次に、信頼できるリモートマシンから安全にアクセスするようにMongoDBインストールを構成します。 重要なのは、リモート接続を有効にしているため、データベースの管理ユーザーアカウントを作成して、MongoDBのインストールを保護する必要があることです。
MongoDBサーバーのリモート接続を調べてみましょう。
2. Dockerを使用したMongoDBのインストール
MongoDBでリモート接続を設定するには、最初にMongoDBをインストールする必要があります。 LinuxマシンでMongoDBをセットアップする最も簡単な方法は、dockerコンテナーを使用することです。 MongoDBにdockerを使用する利点の1つは、コンテナー化されたデータベースが複数の環境で一貫しているため、開発のセットアップを高速化できることです。
最新のMongoDockerイメージをプルするコマンド:
$ sudo docker pull mongo
Using default tag: latest
latest: Pulling from library/mongo
Digest: sha256:ad947856db716ddd0b9cc525e341c77208ed8dafcb4a6ad23f9b3addd7a4f71c
Status: Image is up to date for mongo:latest
docker.io/library/mongo:latest
ここで、上記のコマンドでは、Dockerイメージをプルしました。これから説明するために、それを使用してコンテナーを実行してみましょう。
$ docker run -itd --name mongodb mongo
fda9c14e96a2e35e3daf89b5772d2fb2205c2679a1dc0c4a831c32690d40391c
コンテナ名「mongodb」でコンテナを開始します。
3. 管理ユーザーの作成
MongoDBのリモート接続を開く前に、まずMongoDBで認証を有効にする必要があります。 ただし、デフォルト構成では認証が無効になっています。つまり、MongoDBを含むサーバーにアクセスできるすべてのユーザーが、すべてのデータベースに完全にアクセスできます。 データベースを保護するために、管理ユーザーを作成し、管理ユーザーを使用して認証がデータベースに安全に接続できるようにします。
最初に、以下のコマンドを使用してシェルに入り、管理ユーザーを作成する必要があります。
$ mongo
認証を有効にするには、データベースadminを使用する必要があります。
use admin
ここでは、adminデータベースのcreateUserメソッドを使用します。 これを使用して、1人のユーザーに複数の役割を割り当てることができます。 管理者ユーザーに割り当てられた役割は、ユーザーの作成と変更、および任意のデータベースの読み取りと書き込みに必要なすべての特権をユーザーに付与します。
createUser メソッドには、ユーザーのユーザー名とパスワード、およびユーザーに付与する役割が必要です。 ここでは、ユーザーの資格情報と役割に関連するすべての詳細を保持するドキュメントを作成する必要があります。
実例を示すために、 createUser メソッドを呼び出して、管理ユーザーに役割を割り当てましょう。
db.createUser(
{
user: "baeldung",
pwd: "baeldung",
roles: [
{
role: "userAdminAnyDatabase", db: "admin"
},
{
role: "readWriteAnyDatabase", db: "admin"
},
{
role: "dbAdminAnyDatabase", db: "admin"
}
]
});
この場合、上記のコマンドの出力は次のようになります。
Successfully added user:
{
"user" : "baeldung",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
}
]
}
上記のコマンドでは、パスワード「 baeldung」を使用してユーザーbaeldung を作成し、このユーザーにフルアクセスを提供しました。 passwordPrompt を使用して、JSONでパスワードを提供する代わりに、端末でパスワードを要求することもできます。
db.createUser(
{
user: "baeldung",
pwd: passwordPrompt(),
roles: [
{
role: "userAdminAnyDatabase", db: "admin"
},
{
role: "readWriteAnyDatabase", db: "admin"
},
{
role: "dbAdminAnyDatabase", db: "admin"
}
]
});
注意すべき重要な点の1つは、MongoDBも再起動する必要があるということです。
4. MongoDB認証を有効にする
これで、管理者が設定され、データベース固有のユーザーが作成されました。 次に、MongoDBがこれらのアクセス制御の使用を開始できるようにする必要があります。 具体的には、ここでmongod.confファイルの構成を更新する必要があります。
$ sudo vi /etc/mongod.conf
mongod.conf ファイルでは、最初に operationProfiling にコメントを付けてから、セキュリティの下でauthenticationを有効にする必要があります。
#operationProfiling:
security:
authorization: enabled
最後に、MongoDBは、サーバーの再起動に関する前の手順で作成した役割を使用して、データベースアクセス制御を実施します。
5. パブリックバインドIPの構成
これまで、 docker を使用してMongoDBをインストールし、mongo認証構成を有効にしました。 デフォルトでは、MongoDBはローカルホストからの接続のみを受け入れます。 したがって、リモート接続を許可する必要があります。 mongod.confファイルで、ネットワークインターフェイスセクションに移動し、bindIpを0.0.0.0に変更する必要があります。これは、任意のIPアドレスからの接続を許可することを意味します:
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
さらに、変更を確認するには、MongoDBデーモンを再起動する必要があります。
6. リモート接続
これで、パブリックにルーティング可能なIPアドレスでリモート接続をリッスンするようにMongoDBを構成しました。 ここで、リモートマシンが接続できるかどうかをテストできます。 実例を示すために、リモートMongoDBに接続するコマンドを確認してみましょう。
$ mongo mongodb://baeldung:[email protected]:27017/admin
上記のコマンドを使用して、認証を使用してMongoDBにアクセスできます。
7. 結論
この記事では、MongoDBのリモートアクセスを構成する方法を学びました。 まず、dockerコンテナーを使用してMongoDBをインストールしました。 それに加えて、さまざまな役割を割り当てるユーザー認証についても検討しました。
最後に、認証を有効にして、パブリックバインディングIPを構成しました。 つまり、MongoDBをインストールし、リモート接続を有効にしました。