assemblyline-core 4.5.0.75__tar.gz → 4.5.0.76__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of assemblyline-core might be problematic. Click here for more details.
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/PKG-INFO +1 -1
- assemblyline_core-4.5.0.76/assemblyline_core/VERSION +1 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/controllers/docker_ctl.py +2 -2
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/controllers/kubernetes_ctl.py +26 -11
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/scaler_server.py +1 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/updater/run_updater.py +15 -3
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/PKG-INFO +1 -1
- assemblyline_core-4.5.0.75/assemblyline_core/VERSION +0 -1
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/LICENCE.md +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/README.md +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/alerter/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/alerter/processing.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/alerter/run_alerter.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/archiver/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/archiver/run_archiver.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/badlist_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/__main__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/dispatcher.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/schedules.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/timeout.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/expiry/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/expiry/run_expiry.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/__main__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/constants.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/ingester.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/es_metrics.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/heartbeat_formatter.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/helper.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/metrics_server.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/run_heartbeat_manager.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/run_metrics_aggregator.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/run_statistics_aggregator.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/plumber/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/plumber/run_plumber.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/creator/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/creator/run.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/creator/run_worker.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/loader/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/loader/run.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/loader/run_worker.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/replay.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/safelist_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/collection.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/controllers/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/controllers/interface.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/run_scaler.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/server_base.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/signature_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/submission_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/tasking_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/updater/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/updater/helper.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/crawler.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/department_map.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/safelist.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/stream_map.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/worker.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/workflow/__init__.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/workflow/run_workflow.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/SOURCES.txt +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/dependency_links.txt +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/requires.txt +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/top_level.txt +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/setup.cfg +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/setup.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_alerter.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_badlist_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_dispatcher.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_expiry.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_plumber.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_replay.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_safelist_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_scaler.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_scheduler.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_signature_client.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_simulation.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_vacuum.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_worker_ingest.py +0 -0
- {assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/test/test_worker_submit.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4.5.0.76
|
|
@@ -189,10 +189,10 @@ class DockerController(ControllerInterface):
|
|
|
189
189
|
volumes = {row[0]: {'bind': row[1], 'mode': 'ro'} for row in self.global_mounts}
|
|
190
190
|
|
|
191
191
|
# Define environment variables
|
|
192
|
-
env = [f'{
|
|
193
|
-
env += [f'{name}={os.environ[name]}' for name in INHERITED_VARIABLES if name in os.environ]
|
|
192
|
+
env = [f'{name}={os.environ[name]}' for name in INHERITED_VARIABLES if name in os.environ]
|
|
194
193
|
env += [f'LOG_LEVEL={self.log_level}', f'AL_SERVICE_NAME={service_name}']
|
|
195
194
|
env += [f'{_n}={_v}' for _n, _v in self._service_limited_env[service_name].items()]
|
|
195
|
+
env += [f'{_e.name}={_e.value}' for _e in cfg.environment]
|
|
196
196
|
if prof.privileged:
|
|
197
197
|
env.append('PRIVILEGED=true')
|
|
198
198
|
volumes.update({row[0]: {'bind': row[1], 'mode': 'ro'} for row in self.core_mounts})
|
|
@@ -26,7 +26,8 @@ from kubernetes.client import V1Deployment, V1DeploymentSpec, V1PodTemplateSpec,
|
|
|
26
26
|
V1PersistentVolumeClaimSpec, V1NetworkPolicy, V1NetworkPolicySpec, V1NetworkPolicyEgressRule, V1NetworkPolicyPeer, \
|
|
27
27
|
V1NetworkPolicyIngressRule, V1Secret, V1SecretVolumeSource, V1LocalObjectReference, V1Service, \
|
|
28
28
|
V1ServiceSpec, V1ServicePort, V1PodSecurityContext, V1Probe, V1ExecAction, V1SecurityContext, \
|
|
29
|
-
V1Affinity, V1NodeAffinity, V1NodeSelector, V1NodeSelectorTerm, V1NodeSelectorRequirement, V1Toleration
|
|
29
|
+
V1Affinity, V1NodeAffinity, V1NodeSelector, V1NodeSelectorTerm, V1NodeSelectorRequirement, V1Toleration, \
|
|
30
|
+
V1Capabilities, V1SeccompProfile
|
|
30
31
|
from kubernetes.client.rest import ApiException
|
|
31
32
|
from assemblyline.odm.models.service import DependencyConfig, DockerConfig, PersistentVolume
|
|
32
33
|
|
|
@@ -45,6 +46,14 @@ SERVICE_LIVENESS_TIMEOUT = int(os.environ.get('SERVICE_LIVENESS_TIMEOUT', 60))
|
|
|
45
46
|
UNPRIVILEGED_SERVICE_ACCOUNT_NAME = os.environ.get('UNPRIVILEGED_SERVICE_ACCOUNT_NAME', None)
|
|
46
47
|
PRIVILEGED_SERVICE_ACCOUNT_NAME = os.environ.get('PRIVILEGED_SERVICE_ACCOUNT_NAME', None)
|
|
47
48
|
CERTIFICATE_VALIDITY_PERIOD = int(os.environ.get('CERTIFICATE_VALIDITY_PERIOD', '36500'))
|
|
49
|
+
RESTRICTED_POD_SECURITY_CONTEXT = V1SecurityContext(
|
|
50
|
+
run_as_user=1000,
|
|
51
|
+
run_as_group=1000,
|
|
52
|
+
capabilities=V1Capabilities(drop=["ALL"]),
|
|
53
|
+
run_as_non_root=True,
|
|
54
|
+
allow_privilege_escalation=False,
|
|
55
|
+
seccomp_profile=V1SeccompProfile(type="RuntimeDefault")
|
|
56
|
+
)
|
|
48
57
|
|
|
49
58
|
AL_ROOT_CA = os.environ.get('AL_ROOT_CA', '/etc/assemblyline/ssl/al_root-ca.crt')
|
|
50
59
|
AL_ROOT_CA_PK = os.environ.get('AL_ROOT_CA_PK', '/etc/assemblyline/ssl/al_root-ca.key')
|
|
@@ -241,7 +250,8 @@ def parse_cpu(string: str) -> float:
|
|
|
241
250
|
class KubernetesController(ControllerInterface):
|
|
242
251
|
def __init__(self, logger, namespace: str, prefix: str, priority: str, dependency_priority: str,
|
|
243
252
|
cpu_reservation: float, linux_node_selector: Selector, labels=None, log_level="INFO", core_env={},
|
|
244
|
-
default_service_account=None, cluster_pod_list=True,
|
|
253
|
+
default_service_account=None, cluster_pod_list=True, enable_pod_security=False,
|
|
254
|
+
default_service_tolerations=[],
|
|
245
255
|
priv_labels=None):
|
|
246
256
|
# Try loading a kubernetes connection from either the fact that we are running
|
|
247
257
|
# inside of a cluster, or have a config file that tells us how
|
|
@@ -287,6 +297,7 @@ class KubernetesController(ControllerInterface):
|
|
|
287
297
|
self._service_limited_env: dict[str, dict[str, str]] = defaultdict(dict)
|
|
288
298
|
self.default_service_account: Optional[str] = default_service_account
|
|
289
299
|
self.cluster_pod_list = cluster_pod_list
|
|
300
|
+
self.security_policy = RESTRICTED_POD_SECURITY_CONTEXT if enable_pod_security else None
|
|
290
301
|
self.default_service_tolerations = [V1Toleration(**toleration.as_primitives()) for toleration in default_service_tolerations]
|
|
291
302
|
|
|
292
303
|
# A record of previously reported events so that we don't report the same message repeatedly, fill it with
|
|
@@ -396,7 +407,8 @@ class KubernetesController(ControllerInterface):
|
|
|
396
407
|
"""Tell the controller about a service profile it needs to manage."""
|
|
397
408
|
self._create_deployment(profile.name, self._deployment_name(profile.name),
|
|
398
409
|
profile.container_config, profile.shutdown_seconds, scale,
|
|
399
|
-
change_key=profile.config_blob, core_mounts=profile.privileged
|
|
410
|
+
change_key=profile.config_blob, core_mounts=profile.privileged,
|
|
411
|
+
security_context=self.security_policy),
|
|
400
412
|
self._external_profiles[profile.name] = profile
|
|
401
413
|
|
|
402
414
|
def _loop_forever(self, function):
|
|
@@ -679,7 +691,7 @@ class KubernetesController(ControllerInterface):
|
|
|
679
691
|
return self._quota_mem_limit - self._get_pod_used_namespace_ram(), self._quota_mem_limit
|
|
680
692
|
return self._node_pool_max_ram - self._get_pod_used_ram(), self._node_pool_max_ram
|
|
681
693
|
|
|
682
|
-
def _create_containers(self, service_name: str, deployment_name: str, container_config, mounts,
|
|
694
|
+
def _create_containers(self, service_name: str, deployment_name: str, container_config, mounts, security_context,
|
|
683
695
|
core_container=False):
|
|
684
696
|
cores = container_config.cpu_cores
|
|
685
697
|
memory = container_config.ram_mb
|
|
@@ -701,8 +713,6 @@ class KubernetesController(ControllerInterface):
|
|
|
701
713
|
environment_variables += [V1EnvVar(name=_n, value=_v) for _n, _v in self.core_env.items()]
|
|
702
714
|
environment_variables.extend(self.core_secret_env)
|
|
703
715
|
environment_variables.append(V1EnvVar(name='PRIVILEGED', value='true'))
|
|
704
|
-
# Overwrite them with configured special environment variables
|
|
705
|
-
environment_variables += [V1EnvVar(name=_e.name, value=_e.value) for _e in container_config.environment]
|
|
706
716
|
# Overwrite those with special hard coded variables
|
|
707
717
|
environment_variables += [
|
|
708
718
|
V1EnvVar(name='AL_SERVICE_NAME', value=service_name),
|
|
@@ -711,6 +721,8 @@ class KubernetesController(ControllerInterface):
|
|
|
711
721
|
# Overwrite ones defined dynamically by dependency container launches
|
|
712
722
|
for name, value in self._service_limited_env[service_name].items():
|
|
713
723
|
environment_variables.append(V1EnvVar(name=name, value=value))
|
|
724
|
+
# Overwrite them with configured special environment variables
|
|
725
|
+
environment_variables += [V1EnvVar(name=_e.name, value=_e.value) for _e in container_config.environment]
|
|
714
726
|
image_pull_policy = 'Always' if DEV_MODE else 'IfNotPresent'
|
|
715
727
|
return [V1Container(
|
|
716
728
|
name=deployment_name,
|
|
@@ -719,6 +731,7 @@ class KubernetesController(ControllerInterface):
|
|
|
719
731
|
env=environment_variables,
|
|
720
732
|
image_pull_policy=image_pull_policy,
|
|
721
733
|
volume_mounts=mounts,
|
|
734
|
+
security_context=security_context,
|
|
722
735
|
resources=V1ResourceRequirements(
|
|
723
736
|
limits={'cpu': cores, 'memory': f'{memory}Mi'},
|
|
724
737
|
requests={'cpu': cores*self.cpu_reservation, 'memory': f'{min_memory}Mi'},
|
|
@@ -731,7 +744,8 @@ class KubernetesController(ControllerInterface):
|
|
|
731
744
|
shutdown_seconds: int, scale: int, labels: dict[str, str] = None,
|
|
732
745
|
volumes: list[V1Volume] = None, mounts: list[V1VolumeMount] = None,
|
|
733
746
|
core_mounts: bool = False, change_key: str = '', high_priority: bool = False,
|
|
734
|
-
deployment_strategy: V1DeploymentStrategy = V1DeploymentStrategy()
|
|
747
|
+
deployment_strategy: V1DeploymentStrategy = V1DeploymentStrategy(),
|
|
748
|
+
security_context: V1SecurityContext = None):
|
|
735
749
|
# Build a cache key to check for changes, just trying to only patch what changed
|
|
736
750
|
# will still potentially result in a lot of restarts due to different kubernetes
|
|
737
751
|
# systems returning differently formatted data
|
|
@@ -742,7 +756,8 @@ class KubernetesController(ControllerInterface):
|
|
|
742
756
|
key_labels += sorted(deployment_labels.items())
|
|
743
757
|
change_key = str(f"n={deployment_name}{change_key}dc={docker_config}ss={shutdown_seconds}"
|
|
744
758
|
f"l={key_labels}v={volumes}m={mounts}cm={core_mounts}senv={svc_env}"
|
|
745
|
-
f"nodes={field_selector or ''}{label_selector or ''}"
|
|
759
|
+
f"nodes={field_selector or ''}{label_selector or ''}"
|
|
760
|
+
f"security_context={security_context or ''}")
|
|
746
761
|
self.logger.debug(f"{deployment_name} actual change_key: {change_key}")
|
|
747
762
|
change_key = str(hash(change_key))
|
|
748
763
|
|
|
@@ -847,7 +862,7 @@ class KubernetesController(ControllerInterface):
|
|
|
847
862
|
init_containers=init_containers,
|
|
848
863
|
volumes=all_volumes,
|
|
849
864
|
containers=self._create_containers(service_name, deployment_name, docker_config,
|
|
850
|
-
all_mounts, core_container=core_mounts),
|
|
865
|
+
all_mounts, security_context, core_container=core_mounts),
|
|
851
866
|
priority_class_name=self.dependency_priority if high_priority else self.priority,
|
|
852
867
|
termination_grace_period_seconds=shutdown_seconds,
|
|
853
868
|
security_context=V1PodSecurityContext(fs_group=1000),
|
|
@@ -952,7 +967,7 @@ class KubernetesController(ControllerInterface):
|
|
|
952
967
|
def restart(self, service):
|
|
953
968
|
self._create_deployment(service.name, self._deployment_name(service.name), service.container_config,
|
|
954
969
|
service.shutdown_seconds, self.get_target(service.name), core_mounts=service.privileged,
|
|
955
|
-
change_key=service.config_blob)
|
|
970
|
+
change_key=service.config_blob, security_context=self.security_policy)
|
|
956
971
|
|
|
957
972
|
def get_running_container_names(self):
|
|
958
973
|
pods = self.api.list_pod_for_all_namespaces(field_selector='status.phase==Running',
|
|
@@ -1135,7 +1150,7 @@ class KubernetesController(ControllerInterface):
|
|
|
1135
1150
|
self._create_deployment(service_name, deployment_name, spec.container,
|
|
1136
1151
|
30, 1, labels, volumes=volumes, mounts=mounts, high_priority=True,
|
|
1137
1152
|
core_mounts=spec.run_as_core, change_key=change_key,
|
|
1138
|
-
deployment_strategy=deployment_strategy)
|
|
1153
|
+
deployment_strategy=deployment_strategy, security_context=self.security_policy)
|
|
1139
1154
|
|
|
1140
1155
|
# Setup a service to direct to the deployment
|
|
1141
1156
|
try:
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/scaler_server.py
RENAMED
|
@@ -319,6 +319,7 @@ class ScalerServer(ThreadedCoreBase):
|
|
|
319
319
|
log_level=self.config.logging.log_level,
|
|
320
320
|
core_env=core_env,
|
|
321
321
|
cluster_pod_list=self.config.core.scaler.cluster_pod_list,
|
|
322
|
+
enable_pod_security=self.config.core.scaler.enable_pod_security,
|
|
322
323
|
default_service_account=self.config.services.service_account,
|
|
323
324
|
default_service_tolerations=service_defaults_config.tolerations,
|
|
324
325
|
priv_labels=priv_labels
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/updater/run_updater.py
RENAMED
|
@@ -15,7 +15,8 @@ import docker
|
|
|
15
15
|
|
|
16
16
|
from kubernetes.client import V1Job, V1ObjectMeta, V1JobSpec, V1PodTemplateSpec, V1PodSpec, V1Volume, \
|
|
17
17
|
V1VolumeMount, V1EnvVar, V1Container, V1ResourceRequirements, \
|
|
18
|
-
V1ConfigMapVolumeSource, V1Secret, V1SecretVolumeSource, V1LocalObjectReference, V1Toleration
|
|
18
|
+
V1ConfigMapVolumeSource, V1Secret, V1SecretVolumeSource, V1LocalObjectReference, V1Toleration, V1SecurityContext, \
|
|
19
|
+
V1Capabilities, V1SeccompProfile
|
|
19
20
|
from kubernetes import client, config
|
|
20
21
|
from kubernetes.client.rest import ApiException
|
|
21
22
|
|
|
@@ -44,6 +45,14 @@ INHERITED_VARIABLES: list[str] = ['HTTP_PROXY', 'HTTPS_PROXY', 'NO_PROXY', 'http
|
|
|
44
45
|
CONFIGURATION_HOST_PATH = os.getenv('CONFIGURATION_HOST_PATH', 'service_config')
|
|
45
46
|
CONFIGURATION_CONFIGMAP = os.getenv('KUBERNETES_AL_CONFIG', None)
|
|
46
47
|
AL_CORE_NETWORK = os.environ.get("AL_CORE_NETWORK", 'core')
|
|
48
|
+
RESTRICTED_POD_SECUTITY_CONTEXT = V1SecurityContext(
|
|
49
|
+
run_as_user=1000,
|
|
50
|
+
run_as_group=1000,
|
|
51
|
+
capabilities=V1Capabilities(drop=["ALL"]),
|
|
52
|
+
run_as_non_root=True,
|
|
53
|
+
allow_privilege_escalation=False,
|
|
54
|
+
seccomp_profile=V1SeccompProfile(type="RuntimeDefault")
|
|
55
|
+
)
|
|
47
56
|
|
|
48
57
|
SERVICE_API_HOST = os.getenv('SERVICE_API_HOST')
|
|
49
58
|
RELEASE_NAME = os.getenv('RELEASE_NAME')
|
|
@@ -148,7 +157,7 @@ class DockerUpdateInterface:
|
|
|
148
157
|
|
|
149
158
|
class KubernetesUpdateInterface:
|
|
150
159
|
def __init__(self, logger, prefix, namespace, priority_class, extra_labels, linux_node_selector: Selector,
|
|
151
|
-
log_level="INFO", default_service_account=None, default_service_tolerations=[]):
|
|
160
|
+
log_level="INFO", default_service_account=None, default_service_tolerations=[], enable_pod_security=False):
|
|
152
161
|
# Try loading a kubernetes connection from either the fact that we are running
|
|
153
162
|
# inside of a cluster, or we have a configuration in the normal location
|
|
154
163
|
try:
|
|
@@ -182,6 +191,7 @@ class KubernetesUpdateInterface:
|
|
|
182
191
|
self.secret_env = []
|
|
183
192
|
self.linux_node_selector = linux_node_selector
|
|
184
193
|
self.default_service_tolerations = [V1Toleration(**toleration.as_primitives()) for toleration in default_service_tolerations]
|
|
194
|
+
self.security_policy = RESTRICTED_POD_SECUTITY_CONTEXT if enable_pod_security else None
|
|
185
195
|
|
|
186
196
|
|
|
187
197
|
# Get the deployment of this process. Use that information to fill out the secret info
|
|
@@ -324,6 +334,7 @@ class KubernetesUpdateInterface:
|
|
|
324
334
|
env=environment_variables,
|
|
325
335
|
image_pull_policy='Always',
|
|
326
336
|
volume_mounts=volume_mounts,
|
|
337
|
+
security_context=self.security_policy,
|
|
327
338
|
resources=V1ResourceRequirements(
|
|
328
339
|
limits={'cpu': cores, 'memory': f'{memory}Mi'},
|
|
329
340
|
requests={'cpu': cores / 4, 'memory': f'{memory_min}Mi'},
|
|
@@ -478,7 +489,8 @@ class ServiceUpdater(ThreadedCoreBase):
|
|
|
478
489
|
log_level=self.config.logging.log_level,
|
|
479
490
|
default_service_account=self.config.services.service_account,
|
|
480
491
|
linux_node_selector=self.config.core.scaler.linux_node_selector,
|
|
481
|
-
default_service_tolerations=self.config.core.scaler.service_defaults.tolerations
|
|
492
|
+
default_service_tolerations=self.config.core.scaler.service_defaults.tolerations,
|
|
493
|
+
enable_pod_security=self.config.core.scaler.enable_pod_security)
|
|
482
494
|
# Add all additional mounts to privileged services
|
|
483
495
|
self.mounts = self.config.core.scaler.service_defaults.mounts
|
|
484
496
|
else:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4.5.0.75
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/alerter/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/alerter/processing.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/alerter/run_alerter.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/archiver/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/archiver/run_archiver.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/badlist_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/__main__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/schedules.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/dispatching/timeout.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/expiry/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/expiry/run_expiry.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/__main__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/constants.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/ingester/ingester.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/es_metrics.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/metrics/helper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/plumber/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/plumber/run_plumber.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/client.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/creator/run.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/loader/run.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/replay/replay.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/safelist_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/collection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/scaler/run_scaler.py
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/signature_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/submission_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/tasking_client.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/updater/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/updater/helper.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/crawler.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/department_map.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/safelist.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/stream_map.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/vacuum/worker.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/workflow/__init__.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core/workflow/run_workflow.py
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/requires.txt
RENAMED
|
File without changes
|
{assemblyline_core-4.5.0.75 → assemblyline_core-4.5.0.76}/assemblyline_core.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|