Atlas プラットフォームのアクティビティを監視するには、 監査 を使用します。
Atlas 監査の機能
M10+
クラスターで使用すると、データベース監査により、複数のユーザーによる配置のシステム アクティビティを追跡できます。
Atlas 管理者は、 MongoDBでカスタムJSON監査するフィルターを作成し、システム全体で監査される内容を正確に制御できます。
このアプローチにより、どのアクション、データベースユーザー、および Atlas ロールを監視する必要があるかを正確に指定できるため、 Atlas UIの標準フィルタービルダと比較して、監査プロセスをより細かい制御が可能になります。
手動監査構成 を使用すると、Atlas に文書化されたシステムイベントアクションのほぼすべてを監視できます。
包括的なデータベース監査機能は、以下の詳細な追跡機能を提供します。
DDL (データ定義言語) 操作
DML(データ操作言語)操作
DCL(データ制御言語)操作。
これにより、データベーススキーマの変更、データの変更、および調整権限に対する完全な可視性が提供されます。
完全なイベントリストや実用的な構成例を含む実装ガイダンスについては、 MongoDB監査 と 監査フィルターの例 のドキュメントを参照してください。追加の設定手順については、「 データベース監査の設定 」セクションを参照してください。
Atlas での監査フィルターの作成と有効化
監査するフィルターを作成 すると、監査を懸念する特定の操作のみに制限できます。操作の監査を有効にすると、Atlas はすべての監査可能な操作を、監査イベント アクション、詳細、結果 の詳細として記録します。
Atlas がレコード必要があるイベントを制限するには、イベント監査するフィルター を指定できます。
次のドキュメントでは、監査をtest
データベースに対して発生する認証操作のみに制限する監査するフィルターを定義します。詳細については、 「 監査フィルターの構成 」を参照してください。
{ "atype": "authenticate", "param.db": "test" }
監査するフィルターを有効にするには、--enabled
フラグを指定して atlas auditing update コマンドを実行し、監査するフィルタードキュメントを一重引用符で指定して、ドキュメントをstring として渡します。
atlas auditing update --enabled --auditFilter '{"atype": "authenticate", "param.db": "test"}'
カスタム監査するフィルターを使用すると、管理された {atlas-ui+} 監査フィルター ビルダー を使用せずに、イベント監査を手動で細かく制御できるようになります。 Atlas は、カスタム フィルターが有効なJSON構文を使用しているかどうかのみをチェックし、フィルターの機能を検証またはテストしません。
監査するフィルタードキュメント:
監査するイベントメッセージ内の 1 つ以上のフィールドに一致するクエリに解決される必要があります。
必要な監査するメッセージを一致させるために、 クエリ演算子 と等価条件の組み合わせを使用できます。
Atlas は、 MongoDB監査をカスタマイズするJSON形式の監査するフィルターの指定をサポートしています。
カスタム フィルターにJSON構成ファイルを構成することも便利です。これは、大きなフィルターを作成する必要がある場合、フィルターの構成を 別のファイルに保存するとフィルターの管理と維持が容易になるためです。
次の Atlas CLI コマンドは、指定された JSON構成ファイルで定義されている監査するフィルターを有効にします。
atlas auditing update --enabled -f filter.json
Atlas 監査に関する推奨事項
次の推奨事項は、すべての 配置パラダイムに適用されます。
クラスターをプロビジョニングするときに、データベース監査を設定することをお勧めします。
データベース監査により、クラスターリソースの使用量と運用コストが増加します。
最適なパフォーマンスを維持し、コストを管理するには、重要なユーザーのみを監査し、必要ない開発環境では監査をオフにすることを検討してください。
ヘルスチェックや金融サービスなどの特定の業界では、コンプライアンスの理由から、開発環境で監査を有効にしておくことが選択される場合があります。
少なくとも次のイベントを監査することをお勧めします。
ログオン失敗
セッション アクティビティ
ログオンとログオフ
不正な機能を実行しようとすると、
パスワードの変更
データベースユーザーアクセスの変更
DDL およびシステム構成の保存手順
ネイティブ監査の修正
バックアップまたは復元操作の実行
DBMS ネイティブ監査設定の変更
セキュリティの変更
データベースの起動コマンドと停止コマンドの実行
オートメーションの例: Atlas 監査
Tip
すべてのピリオドにわたって推奨事項を強制する Terraform の例については、 Githubの次のいずれかの例を参照してください。
次の例では、Atlas のオートメーションツールを使用してログを検索およびダウンロードし、監査を構成する方法を示します。
監査構成の更新
プロジェクトの監査する構成を更新するには、 atlas auditing update コマンド を使用し、新しい監査するフィルターを指定します。次のコマンドは、既存の監査するフィルター構成を、プロジェクト内の既知のユーザーのすべての認証イベントを監査する新しいフィルターに置き換えます。
atlas auditing update --enabled --auditFilter '{"atype": "authenticate"}'
監査構成の説明
atlas auditing describe コマンドを実行して、指定されたプロジェクトの監査構成を返します。
atlas auditing describe --output json
次の例は、配置で監査を有効にする方法を示しています。Terraform でリソースを作成する前に、次の操作を行う必要があります。
支払い組織を作成し、支払い組織のAPIキーを作成します。ターミナルで次のコマンドを実行中、公開鍵と秘密鍵を環境変数として保存します。
export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>" export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
監査の有効化と監査フィルターの作成
監査するフィルターを作成することで、文書化されたシステムイベントアクションのほとんどの手動監査を構成できます。監査するフィルターの構成の詳細については、「 監査フィルターの構成 」を参照してください。
次の Terraformスクリプトは、包括的なデータベース監査を備えた完全なMongoDB Atlasインフラストラクチャを設定します。スクリプト:
組織内に新しいプロジェクトを作成し、米国東部リージョンのAWSに配置された 3 ノードのレプリカセットクラスター(M10 インスタンス)をプロビジョニングします。
認証イベント、ユーザー管理操作、データ操作やクエリ操作などのさまざまなデータベースコマンドをモニターするJSONフィルターを使用して詳細な監査機能を有効にします。
監査構成は、管理者と外部データベースユーザーを具体的に対象としていますが、認証試行やロールの変更、一般的なデータベースコマンド(find
、insert
、update
、delete
操作など)などの重要な操作を追跡します。
Add the MongoDB Atlas Provider terraform { required_providers { mongodbatlas = { source = "mongodb/mongodbatlas" version = "1.34.0" } } } Configure the MongoDB Atlas Provider provider "mongodbatlas" { public_key = var.mongodbatlas_public_key private_key = var.mongodbatlas_private_key } Create a Project resource "mongodbatlas_project" "this" { org_id = var.atlas_org_id name = var.atlas_project_name } Create an Atlas Advanced Cluster resource "mongodbatlas_advanced_cluster" "atlas-cluster" { project_id = mongodbatlas_project.atlas-project.id name = "ClusterPortalProd" cluster_type = "REPLICASET" mongo_db_major_version = "8.0" replication_specs { region_configs { electable_specs { instance_size = "M10" node_count = 1 } provider_name = "AWS" priority = 7 region_name = "US_WEST_1" } } Advanced configuration backup_enabled = true pit_enabled = true version_release_system = "LTS" } Create comprehensive auditing configuration to capture all possible audit events resource "mongodbatlas_auditing" "atlas-auditing" { project_id = mongodbatlas_project.atlas-project.id Comprehensive audit filter to capture all possible audit events audit_filter = jsonencode({ "$or" = [ # Capture all authentication events { "atype" = { "$in" = [ "authenticate", "authCheck", "logout" ] } }, # Capture all authorization events { "atype" = "authCheck" }, # Capture all CRUD operations { "atype" = "authCheck", "param.command" = { "$in" = [ # Read operations "find", "getMore", "count", "distinct", "aggregate", "group", "mapReduce", "geoNear", "geoSearch", "parallelCollectionScan", "eval", "getLastError", "getPrevError", "resetError", # Write operations "insert", "update", "delete", "findAndModify", "save", # Index operations "createIndexes", "dropIndexes", "listIndexes", "reIndex", # Collection operations "create", "drop", "listCollections", "collMod", "convertToCapped", "emptycapped", "renameCollection", # Database operations "dropDatabase", "listDatabases", "copydb", "clone", # GridFS operations "filemd5" ] } }, # Capture all DDL (Data Definition Language) operations { "atype" = "authCheck", "param.command" = { "$in" = [ "create", "drop", "createIndexes", "dropIndexes", "collMod", "renameCollection", "dropDatabase", "createCollection", "dropCollection" ] } }, # Capture all user and role management operations { "atype" = "authCheck", "param.command" = { "$in" = [ "createUser", "dropUser", "dropAllUsersFromDatabase", "updateUser", "grantRolesToUser", "revokeRolesFromUser", "createRole", "updateRole", "dropRole", "dropAllRolesFromDatabase", "grantRolesToRole", "revokeRolesFromRole", "grantPrivilegesToRole", "revokePrivilegesFromRole" ] } }, # Capture replica set operations { "atype" = "authCheck", "param.command" = { "$in" = [ "replSetGetStatus", "replSetInitiate", "replSetReconfig", "replSetStepDown", "replSetSyncFrom", "replSetFreeze", "replSetMaintenance", "replSetGetConfig" ] } }, # Capture sharding operations { "atype" = "authCheck", "param.command" = { "$in" = [ "shardCollection", "addShard", "removeShard", "movePrimary", "enableSharding", "split", "moveChunk", "mergeChunks" ] } }, # Capture administrative operations { "atype" = "authCheck", "param.command" = { "$in" = [ "shutdown", "fsync", "getParameter", "setParameter", "serverStatus", "dbStats", "collStats", "currentOp", "killOp", "listCommands", "buildInfo", "hostInfo", "connectionStatus", "getCmdLineOpts", "logRotate", "planCacheClear", "planCacheListFilters", "planCacheSetFilter", "planCacheClearFilters" ] } }, # Capture diagnostic operations { "atype" = "authCheck", "param.command" = { "$in" = [ "explain", "profile", "validate", "dbHash", "ping", "ismaster", "isMaster", "hello" ] } }, # Capture connection and session events { "atype" = { "$in" = [ "createSession", "endSession", "refreshSession" ] } }, # Capture transaction events { "atype" = "authCheck", "param.command" = { "$in" = [ "abortTransaction", "commitTransaction", "startTransaction" ] } }, # Capture change stream events { "atype" = "authCheck", "param.command" = { "$in" = [ "aggregate" ] }, "param.pipeline" = { "$elemMatch" = { "$changeStream" = { "$exists" = true } } } } ] }) Enable comprehensive auditing settings audit_authorization_success = true # Audit both successful and failed operations enabled = true # Enable auditing } Variables variable "mongodbatlas_public_key" { default = "" description = "MongoDB Atlas Public Key" type = string sensitive = true } variable "mongodbatlas_private_key" { default = "" description = "MongoDB Atlas Private Key" type = string sensitive = true } variable "atlas_org_id" { default = "" description = "MongoDB Atlas Organization ID" type = string } variable "atlas_project_name" { description = "MongoDB Atlas Project Name" type = string default = "Atlas Auditing Example" } Outputs output "cluster_connection_string" { description = "Connection string for the Atlas cluster" value = mongodbatlas_advanced_cluster.atlas-cluster.connection_strings[0].standard_srv sensitive = true } output "cluster_id" { description = "Atlas cluster ID" value = mongodbatlas_advanced_cluster.atlas-cluster.cluster_id } output "project_id" { description = "Atlas project ID" value = mongodbatlas_project.atlas-project.id } output "auditing_enabled" { description = "Whether auditing is enabled" value = mongodbatlas_auditing.atlas-auditing.enabled }