-
Notifications
You must be signed in to change notification settings - Fork 108
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes for NR CSEC module support #819
base: develop-k2-integration
Are you sure you want to change the base?
Changes from 50 commits
b5711e3
20d5117
dfbcf0a
f399c3a
c3232c9
206160e
dd7bd2d
7578dc0
857f3f9
f0c30a1
42d621a
e700fb2
1d5964b
a2da1ba
163645b
52e59e2
a609df8
30a280a
a5dd418
5f226e8
6d515e8
34d610b
e02eacf
385b966
ded8f48
5298430
a2f385e
2f46837
a8a7a88
d925658
a741c2d
0ec4fe4
f5a98ba
524b315
46637fe
5be1836
ac7e712
a028082
49d7a99
28d789a
1f780c2
f0505f8
5fb7a42
11c0049
1313de9
093fd3a
88cb32e
7a43a7f
33b51fc
0c2cbbc
7041783
f192c24
3def8b0
90ccb4c
668b0a9
abb6405
ab92daf
4422b95
4da4612
658f818
57720fd
a7dfe33
33aa111
e707cc0
ab590a2
db07523
c2fd5e3
9883c2b
998b035
66c2e19
e663c36
3bdb013
6644846
ee92363
53fc51a
2f580af
a7080e9
56ea815
a248688
08eec5e
4b3768b
17f8937
8ebe9a3
238b64d
dc87bd3
7d76243
f1a673e
6a6228f
62abb45
399c81f
3988ecc
0baf8d5
faaccd0
b1be563
e371b02
eff66b5
17cd48d
eef6916
d577a69
13e9891
43160af
cc3e285
5996de6
4721025
2191684
b2512eb
b12f7be
b2e9e74
72aa6e8
f939014
5cba84e
a7e4870
3980127
5eb1095
fdaa4be
1986366
b6a9121
374bc67
6e0b12e
55144b1
007be52
cd74bc4
030cfc9
140bb54
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -329,6 +329,13 @@ def _process_configuration(section): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "ca_bundle_path", "get", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "audit_log_file", "get", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "monitor_mode", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.agent.enabled", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.enabled", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.mode", "get", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.validator_service_url", "get", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.detection.rci.enabled", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.detection.rxss.enabled", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "security.detection.deserialization.enabled", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "developer_mode", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "high_security", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_process_setting(section, "capture_params", "getboolean", None) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -3169,6 +3176,23 @@ def _setup_agent_console(): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
newrelic.core.agent.Agent.run_on_startup(_startup_agent_console) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _setup_security_module(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"""Initiates k2 security module and adds a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
callback to agent startup to propagate NR config | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if not _settings.security.agent.enabled: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from newrelic_security.api.agent import Agent as SecurityAgent | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# initialize security agent | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
security_agent = SecurityAgent() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# create a callback to reinitialise the security module | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
newrelic.core.agent.Agent.run_on_startup(security_agent.refresh_agent) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except Exception as k2error: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_logger.error("K2 Startup failed with error %s", k2error) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can we change the language here to use |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For compliance I think we can't run any of this until high security mode has a chance to disable it. We'll need to wait until after connect and registration, and also use application instance settings instead of the global settings (which don't include server side fixups like high security). I think this callback should do the trick, but that depends on if
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should DEFINITELY add tests for this, somehow. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The above code suggestion will also need the application instance passed to the call to |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def initialize( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
config_file=None, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
environment=None, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -3187,6 +3211,8 @@ def initialize( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_load_configuration(config_file, environment, ignore_errors, log_file, log_level) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_setup_security_module() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if _settings.monitor_mode or _settings.developer_mode: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_settings.enabled = True | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_setup_instrumentation() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -279,6 +279,30 @@ class ApplicationLoggingLocalDecoratingSettings(Settings): | |
pass | ||
|
||
|
||
class SecuritySettings(Settings): | ||
pass | ||
|
||
|
||
class SecurityDetectionSettings(Settings): | ||
pass | ||
|
||
|
||
class SecurityAgentSettings(Settings): | ||
pass | ||
|
||
|
||
class SecurityDetectionRCISettings(Settings): | ||
pass | ||
|
||
|
||
class SecurityDetectionRXSSSettings(Settings): | ||
pass | ||
|
||
|
||
class SecurityDetectionDeserializationSettings(Settings): | ||
pass | ||
|
||
|
||
class InfiniteTracingSettings(Settings): | ||
_trace_observer_host = None | ||
|
||
|
@@ -395,6 +419,12 @@ class EventHarvestConfigHarvestLimitSettings(Settings): | |
_settings.message_tracer = MessageTracerSettings() | ||
_settings.process_host = ProcessHostSettings() | ||
_settings.rum = RumSettings() | ||
_settings.security = SecuritySettings() | ||
_settings.security.agent = SecurityAgentSettings() | ||
_settings.security.detection = SecurityDetectionSettings() | ||
_settings.security.detection.deserialization = SecurityDetectionDeserializationSettings() | ||
_settings.security.detection.rci = SecurityDetectionRCISettings() | ||
_settings.security.detection.rxss = SecurityDetectionRXSSSettings() | ||
_settings.serverless_mode = ServerlessModeSettings() | ||
_settings.slow_sql = SlowSqlSettings() | ||
_settings.span_events = SpanEventSettings() | ||
|
@@ -412,7 +442,6 @@ class EventHarvestConfigHarvestLimitSettings(Settings): | |
_settings.transaction_tracer.attributes = TransactionTracerAttributesSettings() | ||
_settings.utilization = UtilizationSettings() | ||
|
||
|
||
_settings.log_file = os.environ.get("NEW_RELIC_LOG", None) | ||
_settings.audit_log_file = os.environ.get("NEW_RELIC_AUDIT_LOG", None) | ||
|
||
|
@@ -840,6 +869,16 @@ def default_host(license_key): | |
"NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED", default=False | ||
) | ||
|
||
_settings.security.agent.enabled = _environ_as_bool("NEW_RELIC_SECURITY_AGENT_ENABLED", False) | ||
_settings.security.enabled = _environ_as_bool("NEW_RELIC_SECURITY_ENABLED", False) | ||
_settings.security.mode = os.environ.get("NEW_RELIC_SECURITY_MODE", "IAST") | ||
_settings.security.validator_service_url = os.environ.get("NEW_RELIC_SECURITY_VALIDATOR_SERVICE_URL", None) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We may want to provide |
||
_settings.security.detection.rci.enabled = _environ_as_bool("NEW_RELIC_SECURITY_DETECTION_RCI_ENABLED", True) | ||
_settings.security.detection.rxss.enabled = _environ_as_bool("NEW_RELIC_SECURITY_DETECTION_RXSS_ENABLED", True) | ||
_settings.security.detection.deserialization.enabled = _environ_as_bool( | ||
"NEW_RELIC_SECURITY_DETECTION_DESERIALIZATION_ENABLED", True | ||
) | ||
|
||
|
||
def global_settings(): | ||
"""This returns the default global settings. Generally only used | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there error handling already in the security agent to handle
security.mode
or thesecurity.validator_service_url
settings not being configured by the user?