MongoDB 2.4 認証周り
以前、盛大にハマったので、備忘録です。
コアサーバ
keyFileオプションの扱い(2.2から変わったかもしれない。。。)
keyFileオプションを指定すると、authオプションも指定された事になる。
つまりkeyFileオプションはレプリカセット・ノード間の認証と、クライアント認証を同時に有効にする。localhost(127.0.0.1)ポート
admin DBに最初のユーザが追加されるまでは認証無しでadmin DBをコントロールできる。
なので、最初から認証有効(auth=true)な状態で上げてしまっても、ちゃんと構築できる!
- 設定例
replSet=RS # サービスIPの他にlocalhostも空けないと構築出来ない為bind_ipは設定しない。(構築完了後はbind_ipを設定しても良い) # bind_ip=192.168.159.142 port=27017 # keyFileを指定したので、auth = true となる。 keyFile=/usr/local/mongo/conf/replkey dbpath=/usr/local/mongo/data00 pidfilepath=/usr/local/mongo/logs/mongod00.pid logpath=/usr/local/mongo/logs/mongod00.log logappend=true quiet=true fork=true directoryperdb=true maxConns=20000 slowms=1000 nohttpinterface=true notablescan=true nssize=4authレプリカセット構築の流れ
// auth有効であっても新規ノード起動直後のまっさらな状態にはログインできる $ mongo MongoDB shell version: 2.4.1-pre- connecting to: test // レプリカセット初期化も普通にできる > myconf = { ... } > rs.initiate(myconf) { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } // 暫くするとPRIMARYになる(かもしれない) RS:SECONDARY> : RS:PRIMARY> // admin DBにcrumbユーザを追加 RS:PRIMARY> use admin RS:PRIMARY> db.addUser('crumb','jp') // 直後にunauthorized user に変わる > // もう何も受け付けない。。。 > rs.status() { "ok" : 0, "errmsg" : "unauthorized" } // 再認証すればログインできる > db.auth('crumb','jp') 1 RS:PRIMARY> // 一旦mongoから抜けて認証付きで入りなおしてみる。 bye $ mongo 192.168.159.142:27017/admin -u crumb -p jp MongoDB shell version: 2.4.1-pre- connecting to: 192.168.159.142:27017/admin RS:PRIMARY> // ついでに監視用の読み専ユーザも作っとくか RS:PRIMARY> db.addUser('watch','dog',true)まとめ
- keyFile
- レプリカセット・ノード間の認証を行う為のファイル(共通鍵)を指定する。
しかし暗黙的にクライアント認証も有効になる事に注意。- localhost
- 新規構築時に必要なので空けておいた方がいい。
- admin DBにユーザ作成
- 最初のユーザを作成する事で完全なクライアント認証が有効になる。
新規構築時には必ず一気にココまでやってセキュリティーを確保する事![ authenticationクライアント側(ツール類)
これらのツールには--authenticationDatabaseオプションが追加された。(どのDBで認証するのか?)
- mongodump/mongorestore
- mongoexport/mongoimport
- mongostat
- mongotop
特にmongostat,mongotopはレプリカセットの内容を扱うのでadmin DBを指定しなければならない。
$ mongostat -h 192.168.159.142 --port 27017 -u watch -p dog --discover --authenticationDatabase admin