github-advanced-security[bot] commented on code in PR #62129:
URL: https://github.com/apache/airflow/pull/62129#discussion_r2851147711


##########
providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py:
##########
@@ -199,3 +205,35 @@
     print(f'Deleting POD "{name}" from "{namespace}" namespace')
     api_response = kube_client.delete_namespaced_pod(name=name, 
namespace=namespace, body=delete_options)
     print(api_response)
+    _delete_workload_secret(name, namespace)
+
+
+def _cleanup_orphaned_workload_secrets(kube_client, namespace: str) -> None:
+    """Delete workload secrets whose owner pod no longer exists."""
+    print(f"Checking for orphaned workload secrets in namespace {namespace}")
+    existing_pods = {pod.metadata.name for pod in 
kube_client.list_namespaced_pod(namespace=namespace).items}
+    secret_list = kube_client.list_namespaced_secret(
+        namespace=namespace, label_selector="airflow-workload-secret=true"
+    )
+    for secret in secret_list.items:
+        secret_name = secret.metadata.name
+        pod_name = secret_name.removeprefix(WORKLOAD_SECRET_NAME_PREFIX + "-")
+        if pod_name not in existing_pods:
+            print(f'Deleting orphaned workload secret "{secret_name}"')

Review Comment:
   ## Clear-text logging of sensitive information
   
   This expression logs [sensitive data (secret)](1) as clear text.
   
   [Show more 
details](https://github.com/apache/airflow/security/code-scanning/584)



##########
providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py:
##########
@@ -199,3 +205,35 @@
     print(f'Deleting POD "{name}" from "{namespace}" namespace')
     api_response = kube_client.delete_namespaced_pod(name=name, 
namespace=namespace, body=delete_options)
     print(api_response)
+    _delete_workload_secret(name, namespace)
+
+
+def _cleanup_orphaned_workload_secrets(kube_client, namespace: str) -> None:
+    """Delete workload secrets whose owner pod no longer exists."""
+    print(f"Checking for orphaned workload secrets in namespace {namespace}")
+    existing_pods = {pod.metadata.name for pod in 
kube_client.list_namespaced_pod(namespace=namespace).items}
+    secret_list = kube_client.list_namespaced_secret(
+        namespace=namespace, label_selector="airflow-workload-secret=true"
+    )
+    for secret in secret_list.items:
+        secret_name = secret.metadata.name
+        pod_name = secret_name.removeprefix(WORKLOAD_SECRET_NAME_PREFIX + "-")
+        if pod_name not in existing_pods:
+            print(f'Deleting orphaned workload secret "{secret_name}"')
+            try:
+                kube_client.delete_namespaced_secret(name=secret_name, 
namespace=namespace)
+            except ApiException as e:
+                if e.status != 404:
+                    print(f'Failed to delete orphaned workload secret 
"{secret_name}": {e}', file=sys.stderr)
+
+
+def _delete_workload_secret(pod_name: str, namespace: str) -> None:
+    """Delete the workload secret associated with a pod if it exists."""
+    kube_client = get_kube_client()
+    secret_name = f"airflow-workload-{pod_name}"
+    try:
+        kube_client.delete_namespaced_secret(name=secret_name, 
namespace=namespace)
+        print(f'Deleted workload secret "{secret_name}" from "{namespace}" 
namespace')

Review Comment:
   ## Clear-text logging of sensitive information
   
   This expression logs [sensitive data (secret)](1) as clear text.
   
   [Show more 
details](https://github.com/apache/airflow/security/code-scanning/586)



##########
providers/cncf/kubernetes/src/airflow/providers/cncf/kubernetes/cli/kubernetes_command.py:
##########
@@ -199,3 +205,35 @@
     print(f'Deleting POD "{name}" from "{namespace}" namespace')
     api_response = kube_client.delete_namespaced_pod(name=name, 
namespace=namespace, body=delete_options)
     print(api_response)
+    _delete_workload_secret(name, namespace)
+
+
+def _cleanup_orphaned_workload_secrets(kube_client, namespace: str) -> None:
+    """Delete workload secrets whose owner pod no longer exists."""
+    print(f"Checking for orphaned workload secrets in namespace {namespace}")
+    existing_pods = {pod.metadata.name for pod in 
kube_client.list_namespaced_pod(namespace=namespace).items}
+    secret_list = kube_client.list_namespaced_secret(
+        namespace=namespace, label_selector="airflow-workload-secret=true"
+    )
+    for secret in secret_list.items:
+        secret_name = secret.metadata.name
+        pod_name = secret_name.removeprefix(WORKLOAD_SECRET_NAME_PREFIX + "-")
+        if pod_name not in existing_pods:
+            print(f'Deleting orphaned workload secret "{secret_name}"')
+            try:
+                kube_client.delete_namespaced_secret(name=secret_name, 
namespace=namespace)
+            except ApiException as e:
+                if e.status != 404:
+                    print(f'Failed to delete orphaned workload secret 
"{secret_name}": {e}', file=sys.stderr)

Review Comment:
   ## Clear-text logging of sensitive information
   
   This expression logs [sensitive data (secret)](1) as clear text.
   
   [Show more 
details](https://github.com/apache/airflow/security/code-scanning/585)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to