注意
MongoDB Atlas での監査
MongoDB Atlas は、すべてのM10以上のクラスターの監査をサポートしています。 Atlas は、以下に記載されているように JSON 形式の監査フィルターの指定と、簡素化された監査構成のための Atlas 監査フィルタービルダの使用をサポートしています。 To learn more, see the Atlas documentation for Set Up Database Auditing and Configure a Custom Auditing Filter.
MongoDB Enterpriseは、さまざまな操作の監査をサポートしています。 監査機能を有効にすると、監査機能はデフォルトで、監査イベントのアクション、詳細、 結果 で詳しく説明されるように、すべての監査可能な操作を記録します。 イベント フィルターを指定して、記録されるイベントを制限できます。
監査フィルターは、スタートアップ時に構成することも、実行時にフィルター構成を許可するように MongoDB を構成することもできます。
監査フィルター構文
監査フィルターは、 findコマンドに指定されたクエリ述語ドキュメントと同じ形式です。 監査フィルターの例については、「例 」を参照してください。
注意
MongoDB Ops Manager と Cloud Manager 配置のフィルター
MongoDB Ops Manager または Cloud Manager を介して監査フィルターを構成する場合、そのフィルターは有効な JSON である必要があります。このページの例では、{ "atype": "authenticate", "param.db": "test" } のように、各フィールド名を二重引用符で囲んでください。さらに学ぶには、MongoDB Ops Manager マニュアルを参照してください。
実行時にフィルター構成
MongoDB 5.0 以降、mongod ノードとmongos ノードの監査を実行時に構成することができます。これらのノードのグループを、分散監査構成に含めることができます。
分散監査構成にノードを含めるには、ノードの構成ファイルを次のように更新し、サーバーを再起動します。
Parameter | 値 |
|---|---|
| |
設定解除 | |
設定解除 |
次の場合、サーバーはエラーを記録し、起動に失敗します。
runtimeConfigurationがtrueであり、auditLog.filterまたはauditAuthorizationSuccessのいずれかが設定されている。
実行時に監査フィルターと auditAuthorizationSuccess パラメーターを変更するには、auditConfig を参照してください。
システム起動時のフィルタ構成
監査フィルターは、コマンドラインで指定することも、 mongodまたはmongosインスタンスの起動に使用される構成ファイルで指定することもできます。
構成ファイルの使用法
フィルターは、構成ファイルのauditLogセッションの下で YAML で指定できます。 サンプル構成については、以下の例を参照してください。
注意
runtimeConfigurationが有効になっている場合、構成ファイルを使用して監査フィルターを指定することはできません。
例
すべての監査可能なイベントを記録
監査可能なイベントをすべて記録するには、監査フィルターを指定しないでください。 デフォルトでは、監査機能はすべての監査可能な操作を記録します。
複数の操作タイプのフィルタリング
次の例では、 フィルターを使用してcreateCollection } アクションとdropCollectionアクションのみを監査します。
{ atype: { $in: [ "createCollection", "dropCollection" ] } }監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auditDestination file --auditFilter '{ atype: { $in: [ "createCollection", "dropCollection" ] } }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ atype: { $in: [ "createCollection", "dropCollection" ] } }'単一データベースの認証操作でフィルタリング
<field>には、 監査メッセージ 内の任意のフィールドを含めることができます。 認証操作(つまり atype: "authenticate" )、監査メッセージにはparamドキュメントのdbフィールドが含まれています。
次の例では、 フィルターを使用して、 testデータベースに対して発生するauthenticate操作のみを監査します。
{ atype: "authenticate", "param.db": "test" }監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --auditDestination file --auditFilter '{ atype: "authenticate", "param.db": "test" }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ atype: "authenticate", "param.db": "test" }'データベース全体ですべてのauthenticate操作でフィルタリングするには、 "param.db": "test"を省略し、フィルター{ atype: "authenticate" }を使用します。
単一データベースのコレクション作成と削除操作でのフィルタリング
<field>には、 監査メッセージ 内の任意のフィールドを含めることができます。 コレクションの作成と削除操作(つまり atype: "createCollection"とatype: "dropCollection" )、監査メッセージにはparamドキュメントに 名前空間nsフィールドが含まれています。
次の例では、フィルターを使用して、 testデータベースに対して発生するcreateCollection操作とdropCollection操作のみを監査します。
注意
正規表現では、ドット( . )をエスケープするために 2 つのバックスラッシュ( \\ )が必要です。
{ atype: { $in: [ "createCollection", "dropCollection" ] }, "param.ns": /^test\\./ }監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --auditDestination file --auditFilter '{ atype: { $in: [ "createCollection", "dropCollection" ] }, "param.ns": /^test\\./ }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ atype: { $in: [ "createCollection", "dropCollection" ] }, "param.ns": /^test\\./ }'認可ロールによるフィルタリング
次の例では、readWrite testフィルターを使用して、 から継承するロールを持つユーザーを含む、readWrite データベースで ロールを持つユーザーによる操作を監査します。
{ roles: { role: "readWrite", db: "test" } }監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --auditDestination file --auditFilter '{ roles: { role: "readWrite", db: "test" } }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ roles: { role: "readWrite", db: "test" } }'読み取り操作と書込み (write) 操作でのフィルタリング
To capture read and write operations in the audit, you must also enable the audit system to log authorization successes using the auditAuthorizationSuccess parameter. [1]
注意
auditAuthorizationSuccessを有効にすると、認可の失敗のみをログに記録する場合よりもパフォーマンスが低下します。
このフィルターは、複数の読み取りおよび書込み操作を監査します。
{ atype: "authCheck", "param.command": { $in: [ "find", "insert", "delete", "update", "findAndModify" ] }}監査された操作には、次のものが含まれます。
監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --setParameter auditAuthorizationSuccess=true --auditDestination file --auditFilter '{ atype: "authCheck", "param.command": { $in: [ "find", "insert", "delete", "update", "findAndModify" ] } }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ atype: "authCheck", "param.command": { $in: [ "find", "insert", "delete", "update", "findAndModify" ] } }'setParameter: { auditAuthorizationSuccess: true }コレクションの読み取り操作と書込み (write) 操作でフィルタリング
To capture read and write operations in the audit, you must also enable the audit system to log authorization successes using the auditAuthorizationSuccess parameter. [1]
注意
auditAuthorizationSuccessを有効にすると、認可の失敗のみをログに記録する場合よりもパフォーマンスが低下します。
このフィルタは、 testデータベース内のordersコレクションに対する複数の読み取りおよび書込み操作を監査します。
{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findAndModify" ] }}監査された操作には、次のものが含まれます。
監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --setParameter auditAuthorizationSuccess=true --auditDestination file --auditFilter '{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findAndModify" ] } }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findAndModify" ] } }'setParameter: { auditAuthorizationSuccess: true }OCSF スキーマログメッセージのフィルタリング
MongoDB 8.0 以降、MongoDB はログメッセージを OCSF 形式で書き込むことができます。OCSF スキーマには、デフォルトの mongo スキーマとは異なるフィールドが含まれています。
次の監査フィルターは、OCSF スキーマに記録されているネットワークアクティビティのアクションをキャプチャします。
{ category_uid: 4 }監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --setParameter auditAuthorizationSuccess=true --auditDestination file --auditFilter '{ category_uid: 4 }' --auditFormat JSON --auditSchema OCSF --auditPath data/db/auditLog.json構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: JSON path: data/db/auditLog.json filter: '{ category_uid: 4 }' schema: OCSFsetParameter: { auditAuthorizationSuccess: true }OCSF ログメッセージの詳細については、「OCSF スキーマ監査メッセージ」を参照してください。
最上位クエリ演算子の指定($or)
複数の監査メッセージ フィールドでフィルタリングするには、 $orのような最上位のクエリ演算子を指定できます。 たとえば、次のフィルターは、 atypeがauthenticateであるか、 または 操作がreadWriteロールを持つユーザーによって実行された操作をキャプチャします。
{ $or: [ { atype: "authenticate" }, { "roles.role": "readWrite" } ]}監査フィルターを指定するには、フィルター ドキュメントを一重引用符で囲み、ドキュメントを文字列として渡します。
mongod --dbpath data/db --auth --setParameter auditAuthorizationSuccess=true --auditDestination file --auditFilter '{ $or: [ { atype: "authenticate" }, { "roles.role": "readWrite" } ] }' --auditFormat BSON --auditPath data/db/auditLog.bson構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ipを指定します。
構成ファイルで監査フィルターを指定するには、構成ファイルの YAML 形式を使用する必要があります。
storage: dbPath: data/dbsecurity: authorization: enabledauditLog: destination: file format: BSON path: data/db/auditLog.bson filter: '{ $or: [ { atype: "authenticate" }, { "roles.role": "readWrite" } ] }'詳細
| [1] | (1, 2) You can enable auditAuthorizationSuccess parameter without enabling --auth; however, all operations will return success for authorization checks. |