Module: Mongo::Monitoring::Event::Secure
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Defined in: | lib/mongo/monitoring/event/secure.rb |
Overview
Provides behavior to redact sensitive information from commands and replies.
Constant Summary
-
REDACTED_COMMANDS =
The list of commands that has the data redacted for security.
[ 'authenticate', 'saslStart', 'saslContinue', 'getnonce', 'createUser', 'updateUser', 'copydbgetnonce', 'copydbsaslstart', 'copydb' ].freeze
Instance Method Summary
-
#compression_allowed?(command_name) ⇒ true, false
Is compression allowed for a given command message.
-
#redacted(command_name, document) ⇒ BSON::Document
Redact secure information from the document if:
-
#sensitive?(command_name:, document:) ⇒ true | false
Check whether the command is sensitive in terms of command monitoring spec.
Instance Method Details
#compression_allowed?(command_name) ⇒ true
, false
Is compression allowed for a given command message.
# File 'lib/mongo/monitoring/event/secure.rb', line 106
def compression_allowed?(command_name) @compression_allowed ||= !REDACTED_COMMANDS.include?(command_name.to_s) end
#redacted(command_name, document) ⇒ BSON::Document
Redact secure information from the document if:
- its command is in the sensitive commands;
- its command is a hello/legacy hello command, and
speculative authentication is enabled;
- corresponding started event is sensitive.
# File 'lib/mongo/monitoring/event/secure.rb', line 83
def redacted(command_name, document) if %w(1 true yes).include?(ENV['MONGO_RUBY_DRIVER_UNREDACT_EVENTS']&.downcase) document elsif respond_to?(:started_event) && started_event.sensitive return BSON::Document.new elsif sensitive?(command_name: command_name, document: document) BSON::Document.new else document end end
#sensitive?(command_name:, document:) ⇒ true
| false
Check whether the command is sensitive in terms of command monitoring spec. A command is detected as sensitive if it is in the list or if it is a hello/legacy hello command, and speculative authentication is enabled.
# File 'lib/mongo/monitoring/event/secure.rb', line 52
def sensitive?(command_name:, document:) if REDACTED_COMMANDS.include?(command_name.to_s) true elsif %w(hello ismaster isMaster).include?(command_name.to_s) && document['speculativeAuthenticate'] then # According to Command Monitoring spec,for hello/legacy hello commands # when speculativeAuthenticate is present, their commands AND replies # MUST be redacted from the events. # See https://github.com/mongodb/specifications/blob/master/source/command-logging-and-monitoring/command-logging-and-monitoring.md#security true else false end end