ひとりMongoDB University 12/14 - Basic Security
この記録は、アドベントカレンダー形式の、MongoDB Universityの学習コースの記録、14日目になります!
ただいまコース: M103[1]を進めています。目標は12/25までにChapter1の完走!
Chapter 1: Basic Security: Part 1 (動画)
まずはATMでの現金の引き落としの流れを例に解説。
- ATMはチャレンジを発行(その個人を特定するための質問や番号の要求)
- ユーザは氏名やPINコードを返答
- 認証が行われたら、次にユーザが操作したいのはなにかを確認
- 操作内容に応じて、その操作が許可されるかをチェック
...と言った感じ。
MongoDBもこの流れは、認証と認可という2つのフェーズに別れている。
- Authentication
- ユーザを特定する
- そのユーザの妥当性を検証する
- Authorization
- そのユーザが要求した処理を行う権限があるかどうかを検証する
Authentication
4つのタイプの認証をサポート。
- SCRAM
- MongoDBのデフォルトで基本の認証方式
- mongodが認証するデフォルトで、かならずこの方式は備えている
- チャレンジ / レスポンスは一般的にパスワードを利用
- X.509
- 利用可能な認証の中では、かなり複雑性が高くセキュアである
MongoDB Enterpriseでのみ利用可能なもの
- LDAP
- Active Directoryのようなディレクトリサービスを使う(ここでは深く扱いません!)
- Kerberos
- MITが開発したパワフルな認証方式!(ここでは深く扱いません!)
クラスタ間のセキュリティ
クライアント / サーバ間の認証だけでなく、MongoDBのクラスタ間でも認証がある
ハンドシェイクを利用
(ここでは深くは扱わない)
まとめ
- クライアント認証と、クラスタ間の認証のメカニズムがあるよ!
- より詳しいセキュリティのコースはM310を受講してね!
- クライアント認証は、2デーズあるよ!
認証と認可はロールベース
- 各ユーザはなんらかのロールに属する
-
ロールには許可された複数の権限が紐づく
- これは操作したいリソースに対してグループ分けされた権限を設定するのに有効
-
ロールベースの権限だと、データベースやコレクション単位で権限を分けられる
-
ユーザ単位で可能なことを分離分割できる
- 管理者:ユーザ作成、削除
- 開発者:データの登録、削除
- データサイエンティスト:データの読み取りのみ
etc....
Chapter 1: Basic Security: Part 2 (動画)
次も動画!!
mongod.confの確認
security:
authorization: enabled
この設定では、2つの意味がある。
- ロールベースでのアクセスコントロールや認可を行うこと
- 認可を行うということは、明示的に認証も要求するということ
認証用のユーザをどうするか?
上記の設定が有効な場合、たとえユーザがまだ作成されていなくても、接続をするクライアントは認証を求められることになる。
まずは接続用のユーザを作らないといけない。
Localhostでの例外
- ローカル接続では、まだユーザが作成されていなくても管理上の接続ができる
- 一度ユーザが作成されると、この例外は無効になり、その後は必ず認証が必要になる
- 最初のユーザは管理者として作成すること
# dockerコンテナの中のmongodに接続してみる
# まだ認証の設定は無し
root@719df74a3d27:/# mongo
MongoDB shell version v4.4.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
---
> use admin
switched to db admin
> db.stats()
{
"db" : "admin",
"collections" : 1,
"views" : 0,
"objects" : 1,
"avgObjSize" : 59,
"dataSize" : 59,
"storageSize" : 20480,
"indexes" : 1,
"indexSize" : 20480,
"totalSize" : 40960,
"scaleFactor" : 1,
"fsUsedSize" : 10142826496,
"fsTotalSize" : 62725623808,
"ok" : 1
}
# dbごとにユーザを設定
# 今回は adminデータベースに対し、rootという名前でroot用のロールを割り当て
# role: rootはビルトインで管理者用ロール
> db.createUser({
... user: "root",
... pwd: "root123",
... roles : [ "root" ]
... })
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
一度抜けてから再接続してみる。
# mongo --username root --password root123 \
--authenticationDatabase admin
.....
---
>
- ユーザはデータベースごとに存在する
- adminデータベース用のユーザ Bobと、testデータベースのBobは違うよ!
- 基本はSCRAM認証なので、管理者アカウントは強力なパスワードを用意して作成してね!
Basic Security: Part 2 (クイズ)
Problem
When should you deploy a MongoDB deployment with security enabled?
セキュリティの設定はどのタイミングで有効になりますか?
こたえ
- 本番とか検証環境とか、環境を問わず、認証は設定しましょう!!
今日の進捗
むりせず3つ進めました。木曜くらいにはChapter 1が終われるかな?
きょうのzenn
しばし同じ方法で進めています!毎日変わる絵文字が楽しい。
-
M103: Basic Cluster Administration のコースになります。コースを開始すると、完了までの期限は2ヶ月以内です。 ↩︎
Discussion