7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【mongoDB】mongoDBチートシート「セキュリティー」(外部アクセスの制限・認証設定)

Last updated at Posted at 2020-12-27

外部アクセスの制限

ポート番号の変更

設定を変更する場合は、mongoDBを再起動させる必要がある。

設定ファイルの場所

macの場合
/usr/local/etc/mongod.conf

linuxの場合
/etc/mongod.conf

設定ファイルのポート番号を変更する

net:
 port:<変更するポート番号>

ポートを変更した場合は、アクセスする場合にオプションで指定する必要がある。

mongo --port <変更後の番号>

linuxでSElinuxをONにしたまポート番号を変更する場合

sudo semanage port -a -t mongod_port_t -p tcp <変更番号>

接続IPアドレスを制限する。

net:
  bindIp: <IPアドレス>

//127.0.0.1は必ず指定する。
//例  [127.0.0.1, 192.168.100.100]
//制限を設けない場合は、0.0.0.0を指定

ユーザー認証(単体構成)

MongoDBはデフォルトの状態だと、認証がかかっておらず誰でもアクセスができてしまうため、認証をかける必要がある。
ユーザー情報は、**「adminデーターベース」の、「system.users」**コレクションに保存されている。

※ユーザーを作成する前に、認証を設定してしまうと、誰もアクセスできなくなるので注意!

rootユーザーの作成

use admin
//adminデーターベースに移動
db.createUser({
  user:"root",
  pwd:"root",
  roles:[{role:"root", db:"admin"}]
  })

一覧を確認

db.getUsers()

configファイルの修正

vim /usr/local/etc/mongod.conf

認証を行うように設定

//末尾に追記
security:
  authorization: enabled

再起動

brew services stop mongodb-community
brew services run mongodb-community

確認

mongo
use admin
show dbs

//表示されない。

db.auth("root","root")    //先程作ったユーザーでログインしてみる。(username, password)
show dbs

//今度は表示される。(認証がかかっている)

dbごとの個別のユーザーを作成

use test //対象のデーターベースに移動(今回はtest)
db.createUser(
   {user:"tester", 
    pwd :"tester",
    roles:[{role:"readWrite" ,db: "test"}] //testデータベースに対し、読み書き権限をtesterに与える。
   }
)

認証の確認

一度mongodbから出る。

mongo //mongodbにアクセス
use test
show collections

結果
Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus

認証がかかっていることを確認。
再度mongodbから出る。

認証付きでログイン

mongo -u tester -p -authenticationDatabase test

enter password

show collections

//表示されることを確認

主なロールの一覧

分類 ロール名 説明
ユーザーDB操作用ロール read コレクションに対する読み
ユーザーDB操作用ロール readWrite コレクションに対する読み書き
ユーザーDB操作用ロール dbAdmin db管理用ロール
ユーザーDB操作用ロール userAdmin 指定したデーターベースに対してユーザー管理できる
ユーザーDB操作用ロール dbOwner 指定したデータベースのオーナーシステム管理用ロール
以下のロールを含む
dbadmin
userAdmin
readWrite
分類 ロール名 説明
クラスタ管理・操作用ロール clusterManager クラスタ管理用ロール
クラスタ管理・操作用ロール clusterMonitor クラスタ読み取り専用ロール
クラスタ管理・操作用ロール hostManager クラスタ操作用ロール
クラスタ管理・操作用ロール clusterAdmin クラスタ管理用ロー
clusterManager
clusterMonitor
hostManager
dropDatabaseアクション
分類 ロール名 説明
バックアップ・リストア用ロール backup バックアップ用ロール
バックアップ・リストア用ロール restore リストア用ロール

adminデーターベースのユーザーにのみ指定できる特別なロール

分類 ロール名 説明
全DB管理操作用ロール readAnyDatabase 全DBの読み取り専用ロール
全DB管理操作用ロール readWriteAnyDatabase 全DBの読み書き用ロール
全DB管理操作用ロール userAdminAnyDatabase 全DB のユーザー管理用ロール
全DB管理操作用ロール dbAdminAnyDatabase 全DB 管理用ロール
分類 ロール名 説明
システム管理用ロール root システム管理用ロール
mongodb内部使用ロール _system mongodbが内部で使用するロール

最低限、以下の2つのユーザーは作成しておく

adminデータベース:rootユーザー
各データベース:readWrite

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?