ハッカーはますます巧妙になり、脆弱性を悪用する方法を知っています。 MongoDB データベースに機密データがある場合は、セキュリティを真剣に考えることが重要です。しかし、どのように?心配しないでください!このチュートリアルでカバーできます!
このチュートリアルでは、MongoDB データベースを保護し、セキュリティ対策を設定してハッカーを撃退する方法を学びます。
読み進めて、MongoDB セキュリティの管理を始めましょう!
前提条件
- このチュートリアルは実践的なデモンストレーションです。先に進むには、次のものがあることを確認してください:
- Linux マシンにインストールされた MongoDB。
sudo
を持つ root 以外のユーザー 特権。
専用管理ユーザーの作成
MongoDB には組み込みの認証システムがありません。デフォルトでは、データベースにアクセスできる人は誰でも完全な管理者権限を持っています — あまりにも危険です!データベースを保護する方法は?管理者権限を持つユーザーを作成し、データベースをその管理者ユーザーにロックダウンします。
この設定により、各ユーザーがデータベース内で実行できる操作を制限しながら、管理者権限を持つ単一のユーザー アクセス ポイントを提供できます。たとえば、開発者はデータベースへの読み取り専用アクセス権を持つ必要がありますが、管理者はデータを作成および編集できます。
1. 端末を開いて mongo
を実行します 以下のコマンドを引数なしで実行します。このコマンドを使用すると、デフォルトの管理者ユーザーとして MongoDB シェルに接続できます。
この管理者ユーザーは、サーバー上のすべてのデータベースへの完全な読み取り/書き込みアクセス権を持っているため、強力です。このユーザーを日常業務に使用することは避けてください。
mongo
アクセス制御が有効になっていませんという警告が表示されます …., 以下に示すように.
この警告は、MongoDB サーバーにアクセスできるすべてのユーザーが、データベースに対して必要なアクションを実行できることを示しています。これらのアクションには、データベースの削除、削除、更新が含まれますが、これらに限定されません。
この警告が表示されるのは、アクセス制御をまだ有効にしていないためです。今のところ、気にしないでください。次のセクションで、アクセス制御を有効にする方法を学びます。

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

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

4. 次に、以下のコードをコピーして mongo シェルに貼り付け、Enter キーを押します。このコードは AdminATA
というユーザーを作成します 、パスワードは LDWbPf6Fy9Ezs3Mv
、ただし、必要に応じて別の資格情報を使用できます。
この新しいユーザーには読み取り/書き込み権限があります (readWriteAnyDatabase
) すべてのデータベースへのアクセス権と、すべてのコレクションへの管理者アクセス権。ただし、このユーザーにはデータベースの削除/削除権限がなく、他のユーザーの権限を削除または変更することはできません。
コマンドを実行してエラーが発生した後、コードを再確認して再試行してください。
# The db.createUser() method creates a new user on the current database, with the privileges specified by roles.
db.createUser(
{
# Specifying the username AdminATA, but you can enter whatever username you like
user: "AdminATA",
# The passwordPrompt() method is a universal helper function
# that tells the MongoDB shell to prompt you for a password for the AdminATA user.
pwd: passwordPrompt(),
# Specifying the roles you want your AdminATA user to have.
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
5. 以下に示すように、プロンプトが表示されたら安全なパスワードを入力し、Enter キーを押します。

以下に、正常に追加されたユーザーが表示されます メッセージ。この出力は、管理者権限を持つユーザーを正常に作成し、それらを必要最小限の権限に制限したことを確認します。
この時点で、AdminATA という名前の管理ユーザーが既に存在します。このユーザーは、すべてのユーザーにアクセス権を付与することなく、データベースで必要なすべての操作を実行できます。

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

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

2. 次に、次の systemctl
を実行します コマンドを実行して MongoDB サーバーを再起動し、変更を有効にします。
sudo systemctl restart mongod
3. 最後に、以下のコマンドを実行して、MongoDB サービスのステータスを表示します。
sudo systemctl status mongod
以下に、アクティブ:アクティブ (実行中) という行があります。 これは、MongoDB サーバーが実行中であり、接続を受け入れる準備ができていることを示します。

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

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

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


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

結論
このチュートリアルでは、接続して管理ユーザーを作成し、認証を有効にする方法を学習しました。 MongoDB のセキュリティを制御し、サーバー上のデータベースにアクセスできるユーザーを制限する方法を学びました。
この時点で、誰が何にアクセスできるかを決定できます。では、あなたにとって次は何ですか? MongoDB コンテナを安全に使用する方法を学んでみませんか?