ハッカーはますます洗練されており、脆弱性を悪用する方法を知っています。MongoDBデータベースに機密データがある場合、セキュリティに真剣に取り組むことが重要です。しかし、心配しないでください!このチュートリアルがあなたのお手伝いをします!
このチュートリアルでは、セキュリティ対策を設定することで、MongoDBデータベースを保護し、ハッカーを撃退する方法を学びます。
続けて読んで、MongoDBのセキュリティを自分で管理しましょう!
前提条件
- このチュートリアルは実践的なデモンストレーションです。一緒に進めるためには、以下のものが必要です:
- A non-root user with
sudo
privileges.
専用の管理ユーザーの作成
MongoDBには組み込みの認証システムはありません。デフォルトでは、データベースへのアクセス権を持つ誰でも完全な管理権限を持ってしまいます。これは非常に危険です!データベースを安全にするために、管理権限を持つユーザーを作成し、データベースをそのユーザーに制限します。
このセットアップにより、各ユーザーがデータベース内で行える操作を制限しながら、管理特権を持つ単一のユーザーアクセスポイントを提供することができます。例えば、開発者はデータベースへの読み取り専用アクセスを持ち、管理者はデータの作成や編集ができます。
1. ターミナルを開き、以下のコマンドmongo
を引数なしで実行します。このコマンドにより、デフォルトの管理者ユーザーとしてMongoDBシェルに接続することができます。
この管理者ユーザーは、サーバー上のすべてのデータベースに対して完全な読み書きアクセス権限を持っているため、日常の作業にはこのユーザーを使用しないようにするのがベストです。
以下に示すように、Access control is not enabled(アクセス制御が有効化されていません)という警告が表示されます。
この警告は、MongoDBサーバーにアクセスできる人は誰でも、データベース内で自由に操作を行うことができることを示しています。これらの操作には、データベースの削除、ドロップ、更新などが含まれます。
この警告が表示されるのは、まだアクセス制御が有効化されていないためです。今のところ心配しないでください。次のセクションでアクセス制御の有効化方法を学びます。

2. 次に、show dbs
コマンドを実行して、adminデータベースを含むサーバー上のすべてのデータベースを表示します。通常のユーザーが見ることができないデータベースも表示されます。

3. 以下のuse admin
コマンドを実行して、adminデータベースに切り替えます。これにより、専用の管理ユーザーを作成することに焦点を当てます。このコマンドは、現在のデータベースコンテキストをadminデータベースを使用するように変更します。
MongoDBは、adminデータベースを使用してアクセス制御ルールを保存し、ユーザーとその役割のための組み込み認証、ユーザー名、パスワードを提供します。データベースの機能にとって重要なため、adminデータベースを削除または名前を変更することはできません。

4. 以下のコードをコピーして貼り付けて、Enterキーを押してmongoシェルで実行します。このコードは、ユーザー名がAdminATA
、パスワードがLDWbPf6Fy9Ezs3Mv
のユーザーを作成しますが、好みの資格情報を使用することもできます。
この新しいユーザーは、すべてのデータベースに対する読み取り/書き込み(readWriteAnyDatabase
)アクセス権と、すべてのコレクションに対する管理アクセス権を持っています。しかし、このユーザーはデータベースの削除権限がなく、他のユーザーの権限を削除または変更することはできません。
コマンドを実行してエラーが発生した場合は、コードを再確認して再試行してください。
5. プロンプトが表示されたら、安全なパスワードを入力し、Enter キーを押します。

下記のようなSuccessfully added userメッセージが表示されます。この出力により、管理者権限を持つユーザーが作成され、必要な最小限の権限に制限されたことが確認できます。
この時点で、データベース上で必要な操作を行うために、他のユーザーにアクセス権を与えずに、AdminATAという管理者ユーザーが既に作成されています。

6. 最後に、exit コマンドを実行して、mongoシェルを終了します。

認証を有効にすることにより、セキュリティを強化します。
管理者ユーザーを作成したので、認証を有効にすることでさらなるセキュリティを追加します。これにより、正しい資格情報を持つユーザーのみがデータベースにアクセスできるようになります。
認証は、通常、ユーザー名とパスワードを提供するか、認証トークンを使用することによって、接続の妥当性を検証するプロセスを指します。認証は、あなたが自分自身であることを確認し、リソースにアクセスしようとするなりすまし者でないことを保証します。
1. 次の設定で認証を有効にするには、MongoDBの設定ファイルを編集し、変更を保存します:
- お気に入りのテキストエディタで /etc/mongod.conf ファイルを開きます。 /etc/mongod.conf ファイルには、MongoDBクラスターの設定が含まれています。
- #security ディレクティブの前にある # 記号を削除して、コメントアウトを解除します。このディレクティブは、MongoDBに設定ファイルでセキュリティの設定を見つけるよう指示します。
- security ディレクティブの下に authorization: enabled という新しい行を追加します。なお、 authorization: enabled 行はインデントされていることに注意してください(先頭に2つのスペースがあります)。

2. 次に、以下の systemctl
コマンドを実行して、変更が反映されるようにMongoDBサーバーを再起動します。
3. 最後に、以下のコマンドを実行してMongoDBサービスのステータスを表示します。
以下は、アクティブ:アクティブ(実行中)という緑色のテキストが表示されています。これは、MongoDBサーバーが実行され、接続を受け付ける準備ができていることを示しています。

認証が機能するかどうかをテストする
認証を有効にしたばかりですが、それが機能するかどうかをどうやって確認しますか?データベースを表示して認証が機能することを確認するために、管理ユーザーにログインします。
1. 次のコマンドを実行して、mongo
シェルにアクセスします(「専用の管理ユーザーの作成」セクションのステップ1と同様に)。
以下のように、認証を有効にする警告メッセージが表示されなくなります。その代わりに、MongoDBサーバーとMongoDBシェルのバージョンが表示されます。

2. 次に、show dbs
コマンドを再実行して、データベースにアクセスできるかどうかを確認します。
このコマンドでは、管理ユーザーのみがデータベースの一覧を表示できます。しかし、以下のように何も表示されません。なぜでしょうか?データベースの一覧を表示する権限は、管理ユーザーにのみ予約されています。
mongoシェルにAdminロールを認証していないため、データベースの一覧を表示する権限がありません。

認証を有効にすると、正しい資格情報を含まない接続文字列を使用してデータベースにアクセスしようとすると、接続が失敗します。
MongoDBセキュリティの重要な部分として、接続文字列の認証があります。アプリケーションのすべてのレイヤーで認証を実装する必要があります。MongoDBへのすべての接続は、正しいユーザー名とパスワードを含む認証文字列を使用する必要があります。
3. exit
コマンドを実行してMongoDBシェルから終了します。
4. 以下のコマンドを実行して、新しく作成した管理ユーザーのユーザー名(-u
)とパスワード(-p
)でMongoDBシェルにログインします。 AdminATA
を、「専用管理ユーザーの作成」セクション(ステップ4)で作成したユーザー名に置き換えてください。
--authenticationDatabase
パラメーターはMongoDBシェルがadmin
データベースに対して認証を行うことを示します。
5. 管理ユーザーのパスワードを要求された場合は、パスワードを入力します。


6. 最後に、show dbs
コマンドを再実行して、すべてのデータベースを表示できるかどうか確認します。
今回は、管理者ユーザーであるため、以下のようにデータベースの一覧が表示されます。

結論
このチュートリアルでは、管理ユーザーの作成と認証の有効化方法について学びました。MongoDBのセキュリティを制御し、サーバー上のデータベースにアクセスできるユーザーに制限をかける方法を学びました。
ここまで来たら、アクセス権限を誰にどのように与えるかを決める番です。次は、安全にMongoDBコンテナを使用する方法を学んでみるのはいかがでしょうか?