はじめに
前回のmongodbレプリカセット構築の続きです。
mongodbはデフォルトではアクセス制御が有効になっていないため、
誰でもアクセス可能な状態になっています。
今回はmongodbにアクセス可能なユーザを作成した後に、アクセス制御を設定してみようと思います。
この記事でわかる・できること
- EC2内にmongodbレプリカセットに対してアクセス制御をかける方法
動作環境・使用するツールや言語
-
OS バージョン
- amazonlinux2
-
言語 バージョン
- mongodb 5系
前提
- mongodbがインストール済であること
手順
mongoシェルでログイン
$ mongo localhost:27018
mongoユーザパスワード設定
$ use admin
$ db.createUser({user:"root", pwd:"pwd", roles:["root"]})
$ db.system.users.find()
→作成したユーザが存在すること確認
$ db.auth("root","pwd")
→認証が通るか確認
rolesのrootはアクセス制限のないロールになります
アクセス制御設定
$ mkdir -p /usr/data/keys
$ cd /usr/data/keys
$ openssl rand -base64 756 > keyfile
$ chmod 400 keyfile
$ vi /usr/data/db1/mongod.conf
$ vi /usr/data/db2/mongod.conf
$ vi /usr/data/db3/mongod.conf
mongod.conf
# ファイル末尾に追加
security:
authorization: enabled
keyFile: /usr/data/keys/keyfile
レプリカセットのアクセス制御をする際は、すべてのDBで同じkeyfileを使用する必要があります。
そのためdb1,db2,db3内のmongod.confで追記するものはすべて同じ内容で問題ありません
mongo.shファイル修正(--authの追記)
#! /bin/bash
mongod --auth -f /usr/data/db1/mongod.conf
mongod --auth -f /usr/data/db2/mongod.conf
mongod --auth -f /usr/data/db3/mongod.conf
修正後は設定を反映させるために、EC2を再起動 or mongodのプロセスを再起動させてください。
動作確認
mongoプロセスを再起動後に実際にアクセス制御が聞いているか試してみてください
# mongoにログイン
$ mongosh
# mongoの構成確認
$ rs.status()
→ユーザ認証していないため失敗
# ユーザ認証
$ db.auth("root","pwd")
# mongoの構成確認
$ rs.status()
→ユーザ認証後のため成功
参考資料
自己管理型配置におけるロールベースのアクセス制御
キーファイル認証を使用した自己管理型レプリカセットの配置
おわりに・まとめ
mongodbレプリカセットのアクセス制御手順をまとめてみました。
デフォルトだと誰でも操作可能な状態なので、セキュリティ的も必ずやっておきたいものです。
今回は操作権限のないrootロールを使用しましたが、機会があればロールの種類もまとめてみたいと思います。