【MongoDB】認証の設定をする
私は以前にConohaVPSを借りてMongoDBを構築し、運用(放置)していたのですが、認証機能を入れていなかったのです。単純にめんどくさがってしまっていたのですが、流石にどこからでもアクセスできるは不味いと思い出しました。
なので、今回運用中のMongoDBにユーザ認証を追加しました。その手順を本記事にまとめていきます。
環境情報
OS: CentOS7
MongoDB: v4.0
MongoDBの認証
そもそもなのですが、MongoDBは初期設定では認証がついていません。MySqlなどでは標準で認証の設定が必要なので、すこし驚きでした。開発用にすぐ使いたいようにという配慮なんですかね?
MongoDB v4.0の認証方式はSCRAM-SHA-256を用いているらしいです。これ以前のバージョンではSCRAM-SHA-1を使っていたみたいです。MongoDBのバージョンによって、アプリ側からの認証方式を意識しないといけないので、お気を付けください。
以下MongoDB認証の公式ドキュメントです。
https://docs.mongodb.com/manual/security/
MongoDBに認証を追加する
それでは認証を追加していきます。
Adminユーザを追加する
まずはmongo shellを起動します。
mongo
adminテーブルへ切り替えます。(adminテーブルはインストール時に追加されます。)
use admin
adminテーブルにユーザを追加します。
db.createUser({ user:"admin", # 任意のユーザ名を設定(とりあえずadminでよいと思います。) pwd:"パスワード", # 任意のパスワードを設定 roles:[{ role:"userAdminAnyDatabase", db:"admin" }] })
これでadminユーザが作成できました。一旦exitして、次はMongoDBのconfigをいじります。
認証機能をONに設定する。
/etc/mongod.conf
に記載されている設定を変更します。
vimなどで編集し、以下の記載を追加。(security:は元々コメントアウトされていると思うので、コメントアウトを外して下に行を追加します)
security: authorization: enabled
そうしたらMongoDBを再起動します。(以下はCentOS7の再起動コマンドなので、他のOSの場合は書き換えてください)
sudo systemctl restart mongod.service
認証を利用してアクセスする。
adminテーブルへアクセスします。
mongo
use admin
以下のコマンドで認証します。
db.auth("admin", "パスワード")
実行結果で1が表示されればOKです。
個別のテーブルへのアクセスユーザを作成する。
上記で行ったのはadminテーブルへのユーザです。そして、上記でadminユーザに与えられたロールは各テーブルのユーザ操作権限ですので、テーブルのデータを確認したりはできません。
ですので、各テーブルのデータへアクセスできるユーザを作成します。
上記のadminユーザでログインした状態から操作していきます。まずは対象のテーブルに切り替えます。(今回はtest_databaseというDBへユーザを追加します。)
use test_database
ユーザを追加します。権限はreadとwriteなので、読み書きのみができます。データ削除などはできません。
db.createUser({ user:"ユーザ名", # 任意のユーザ名 pwd:"パスワード", # 任意のパスワード roles:[{ role: "readWrite", db: "test_database" }] })
これで個別のユーザ追加完了です。
さいごに
今回はMongoDBへの認証追加を記載しました。実際に運用中のDBへ追加したので、なかなか緊張しました。実は事前にサーバを借りて予行練習をしてから作業しています。
対象の機能が5分間に一回データを取得しているものなのですが、残念ながら5分以内に作業が終わらせることはできませんでいた…。ちょっとハプニングが発生して8分くらいかかりました。10分以内くらいなら許容するつもりだったので、OKかなとは思っています。
この記事が皆様のお役に立てば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません