MongoDBの基本:役割ベースのアクセス制御(RBAC)の構成
オープンソースのドキュメントストアであり、現在市場で最も人気のあるNoSQLデータベースであるMongoDBは、MongoDBデプロイメントのセキュリティを管理するためのさまざまな高度な機能を提供します。このチュートリアル投稿では、ロールベースのアクセス制御(RBAC)を設定して、reIndex、mongodump、mongorestoreのMongoDBシステム全体でユーザーアクセスを管理する方法を紹介します。
MongoDBデータベースの管理者である場合、特定のアクションを実行する機能を個々のユーザーに提供するリクエストを受け取っている可能性があります。 MongoDBのセキュリティ機能は現在かなり成熟しており、非常にきめ細かいロールベースのアクセス制御を作成して割り当てることができます。
解決を通じて段階的なアプローチでreIndexアクションを実行する特定の権限をユーザーに付与する例を見ていきます。この一般的なセキュリティアクションを実行する方法を示す前に、MongoDBの役割ベースのアクション制御の概要を見ていきましょう。
MongoDBRBACの仕組み
MongoDBを使用すると、RBACメカニズムを使用して、割り当てられた「役割」を通じてユーザーへのアクセスを制限できます。 RBACアクセス制御はデフォルトでは有効になっていないため、チームの管理者が構成する必要があります。ユーザーに特定のリソースへのアクセスを許可することで、その役割またはユーザーがそのリソースに対してアクションを実行することを承認したことになります。
-
リソース
データベース、コレクション、コレクションのセット、またはクラスター。
-
アクション
ユーザーがリソース(通常はデータベース)に対して実行できる特定の操作。
MongoDBは、組み込みの役割と呼ばれる事前定義された役割をサポートし、アクションはread(-Only)、readWrite、backupなどの論理グループにまとめられます。MongoDBは、ユーザー定義の役割。
MongoDBreIndexRBAC権限の承認
コンテキストができたので、reIndexアクションを実行する権限をユーザーに承認する手順に進みましょう。
MongoDBロールベースのアクセス制御を介してreIndex特権を作成する方法#RBACClickToTweet-
特権アクションを決定する
MongoDBコンテキストのアクションは、特権アクションと呼ばれ、MongoDBのドキュメントでこれらのアクションの完全なリストを見つけることができます。関心のあるアクションは、reIndex、つまりユーザーが特定のデータベースまたはコレクションに対してreIndexコマンドを実行できるようにする特権です。 reIndexコマンドは、大量のデータや多数のインデックスを含むコレクションではコストがかかる可能性があるため、デフォルトでは管理者の役割の一部です。
-
ロールに権限を付与する
必要な権限を決定したら、次にそれらの権限を役割に付与します。すでに権限を持っている組み込みの役割を選択することもできますが、組み込みの役割を変更するのではなく、独自のユーザー定義の役割を作成することをお勧めします。これは、デフォルトで戻るのに適しているためです。
-
新しいユーザー定義のロールを作成する
新しいユーザー定義の役割を作成するために使用するものは次のとおりです。
> use test switched to db test > db.createRole({role: "reIndexing", privileges: [], roles: ["readWrite"]}) // Create a new role out of the default readWrite rule. { "role" : "reIndexing", "privileges" : [ ], "roles" : [ "readWrite" ] } > db.getRole("reIndexing") { "role" : "reIndexing", "db" : "test", "isBuiltin" : false, "roles" : [ { "role" : "readWrite", "db" : "test" } ], "inheritedRoles" : [ { "role" : "readWrite", "db" : "test" } ] }
-
新しい役割に特権を付与する
次に、新しく作成したユーザー定義の役割に目的の権限を割り当てます。
> db.grantPrivilegesToRole("reIndexing", [ { resource: { db : "test", collection: "" }, actions: ["reIndex"] } ]) > db.getRole("reIndexing", {showPrivileges: true}) { "role" : "reIndexing", "db" : "test", "isBuiltin" : false, "roles" : [ { "role" : "readWrite", "db" : "test" } ], "inheritedRoles" : [ { "role" : "readWrite", "db" : "test" } ], "privileges" : [ { "resource" : { "db" : "test", "collection" : "" }, "actions" : [ "reIndex" ] } ], "inheritedPrivileges" : [ .... ] }
-
-
ユーザーに役割を付与する
最後のステップは、ユーザーにこの新しい役割を割り当てることです。
> db.getUser("indexUser") { "_id" : "test.indexUser", "user" : "indexUser", "db" : "test", "roles" : [ { "role" : "readWrite", "db" : "test" } ] } > db.grantRolesToUser("indexUser", ["reIndexing"]) > db.getUser("indexUser") { "_id" : "test.indexUser", "user" : "indexUser", "db" : "test", "roles" : [ { "role" : "reIndexing", "db" : "test" }, { "role" : "readWrite", "db" : "test" } ] }
ダミーユーザーに対してこれらの手順を実行することを忘れないでください。これにより、関連するユーザーに承認を付与して通知する前に、新しい権限が機能することをテストして確認できます。
追加の権限:mongodumpとmongorestore
最初にreIndexの例を示して、役割への権限の付与とユーザーへの役割の付与の両方を説明しました。
より一般的な使用例は、mongodump
を使用してバックアップと復元のアクションを実行するための承認を提供することです。 およびmongorestore
。これは、MongoDBの組み込みの役割を介して単一のステップで実行でき、バックアップと復元の両方の特権を付与して、ユーザーがmongodump
を実行できるようにすることができます。 およびmongorestore
それぞれ。
たとえば、データベースをバックアップおよび復元するためのアクセス許可をユーザーに付与する方法は次のとおりです。 これらの役割は、adminデータベースのユーザーのみが使用できることに注意してください。
> db.grantRolesToUser("backupUser", ["backup", "restore"]) > db.getUser("backupUser") { "_id" : "admin.backupUser", "user" : "backupUser", "db" : "admin", "roles" : [ { "role" : "restore", "db" : "admin" }, { "role" : "backup", "db" : "admin" }, { "role" : "readWrite", "db" : "admin" } ] }
単一のデータベースまたはコレクションでバックアップと復元に権限を追加するには、さらに作業が必要です。 mongodump
の場合 、その特定のデータベースに対する検索権限を追加で付与する必要がありますが、mongorestore
より複雑な特権要件があります。
MongoDBのセキュリティに興味がありますか? MongoDBのセキュリティトピックに関する上位の投稿は次のとおりです。
- MongoDBセキュリティの3つのA–認証、承認、監査
- MongoDBインストールのセキュリティを向上させるための3つの簡単なステップ
- MongoDB3.xのデフォルトとしてのMongoDB-CR認証の構成
- Node.jsの自己署名証明書を使用したMongoDBSSL
- MongoDBのセキュリティを向上させるための10のヒント