Node.jsでmongoDB使いたいな。と思って調べていると「セキュリティ設定しっかりやろう」という記事が多くあったので、実際に自分が行ったことをまとめてみました。
参考になれば嬉しいです。
1,そもそも設定を記述するファイルが見当たらない。
MongoDB自体はinstallされていたが、usr/local/etc/mongod.conf が見当たらない。おそらく、いつかの自分はbrewを使わずにインストールしていたのだろう。
というわけで、brew経由でmongo-Community というmongoのオープンソースリソースを利用するため以下コマンドを実行。
brew install mongodb-community
これで、usr/local/etc/mongod.conf が作られた。
2,さっそく設定ファイルにセキュリティ強化のための設定を追記しいく
先程作成したmongod.confに追記する。
・接続を許可するIPアドレスを指定する。
・port番号をデフォルトの27017から変更する。
・mongoDBの認証機能をONに設定する。
bindIp: 127.0.0.1
port: xxxxx
security:
authorization: enabled
ここまで行ったら再起動。
brew services restart mongodb-community
接続。(bindIp: 127.0.0.1, port: 40000 の場合)
mongo --host localhost --port 40000
3,DBごとにアクセス制限を設ける
さらにセキュリティを高めるために、各DBにアクセスできるuserを作成していく。
・user管理を行うadminにアクセスできるuserを作成する。
・新規で作成したDBにアクセスできるuserを作成する。
>mongo --host localhost --port 40000 //接続
>use admin //DB切り替え
>db.createUser(
{
user:"「作成したいユーザー名」",
pwd:"「パスワード」",
roles:[
{
"role" : "root",
"db" : "admin" //roleを割り当てるDBを選ぶ
}
]
}
)
>db.createUser(
{
user:"「作成したいユーザー名」",
pwd:"「パスワード」",
roles:[
{
"role" : "dbAdmin", //DB管理権限
"db" : "newDatabase"
}
]
}
);
4,mongoDBのsecurityが機能しているか確認する。
以下のように、エラーが出ていればDBごとのアクセス権限が機能している。
name@MBP~% mongo --host localhost --port 40000
>use admin
>db.system.users.find()
Error: error: {
"ok" : 0,
"errmsg" : "command find requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
}
以下のように接続できない感じになれば、port番号設定かIPアドレス設定が機能していると考えられる。
name@MBP~% mongo
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/? ~
Error: ~
connect@src ~
@(connect):2:6
exception: connect failed
exiting with code 1
【つまったこと】
・なんかポート指定してコマンドも間違えず打ってるはずなのに、接続できない!ってなったので解決した方法を載せておく。
結論 : ポート変更前のプロセスが動いていた。
1,mongoは期待したportで動いているのか?を確認。
name@MBP~% sudo lsof -i -P | grep "LISTEN"
//動いていれば以下のようになる。
mongod ~ name ~ IPv4 ~ TCP localhost:40000 (LISTEN)
2,自分の場合、port変更前のプロセスが動いていたので、prosess killして、mongo-communityを再起動
name@MBP~% brew services restart mongodb-community
これで接続できるようになりました。
【おまけ情報】
--dbpath オプションをつけることでDBの保存先を指定することができる。
-logappend オプションでログを追加する形で指定のファイルに残すことができる。
・以下のようにすると、指定ポートで指定ディレクトリにデータファイルを保存することができる。
mongod --dbpath ./data/db --port 40001
・これら設定を設定ファイルに書いておいて、設定ファイルの内容に沿って起動することもできる。