GCC High / Azure Government · Single-practitioner lab review
Endpoint and container validation
What worked matters: MDE demonstrated host antivirus, host findings and limited container telemetry. WSL/Docker execution and scoped cloud visibility worked. MDC produced OpenShift audit alerts and scanned a separate registry image. MDE data may satisfy a defined Cyber need even when DfC does not. These measured successes remain valid alongside runtime failures and support limitations.
Authorship and independent validation: The author reports that this work was created by one practitioner with assistance from GPT Astra. This is a bounded lab study, not an independently peer-reviewed assessment or vendor support certification. Independent container/Kubernetes and security experts need to reproduce and review the findings before production, support or compliance decisions.
What worked — verified successes
Recorded September 24-October 1, 2026, not a live health view. D01-D03 were retired after testing. Each success applies only to its named capability and evidence scope; it is not a blanket product or platform-support PASS.
Server connections verified for the three Linux hosts; Kubernetes connections verified for EKS and OpenShift. Management works; connection alone is not protection.
Linux endpoints reported healthy/licensed with active RTP. Windows onboarded and reported Active through traditional Government onboarding without Arc. Health alone is not a prevention test.
Host EICAR detection/quarantine demonstrated on Ubuntu, Amazon Linux and Windows. Earlier Linux cloud alerts identified MDE/Antivirus; the Windows result is local evidence, not a verified cloud alert.
Manual host-path scans detected and quarantined the container-created bind file: one file / one threat per scan. This worked even though automatic container-file interception failed.
Controlled Docker, Podman and EKS commands correlated with cloud process and FileDeleted events. Limited visibility with execution/time correlation, not native container/image inventory or a behavioral alert.
Host software/CVE findings and configuration assessments were available for Linux and Windows. Finding availability works; it does not prove remediation, compliant hosts or container-image CVE coverage.
WSL guest and Docker workload execution verified. The 35-minute plug-in observation had two warm-up samples then 34 Healthy samples; Docker remained running. Sampled health, not uninterrupted monitoring or full protection.
Limited Linux process, controlled FileDeleted and workload network events were verified, plus the native WSL-to-Windows hosting relationship. Not network blocking or native Docker image identity; direct PID match remains unproven.
Two real privileged-container alerts with workload context: September 24 API-server and October 1 networking activity. Audit detection works in this lab; it does not establish healthy low-level runtime capture or production support.
The retained log tail reports 21 successful audit and 17 metric HTTP 200 publishes. Positive publisher evidence, not independently verified workspace delivery or a new end-to-end test alert.
The separate Government ACR image returned 79 distinct CVEs with package, installed/fixed-version and fix-availability metadata. The image was never executed; this is not running-workload image coverage.
Keep the wins and the gaps together: automatic container-file interception and low-level DfC capture did not meet the tested criteria; the gated OpenShift experiment was inconclusive. Expert validation is still required.
1. Test environments — MDE versus MDC
Dates and lab scope
AWS lab retired October 1: authorized teardown was verified at 2026-10-01T14:37:47Z. D01-D03 are now historical test records, not running hosts. Before deletion, healthy MDE hosts and functioning workloads coexisted with reproduced DfC collector failure. Full archives were copied off the hosts into CloudShell and their original hashes verified; local bundle download remains unverified. Azure/MDE evidence was preserved. September 30 AV results remain dated evidence, not fresh October 1 protection tests.
September 30, 2026: D05 Windows host onboarding and local AV verified. D06 WSL and Docker run inside D05 with limited process/file/network visibility. The 35-minute observation completed at 21:44:46.449 UTC: 2 warm-up samples then 34 consecutive Healthy sampled checks; final Docker running state verified. All-sample review completed at 21:56:19.638 UTC. Broader container protection remains unproven. Not live or uninterrupted continuous monitoring.
AWS lab deleted — scoped teardown verified
Completed: the user authorized deletion after evidence preservation. CloudFormation deletion was requested at 2026-10-01T14:25:34Z; verification completed at 2026-10-01T14:37:47Z. The stack and all 23 declared resources reported DELETE_COMPLETE. All three EC2 instances were terminated; the EKS managed node group and control plane, owned IAM resources and isolated network were removed. This was retirement, not a security-protection or remediation pass.
Preservation: four bounded read-only archive commands copied all three full host archives into standard CloudShell home before deletion; original byte counts and SHA256 matched and the bundle hash was verified again afterward. Local bundle download remains unverified. The archive copies no longer depend on the EC2 hosts. Keep the CloudShell home copy until local download is verified. Azure resources and MDE evidence were not deleted.
Residual checks: zero matches remained for the lab EKS cluster, known Auto Scaling group, three root volumes, owned snapshots of those volumes, VPC, network interfaces, stack-tagged Elastic IPs, VPC load balancers/NAT gateways and the cluster log-group prefix. This is a scoped resource check, not an account-wide residual-cost audit or proof that billing has stopped everywhere; previously accrued usage may appear later. Terminating only that EC2 node can trigger replacement, which is why the owning stack/node group was removed instead.
Storage is separate:AWS documents 1 GB of standard CloudShell home storage at no cost, retained for 120 days after the last session in that Region. It is not a permanent backup; CloudShell VPC environments do not have this persistence. Temporary Arc Run Command cleanup remains unverified.
October 1 AWS pre-deletion revalidation — checks completed, not a new AV test
Existing authorized Arc access enabled the completed checks despite an expired AWS console session; subsequent management-terminal access loss initially blocked archive export, not the live revalidation. The later AWS closeout above recovered access and copied the archives off the hosts. Preflight succeeded at 12:13:43 UTC; all three MDE hosts reported Onboarded / Active in the 12:13:22 UTC query, and three Arc servers plus Arc Kubernetes reported Connected. The 12:08:48 UTC heartbeat belongs to Arc Kubernetes; server lastStatusChange is not a heartbeat. No agent installation or security-policy change was part of this recheck.
Defender for Containers Standard plan has ContainerRegistriesVulnerabilityAssessments, AgentlessDiscoveryForKubernetes, AgentlessVmScanning and ContainerSensor enabled. These controls and FullyCovered are configuration evidence only, not runtime capture or support proof. All three final host checks succeeded with exit 0 at 12:20:22-26 UTC. No fresh EICAR was requested or run; nine September 30 Linux AV comparisons retain their historical verdicts.
Existing hosts and workloads; no installations, workload restarts or security changes.
containerd2.2.7+unknowncontainerd: Included in runtime where recorded; runc: Not captured
Alpine 3.23.3 (September 30 in-pod observation)
All three hosts: MDE 101.26081.0010 healthy/licensed, active fanotify real-time protection, no exclusions; definitions 1.459.498.0 up to date. Behavior monitoring remains disabled and network protection stopped, unchanged. D01/D02 original nginx containers remained running with zero restarts; benign execution, file cleanup and loopback HTTP 200 passed. These local checks are separate from the cloud-marker evidence below and do not prove automatic container AV.
Fresh limited MDE container process/file visibility PASS: exact Q25 at 2026-10-01T12:28:25.157Z returned HTTP 200 and 70 rows (cap 200, one-hour lookback); six selected rows retained in the portable receipt, full raw response private. D01: 20 busybox process / 2 FileDeleted rows; D02: 12 / 1; D03: 11 / 1. Exact commands, unique in-container files and timing correlate with known controlled executions, not merely host Docker/Podman/kubectl CLI events. D01/D03 show runc parents; D02's top shell parent is blank, not crun proof. D01 includes two probes, not 20 independent tests.
Across all 70 returned rows, no top-level AdditionalFields keys matching container, pod, image, namespace or cgroup were found. This narrow check is not a universal schema claim. Correlation demonstrates some in-container process/file visibility, not native container inventory, image scanning, Kubernetes configuration assessment, automatic AV, a behavioral alert or MDC/DfC coverage.
Fresh host posture at 2026-10-01T12:16:33.716Z; not container-image findings or secure posture.
Profile
Package/CVE rows
Distinct CVEs
Latest assessments / applicable / reported failed
D01
475
115
170 / 9 / 1
D02
459
99
170 / 9 / 1
D03
57
33
170 / 9 / 1
D03 now has 57 host vulnerability rows / 33 distinct CVEs; the September 30 snapshot below had 53 rows. At 2026-10-01T12:19:29.296Z, the fresh alert query retrieved the same 3 September 29 MDE / Antivirus alerts, not new October 1 alerts or DfC detections.
Fresh Kubernetes check completed 2026-10-01T12:17:47Z: original pod/container/digest identity matched, workload Ready with zero restarts; benign execution, file cleanup and in-pod HTTP passed. Four Defender pods / six containers were Ready with zero container restarts, yet the collector again could not open /ebpf/sysdig-ebpf.o at 2026-10-01T12:17:41Z and internally restarted sysdig. This is a current capture failure, not merely a historical issue; Kubernetes readiness is not proof of protection.
Retention update: the original full Docker/Podman AV logs were recovered locally and their hashes match the earlier records. All four completed October 1 execution receipts and the full 70-row MDE marker response are retained locally. The later AWS closeout copied the three full host archives into standard CloudShell home and verified their original byte counts and SHA256. Local bundle download remains unverified; this is not a claim that all raw evidence is local. The archive copies no longer depend on the EC2 hosts, which were subsequently deleted with authorization. Temporary Arc Run Command cleanup is not verified; Azure/MDE resources were outside this AWS teardown. The download limitation does not invalidate the completed product observations. Resource removal ends further live verification and does not resolve a prior protection failure. This report is not a resource-deletion instruction.
MDE versus MDC: MDE provides the measured endpoint health, host findings and limited process/file/network evidence in its tested scopes. Adding the Containers plan does not relabel that evidence or repair the failed DfC collector. MDC independently supplied the tested registry-image VA; native Kubernetes runtime, workload posture and support eligibility require their own evidence. Neither product substitutes for the other's unmet criterion.
Government capability and gap analysis — 25 reconciled scenarios
This replaces the older capability assumptions with one dated review: 24 original scenarios plus Government ACR image assessment. Documentation availability, plan configuration and measured protection are separate. These are MDC / Defender for Containers, Arc and integration capabilities; they do not override independently measured MDE endpoint results. Azure Government availability is not blanket GCC High feature parity.
Read this matrix for what is available, restricted or still needs confirmation. Read the separate environment and test matrices for what actually worked in the tested configurations. An Available status here is not a runtime-protection test pass.
Unresolved official AKS conflict: the feature support matrix lists Government AKS sensor-dependent runtime features, while the component table excludes the Government AKS sensor. Do not silently treat every AKS feature as GA. Government Arc Defender sensor and Azure Policy for Arc Kubernetes are explicitly excluded in the component table; Government AKS Policy is listed available. Plan GA, visible toggles and Ready pods do not resolve these distinctions.
Reviewed 2026-10-01. Each status applies only to the cloud, platform and feature scope described in its row, not a new lab PASS/FAIL.
Capability or scenario
Status
What we know / need
1. Microsoft Defender for Cloud availability
✅ Available (documented)
Available in Azure Government; not a blanket GCC High feature-parity statement.Sources: S1
2. Defender for Containers plan offered and enabled
✅ Available (documented)
Government plan GA. User-supplied lab observation reports Standard enabled since 2026-09-29. Customer subscription state remains unverified.Sources: S1S4
3. Defender sensor UI control
⚠️ Documentation conflict
Control visibility does not establish support. Arc Government sensor explicitly excluded; AKS Government sensor has conflicting official documentation.Sources: S2S3S4
4. Azure Policy UI control
❌ Documented exclusion
Component table lists Government AKS Policy available and Government Arc Policy unavailable; UI presence does not override this distinction.Sources: S2S4
5. Kubernetes API access UI control
✅ Available (documented)
Matrix lists Government AKS API-dependent posture capabilities. Do not generalize this to all Arc/OpenShift features.Sources: S3S4
6. Registry access UI control
✅ Available (documented)
Supported Government registry VA is documented. A visible or enabled control does not establish access to every external registry.Sources: S3S4S13
7. Native AKS
⚠️ Documentation conflict
Native architecture documented. Government sensor-dependent feature availability conflicts with Government sensor component exclusion.Sources: S2S3S5
8. Kubernetes outside Azure through Arc
✅ Available (documented)
General Arc connectivity and Government endpoints documented; Defender sensor eligibility is separate.Sources: S2S6S7
9. OpenShift 4.6 or newer through Arc
⚠️ Preview — scope limited
General Preview platform listing. RHCOS omission from the restricted sensor OS list remains unresolved.Sources: S3S8
10. On-premises OpenShift through Arc Government
❌ Documented exclusion
Government Arc Defender sensor explicitly excluded; on-premises architecture does not override that.Sources: S2S5S8
11. Self-managed OpenShift on AWS through Arc Government
❌ Documented exclusion
Government Arc sensor exclusion applies. AWS hosting does not turn OpenShift into native EKS or remove the destination-cloud restriction.Sources: S2S3S9
12. ROSA
❓ Needs confirmation
No ROSA-specific certification established. Do not equate ROSA with EKS or infer AWS GovCloud coverage.Sources: S2S3S8
13. Arc/OpenShift control-plane detection
⚠️ Preview — scope limited
Preview; requires sensor. Blank Arc cloud-availability cell is not Government approval.Sources: S2S3
14. Arc/OpenShift runtime workload detection
⚠️ Preview — scope limited
Preview; requires sensor. Government Arc sensor exclusion remains applicable.Sources: S2S3
15. XDR hunting for Arc/OpenShift audit and process events
⚠️ Preview — scope limited
Preview, currently audit logs and process events; sensor required. Government Arc collection and complete GCC High parity not established.Sources: S2S3S10
16. Binary drift detection and blocking
❓ Not listed as supported
Generic Arc matrix row has dashes. Managed-cluster capabilities and blocking prerequisites do not prove OpenShift Government support.Sources: S2S3S11
17. Node malware and runtime antimalware
❓ Not listed as supported
Generic Arc malware row has dashes. Agentless node malware detection and sensor-based runtime antimalware are separate capabilities.Sources: S3S12
18. Automated XDR response
❓ Not listed as supported
Generic Arc response row has dashes. AKS/EKS/GKE response is Preview and requires sensor plus Kubernetes API access.Sources: S3S10
19. ECR scanning from Azure Government
❌ Documented exclusion
Native AWS connector unavailable in Azure Government. Alternative supported ECR route not established.Sources: S3S9
20. Quay and arbitrary private registries
❓ Needs confirmation
Direct Quay integration not established. Registry-agnostic scanning of eligible running images is a different capability.Sources: S3S13
21. Government ACR image vulnerability assessment
✅ Available (documented)
GA subject to image and scanning prerequisites; independent of declaring an OpenShift runtime sensor supported.Sources: S3S13
22. Sentinel Government alert integration
✅ Available (documented)
Bidirectional alert synchronization listed GA. Tenant-based connector Preview and missing runtime telemetry remain separate considerations.Sources: S1S14
23. End-to-end Government telemetry boundary
❓ Needs confirmation
Arc Government endpoints do not prove every collection, transfer, processing and storage boundary.Sources: S7S15S16
24. Production support and SLA
❓ Needs confirmation
No contractual SLA established for the proposed Arc/OpenShift Government configuration. Plan GA does not remove component exclusions or Preview status.Sources: S1S3S8
25. USD 8.75 per vCore per month
❓ Needs confirmation
Retain as a user-reported UI quote, not a universal Government rate. Supplied pricing-resource configuration does not independently verify the monetary amount.Sources: S3S5
OpenShift distribution listing does not settle the RHCOS host-OS omission; AL2023 eligibility also needs clarification. ROSA, AWS GovCloud, direct Quay scanning, a Government ECR alternative, end-to-end residency, contractual SLA and the quoted price are not independently established. Registry image vulnerability assessment is not runtime-layer scanning, and Sentinel alert integration cannot create missing runtime telemetry.
Review status meanings and dated official sources
✅ Available (documented)
Official documentation lists availability; deployment and operation are not verified.
⚠️ Preview — scope limited
General platform capability is explicitly Preview; Government eligibility must be established separately.
❌ Documented exclusion
Official component documentation explicitly excludes this cloud.
⚠️ Documentation conflict
Official sources disagree; no authoritative resolution established.
❓ Not listed as supported
Relevant matrix does not list the capability as available; not a universal impossibility claim.
❓ Needs confirmation
Reviewed evidence does not establish the assertion.
Microsoft Defender for Containers: Azure Government GA; Connect AWS account: Azure Government Not Available; Bi-directional alert synchronization with Microsoft Sentinel: Azure Government GA.
Government Defender sensor: no icon for both AKS and Arc-enabled Kubernetes. Government Azure Policy for Kubernetes: yes icon for AKS; no icon for Arc.
Preview - currently supports audit logs & process events The Defender sensor is supported only with Linux Kernel 5.4 and above, on the following host operating systems: Ensure your Kubernetes node runs on one of these verified operating systems. National clouds are automatically enabled and can't be disabled. Any Cloud Native Computing Foundation (CNCF) certified Kubernetes clusters should be supported, but only the specified clusters are tested.
Scope: The national-cloud footnote applies to marked entries, not every plan capability. AL2023 and RHCOS are absent from the restricted verified sensor host-OS list. Arc control-plane detection and workload detection are Preview and require the sensor. Arc binary drift, response actions and malware detection rows contain dashes. OpenShift 4.6 or newer is listed as Preview. Government AKS sensor-dependent features are listed, creating a conflict with S2.
Confirm regional storage and transfer behavior to meet your organization's privacy and internal residency requirements.
Scope: The article describes source-cloud audit-log collection and does not establish the asserted end-to-end Government boundary.
Official conflict remains unresolved: obtain written Microsoft clarification. Neither observed lab success nor failure alone determines documented support eligibility. No roadmap dates or contractual promises are inferred.
Read across one environment at a time. Three retired Linux lab hosts, one freshly rechecked OpenShift cluster, one Windows host, its WSL guest, and a separate registry image are shown below. D01-D03 ran in commercial AWS, not AWS GovCloud; security services were in Government. D05 is in Azure Government; D06 is its guest, not another VM. References are anonymous.
Arc = connection
Registers a server or Kubernetes cluster for management. Connected does not mean antivirus or container detections worked.
MDE = endpoint security
Produces host AV/EDR and MDE / MDVM vulnerability/configuration findings. Some container processes were visible through the host sensor.
MDC = Defender for Cloud
The MDC column below focuses on Defender for Containers: its runtime sensor, workload findings and registry image vulnerability assessment.
Defender for Servers P1 provided the D01-D03 MDE licensing/onboarding route. D05 used traditional Government local-script onboarding, not Arc. That does not make endpoint findings Defender for Containers findings. A product can pass one capability and fail another; there is no blanket product PASS.
OpenShift — audit detections, gated test and cleanup
Partial functionality, not blanket failure or full protection. Two real Government audit-based detections are credited separately from failed low-level capture and an inconclusive gated test. User-host output confirms cleanup. No production-support certification is inferred.
October 1 closeout through 22:58 UTC; September 24 and October 1 alerts are not the gated probe.
Capability or scenario
Status
What we know / need
Platform and node
Fresh read-only check
October 1: user-assisted CRC 2.64.0+458092; RHCOS 9.8.20260908-0, kernel 5.14.0-687.46.1.el9_8.x86_64, CRI-O 1.35.7-10.rhaos4.22.git4c47184.el9. Ready; disk/memory/PID pressure False at 19:21:41 UTC.
Arc and configuration
Connected / provisioned
Authenticated portal: Arc Connected; Defender 0.7.8 and Policy 1.19.0 Succeeded. Plan On / Full and component toggles On do not certify capability or support on this node.
Init and socket mapping
Failure isolated further
Both 1.4.6 initializers completed, exit 0. HostPath definitions use /var/run/docker.sock and /run/containerd/containerd.sock, with unspecified types. Low-level container cannot start; no new eBPF load result.
Audit publishing
HTTP 200 reported
Publisher 1.0.58: 80 retained rows span 19:51:11-20:01:11 UTC; 21 successful KUBE_AUDITLOG_BLOB and 17 metric publishes. Counts are messages/batches, not unique events. Not a full one-hour sample.
Memory accounting
Warning
Missing /sys/fs/cgroup/memory/memory.usage_in_bytes: 2 publisher errors and 10 pod-collector errors; 2 publisher heartbeats report Memory Unknown. Cgroup layout is not independently verified; not proof of the socket failure cause.
Cloud detection and context
Audit detection demonstrated
Two MDC Informational Privileged container detected (Preview) alerts, attributed to Kubernetes audit log analysis: September 24 API-server activity 17:02:14 UTC (generated 18:06:03 UTC); October 1 networking activity 19:09:53 UTC. Both predate the gated test.
Inventory and posture
Limited
Initial checks: Arc resource present, 0 assessments/subassessments and 0 exact-name inventory matches. Later reads show 2 linked audit alerts, not full inventory, image-CVE mapping or Policy enforcement.
Gated audit experiment
Inconclusive
October 1, 21:49:37-22:49:37 UTC: privileged specification admitted with a PodSecurity warning, not denied. Initially gated, no node or container status. Five ARG checks and the 22:51 portal list: no match; sixth ARG check at 22:57 also no match. All statuses/severities included. Not a runtime test or universal detection failure.
Test cleanup and limits
Cleanup confirmed
User-host output: namespace deleted; explicit-context NotFound and empty lookup confirm absence. Deleted before final pod query: no pre-deletion snapshot or numeric exit-code result captured. Workspace mapping/query and MDE on RHCOS remain unverified.
Earlier source review: the September 23 ARM64 handoff was preparation, not a deployed test. No fresh OpenShift execution was performed during this October 1 source review. The later original-host retest above supersedes that access blocker; the September 24 observations below remain dated history.
Recorded September 24; reviewed October 1. These results do not establish production OpenShift, ROSA or AWS GovCloud coverage.
Capability or scenario
Status
What we know / need
Platform and provenance
Historical test
September 24: x86-64 CRC 2.64.0, OpenShift 4.22.14, Kubernetes 1.35.6, RHCOS and CRI-O; 8 CPUs, 24 GiB RAM, 80 GiB disk. RHCOS build, kernel and CRI-O version were not captured. The September 23 ARM64 handoff was a separate plan, not a deployed-cluster result.
Arc and extension installation
Historical pass
Arc Kubernetes Connected with Ready agents. Defender 0.7.8 and Policy 1.19.0 reported Succeeded. Arc server onboarding and MDE coverage were not established.
Storage failure and recovery
Recovered then
The initial disk exhausted ephemeral storage and caused evictions under DiskPressure. After the recorded 80 GiB rebuild, 56 GiB was free and DiskPressure cleared. That did not repair the later collector failure; these are not current capacity measurements.
Publisher versus runtime collector
Historical runtime failure
Publisher Ready/Available 1/1; collectors Ready/Available 0/1. Two of three collector containers ran and init containers completed, but low-level-collector remained in CreateContainerError for /var/run/docker.sock on CRI-O. This differs from the EKS missing-BPF-probe failure.
Version selection and compatibility
Historical limitation
The regional catalog returned only Defender 0.7.8, with auto-upgrade enabled and no pinned version. No supported runtime/socket override was found. A miscellaneous collector also recorded a DeletedFinalStateUnknown type-conversion panic; this is an additional observation, not a proven common root cause.
Plan flags and inventory
Registration only
Standard, FullyCovered and enabled discovery/sensor flags coexisted with the failed collector. Resource Graph returned one Arc cluster resource, not demonstrated pod/container inventory. Cluster assessments and subassessments both returned zero.
Log Analytics telemetry
Not demonstrated
The configured workspace was healthy, but the tested recent telemetry query returned HTTP 204/no payload. Workspace provisioning or a Ready publisher is not evidence of populated runtime or Kubernetes audit events.
Azure Policy workload enforcement
Not demonstrated
Policy Insights returned 205 records, including extension deployment compliance and mostly benchmark checks. No named workload audit/deny result was established. Current documentation excludes the Government Arc Policy component; historical installation does not override that boundary.
CRC image findings and alerts
Earlier evidence limit
The reviewed CRC runbook contains procedures, not a completed CRC image-CVE result or successful runtime simulation alert. A September 24 audit-log alert was subsequently verified in the October 1 cloud read above. The separate ACR scan does not prove CRC image coverage.
MDE on this OpenShift environment
Not demonstrated
No verified host onboarding, AV, in-container process telemetry or host assessment result for D04. Do not copy the AWS or WSL MDE passes to RHCOS, or assume RHCOS is equivalent to a supported RHEL host installation.
Do not treat older runbook support wording as current approval: the dated observations remain useful, but the current component review excludes the Government Arc sensor and Arc Policy path and retains the unresolved AKS documentation conflict. Do not fake sockets, symlink CRI-O to Docker, broaden SCCs or patch the managed DaemonSet to manufacture a protection pass.
Latest dated results: October 1 AWS and OpenShift closeout; September 24 and October 1 audit alerts; September 29-30 AV, WSL and registry tests. Each result names its producer. PASS does not mean the device was secure.
Historical results: October 1 health/workload/posture recheck completed; AV and prior process evidence retain September 29-30 dates. AWS resources deleted October 1.
Arc / connectivityPASS
October 1: Arc server Connected; no Kubernetes cluster in this case. Connection alone is not protection.
MDE - endpoint results
Fresh host health and workloadPASS
October 1: native MDE healthy/licensed, active fanotify RTP, current definitions and no exclusions. Existing workload identity, benign execution, file cleanup and HTTP verified; no fresh EICAR. Cloud-marker evidence is assessed separately.
Host antivirusPASS
September 30: local quarantine within 10 seconds, with a matching MDE threat record.
Container-file antivirusFAIL
3 of 3 cases failed: existing layer, new layer and bind-mounted file remained at 10 / 60 / 300 seconds.
Container process/file visibilityPASS
LIMITED October 1 Q25: 20 busybox process rows and 2 FileDeleted rows, correlated with controlled container commands, unique file and timing. runc parent observed. Includes two Docker probes, not 20 independent protection tests. Not full inventory, AV interception, behavioral alerts or DfC evidence.
Host vulnerabilitiesPASS
October 1: 475 package/version/CVE rows; 115 distinct CVEs. Host MDVM, not image-layer findings.
Host configurationPASS
170 assessments; 9 applicable; 1 failed control: Linux PUA block mode. PASS means the finding was available, not the host was compliant.
MDC - Defender for Containers results
Standalone runtime sensorDOCUMENTED LIMIT
No documented Defender for Containers runtime deployment path through Arc Servers for standalone Docker or Podman.
This nginx image / workloadNOT PROVEN
No verified image-CVE mapping or workload configuration findings. The separate registry scan below does not cover this workload.
Historical results: October 1 health/workload/posture recheck completed; AV and prior process evidence retain September 29-30 dates. AWS resources deleted October 1.
Arc / connectivityPASS
October 1: Arc server Connected; no Kubernetes cluster in this case. Connection alone is not protection.
MDE - endpoint results
Fresh host health and workloadPASS
October 1: native MDE healthy/licensed, active fanotify RTP, current definitions and no exclusions. Existing workload identity, benign execution, file cleanup and HTTP verified; no fresh EICAR. Cloud-marker evidence is assessed separately.
Host antivirusPASS
September 30: local quarantine within 10 seconds, with a matching MDE threat record.
Container-file antivirusFAIL
3 of 3 cases failed: existing layer, new layer and bind-mounted file remained at 10 / 60 / 300 seconds.
Container process/file visibilityPASS
LIMITED October 1 Q25: 12 busybox process rows and 1 FileDeleted rows, correlated with controlled container commands, unique file and timing. Top shell parent field blank; no crun-parent proof. Not full inventory, AV interception, behavioral alerts or DfC evidence.
Host vulnerabilitiesPASS
October 1: 459 package/version/CVE rows; 99 distinct CVEs. Host MDVM, not image-layer findings.
Host configurationPASS
170 assessments; 9 applicable; 1 failed control: Linux PUA block mode. PASS means the finding was available, not the host was compliant.
MDC - Defender for Containers results
Standalone runtime sensorDOCUMENTED LIMIT
No documented Defender for Containers runtime deployment path through Arc Servers for standalone Docker or Podman.
This nginx image / workloadNOT PROVEN
No verified image-CVE mapping or workload configuration findings. The separate registry scan below does not cover this workload.
Amazon Linux 2023.12.20260918 / EKS 1.36.4 / containerd 2.2.7+unknown
Historical results: October 1 health/workload/posture recheck completed; AV and prior process evidence retain September 29-30 dates. AWS resources deleted October 1.
Arc / connectivityPASS
October 1: Arc server and Kubernetes Connected. Kubernetes heartbeat 12:08:48 UTC; server lastStatusChange is not a heartbeat.
MDE - endpoint results
Fresh host health and workloadPASS
October 1: native MDE healthy/licensed, active fanotify RTP, current definitions and no exclusions. Existing workload identity, benign execution, file cleanup and HTTP verified; no fresh EICAR. Cloud-marker evidence is assessed separately.
Host antivirusPASS
September 29 host EICAR quarantine and MDE/Antivirus cloud alert. Not a fresh September 30 host-control test.
Pod-file antivirusFAIL
Existing pod writable layer: canonical file still present at actual elapsed 10 / 60 / 300 seconds. Cleanup passed; workload HTTP 200.
Container process/file visibilityPASS
LIMITED October 1 Q25: 11 busybox process rows and 1 FileDeleted rows, correlated with controlled container commands, unique file and timing. runc parent observed. Not full inventory, AV interception, behavioral alerts or DfC evidence.
Host vulnerabilitiesPASS
October 1: 57 package/version/CVE rows; 33 distinct CVEs. Host MDVM, not image-layer findings.
Host configurationPASS
170 assessments; 9 applicable; 1 failed Linux PUA block-mode control.
MDC - Defender for Containers results
Sensor installationPASS
Extension 0.7.8 installed; collector pods Ready. Installation alone is not protection.
Actual runtime captureFAIL
FAIL reproduced October 1 at 12:17:41 UTC: missing /ebpf/sysdig-ebpf.o and internal sysdig restart despite four Ready pods / six Ready containers with zero Kubernetes restarts.
Government / OS eligibilityDOCUMENTED LIMIT
Reviewed documentation excludes the Government Arc sensor; AL2023 is absent from the verified sensor OS list.
Native pod/image findingsNOT PROVEN
No working native runtime enrichment, running-image CVE mapping or named workload misconfiguration finding verified.
Red Hat Enterprise Linux CoreOS 9.8.20260908-0 (Plow) / OpenShift 4.22.14 / Kubernetes 1.35.6 / CRC 2.64.0+458092 / cri-o://1.35.7-10.rhaos4.22.git4c47184.el9
October 1 user-assisted retest and Government checks through 22:58 UTC; September 24 and October 1 alert dates preserved
Arc / connectivityPASS
October 1: Arc Kubernetes Connected; heartbeat 19:40:20 UTC, agent 1.37.3; all nine local Arc pods Ready. No Arc Servers onboarding established.
MDE - endpoint results
Host and container coverageNOT PROVEN
No verified MDE host onboarding, antivirus, process or host-assessment result for this RHCOS environment.
MDC - Defender for Containers results
Extension deploymentPASS
October 1: Defender 0.7.8 and Policy 1.19.0 Succeeded. Containers plan On / Full is configuration, not operational protection.
Low-level runtime captureFAIL
October 1: 2/3 collector containers, DaemonSet Available 0/1; Docker-socket creation failure on CRI-O. Both initializers completed with exit 0, not proof of eBPF loading.
Audit publishingLIMITED
Publisher 1.0.58 reports 21 audit and 17 metric HTTP 200 publishes in the 19:51:11-20:01:11 UTC tail. Batch messages, not unique events, workspace records or new detections.
Audit-log alertsPASS
Two MDC Informational Privileged container detected (Preview) alerts: September 24 API-server and October 1 networking workload. Audit-log analysis, not low-level capture or the gated test.
Gated audit experimentINCONCLUSIVE
No matching alert in one hour or the later recheck. Cleanup confirmed by user-host output; final pre-deletion snapshot unavailable. Not a runtime test.
Workload posture / full protectionNOT PROVEN
Initial scoped checks: 0 assessments/subassessments. Two audit alerts do not establish full inventory, image-CVE mapping, Policy enforcement or support certification.
User-provisioned Azure Government Standard_D4ads_v6; Standard security preserved. D06 healthy plug-in and limited process/file/network visibility verified; 35-minute observation completed. Unsupported Azure Windows 11 security baseline, not supported-platform certification; not a WSL execution blocker.
Arc / connectivityN/A
Not used: traditional Government local-script MDE onboarding, not Arc or Intune automatic onboarding.
MDE - endpoint results
Windows host onboardingPASS
Unmodified Government local script exited 0; OnboardingState 1; Sense Running. Government DeviceInfo reported Onboarded / Active. OS/build verified locally, not from initially empty cloud OS fields.
Windows host antivirusPASS
Separate September 30 test at 19:53:44.965 UTC: file present at 10.09s, absent at 60.13s; matching Virus:DOS/EICAR_Test_File threat inactive. Read-only recovery matched the original test file: initial detection 19:53:46.273 UTC, action status 19:54:01.915 UTC, ActionSuccess true. Local evidence only; no matching cloud detection verified yet. The current cloud DeviceEvents query returned 0 rows, not a cloud AV alert. A separate AlertEvidence / AlertInfo host query succeeded (HTTP 200) with 0 rows.
WSL / plug-in installationPASS
WSL 3.0.1.0 and signed MDE plug-in 2.26.921.1 MSI installers exited 0. Reboot completed at 19:24:23 UTC. Installation is not a runtime protection pass.
Host vulnerabilitiesPASS
8 software/package/CVE rows returned for Windows, not 8 distinct CVEs. MDE / MDVM host data availability, not secure posture or container-image scanning. Exact Q22 at 21:23:51.247 UTC: HTTP 200, 10 metric rows returned, 2 selected Windows metric rows retained; counts match the earlier private query, not a complete export.
Host configurationPASS
161 latest assessments, 106 applicable, 59 failed applicable. PASS means findings were available, not that the host was compliant; no remediation established. A five-control sample at 21:22:03.623 UTC included scid-27 (automatically deny standard-user elevation) and scid-51 (disable local Defender Firewall connection-rule merging for Public). The scid-51 knowledge base says not applicable to Azure VMs despite its IsApplicable true row; all 59 reported failures require contextual review, not 59 confirmed misconfigurations. Exact cross-platform Q22 execution confirmed these counts; Q04/Q05 remain Linux-only.
WSL scope (see D06)PARTIAL
Guest and Docker execution, healthy plug-in, limited process/file/network visibility (Q20/Q23/Q24) and native hosting (Q21) verified. The 35-minute observation completed: 34 consecutive Healthy sampled checks after 2 warm-up samples. Complete inventory, behavioral alerts and container AV are not established.
MDC - Defender for Containers results
Independent DfC resultNOT TESTED
No independent Defender for Containers result for D05. Windows MDE onboarding, local host AV and WSL plug-in installation are not DfC evidence.
Guest of D05, not an additional VM. Limited process/file/network visibility verified by Q20/Q23/Q24; native hosting by Q21. Completed 35-minute observation: 2 warm-up samples then 34 consecutive Healthy sampled checks, not uninterrupted monitoring. Not complete workload protection.
Arc / connectivityN/A
Guest of D05; no separate Arc onboarding used. Runtime execution is a platform check, not an Arc protection result.
Local platform result, not an MDE protection pass: documented service-context profile/environment/process launch exited 0 at 21:04:45.733 UTC. Intended user context and loaded profile verified; Ubuntu import and guest commands succeeded. Ubuntu-22.04 Running VERSION 2; WSL_USER_PROBE_OK observed locally.
WSL plug-in healthPASS
Completed 35-minute observation, 21:09:00.3239278-21:44:46.449 UTC, exit 0. All 36 samples verified: 2 Waiting, 34 Healthy, 0 Other; first Healthy sample 2, no unhealthy sample after readiness. These are 34 consecutive Healthy sampled checks, not uninterrupted continuous monitoring. Final sample 35: Healthy, Issues [], Licensed Valid, connectivity success, WSL running; last-known-good 21:41:48 Active. Plug-in 2.26.921.1 / WSL 3.0.1.0 / Production; Defender app 101.26081.0010. Docker remained running; observation completed and keepalive process absent.
WSL Linux cloud process visibilityPASS
LIMITED: Q20 at 21:13:26.144 UTC returned 14 rows including Windows launchers and real Linux WSL events. The selected busybox shell at 21:10:36.623687 UTC used the benign periodic marker with runc init parent; its distinct Linux device matched the health-check WSL identity. In-container shell attribution uses command/time/parent correlation; no native image/pod metadata, full inventory or behavioral alert established.
Before 21:09:36.5 UTC: Docker 29.1.3 client/server, containerd 2.2.1, runc 1.3.4-0ubuntu1~22.04.1, linux/amd64; nginx:1.28-alpine running. Direct guest-container observation: Alpine Linux v3.23, loopback HTTP 200, WSL_VALIDATION_CONTAINER_PROCESS and CONTAINER_READY markers. Local execution only, not cloud telemetry or MDE protection.
Broader container protection inside WSLNOT PROVEN
A later cloud query at 21:25:25.101 UTC returned 3 marker-related rows, corroborating the known local container probe by command/time/runc parent. Local cgroup/PID-namespace evidence links the probe to its container, but local and cloud process IDs differ: direct PID match is NOT PROVEN. No native container/image keys in those rows. This is not automatic container AV, behavioral alerts, native image/pod enrichment or full inventory.
Native WSL-to-Windows hosting relationshipPASS
Q21 at 21:16:09.456 UTC: HTTP 200, 1 returned row, all returned rows retained (selected fields). Native DeviceInfo.HostDeviceId links the distinct WSL Linux endpoint to its Windows11 host; both Onboarded / Active. Names happen to match, but the proof is the ID relationship, not hostname similarity. This is not Docker container/image identity.
WSL logical-device TVMDOCUMENTED LIMIT
The 21:19:47.380 UTC query covered both Windows and WSL identities but returned TVM rows only for Windows. WSL logical-device TVM is documented unavailable; missing WSL rows are not a failed protection test or proof of a vulnerability-free guest.
Controlled container file telemetryPASS
LIMITED: exact Q23 at 21:29:41.776 UTC, HTTP 200, one returned row, all retained with selected fields: FileDeleted event at 21:19:36.84697 UTC for WSL_VALIDATION_FILE_METADATA.txt, initiated by busybox on the distinct WSL endpoint. The known container script locally created, hashed and deleted that file; absence verified. Cloud SHA256 was empty: no cloud FileCreated, hash match or native image identity proven.
Controlled workload network telemetryPASS
LIMITED: exact Q24 at 21:29:56.134 UTC, HTTP 200, 3 WSL-device rows, all retained with selected fields and native HostDeviceId join. Container nginx worker InboundConnectionAccepted at 21:09:36.327727 UTC on TCP port 80; distinct guest-side curl ConnectionRequest to the loopback published port was also observed. Earlier busybox entrypoint row had blank local address / port 0: field-quality caveat. No private addresses published; not network blocking, full inventory or native image identity.
MDC - Defender for Containers results
Independent DfC resultNOT TESTED
No independent DfC installation, runtime or workload result for this WSL guest.
Separate Government ACR image / .NET runtime 6.0.0-amd64
Registry-image scan; never executed; not one of the nginx workloads
Arc / connectivityN/A
Native registry resource, not an Arc-connected host or Kubernetes cluster.
MDE - endpoint results
Endpoint inside imageN/A
No MDE endpoint inside this never-executed image. Host TVM did not produce these image findings.
MDC - Defender for Containers results
Registry image vulnerability assessmentPASS
79 unique CVEs: 31 High, 37 Medium and 11 Low.
Image/package metadataPASS
Image digest, CVE, affected package, installed version, fixed version and fix-availability data verified.
Running-workload coverageNOT PROVEN
This image scan does not demonstrate protection of the running nginx containers or a working Kubernetes sensor.
D06 inside D05: healthy plug-in and limited cloud process, file and network visibility verified. This is a traditional Ubuntu WSL 2 distribution with Docker, not a separate WSLc deployment. The measured shell, FileDeleted and nginx inbound-connection events do not establish container AV, behavioral alerts, native image/pod metadata or full inventory. See open gaps.
D06 runs inside D05 — native cloud proof verified: this WSL guest is on the Windows 11 host, not a separately provisioned VM. Q21 at 21:16:09.456 UTC returned HTTP 200 and one row, all returned rows retained with selected fields. Native DeviceInfo.HostDeviceId links distinct WSL and Windows device IDs, both Onboarded / Active. Names happen to match; the proof is the ID relationship, not hostname similarity. Unlike Q18, this is native WSL hosting metadata, not a query-derived runtime-container ID or Docker image identity.
D05 verification:Q19 executed at 21:10:56.558 UTC: HTTP 200, 5 returned rows, 1 selected Windows11 Onboarded / Active row retained (LastSeen 20:49:35.1658864 UTC), not a complete export. No WSL logical record was identified in that capture. The later Q20 execution at 21:13:26.144 UTC returned 14 marker-process rows including real Linux WSL events, not just Windows launchers. Q01/Q02/Q03 explicitly filter Linux and cannot verify the Windows host; its separately captured onboarding and zero-row alert checks are not executions of those recipes.
Exact OS, kernel, image and agent versions
Versions observed during testing. Missing versions are explicitly marked.
Reference
Operating system / kernel
Container platform
Workload / scope
D01
Ubuntu 22.04.5 LTSKernel: 6.8.0-1064-aws
Docker 29.1.3
nginx:1.28-alpineStandalone-container evidence captured September 29-October 1; AWS host deleted October 1
D02
Ubuntu 22.04.5 LTSKernel: 6.8.0-1064-aws
Podman 3.4.4 (rootful)
nginx:1.28-alpineStandalone-container evidence captured September 29-October 1; AWS host deleted October 1
D03
Amazon Linux 2023.12.20260918Kernel: 6.18.48-109.150.amzn2023.x86_64
EKS 1.36.4 / containerd 2.2.7+unknown
nginx:1.28-alpine; observed image OS: Alpine 3.23.3 / x86_64Kubernetes evidence captured September 29-October 1; AWS node group and cluster deleted October 1
D04
Red Hat Enterprise Linux CoreOS 9.8.20260908-0 (Plow)Kernel: 5.14.0-687.46.1.el9_8.x86_64
API-server and networking audit alerts; separate gated test inconclusive, cleanup confirmedOctober 1 user-assisted retest and Government checks through 22:58 UTC; September 24 and October 1 alert dates preserved
D05
Windows 11 Pro 24H2 / x64Kernel: Windows build 26100.9457
nginx:1.28-alpine inside D06; directly observed Alpine Linux v3.23; loopback HTTP 200 and local container markers verifiedGuest of D05, not an additional VM. Limited process/file/network visibility verified by Q20/Q23/Q24; native hosting by Q21. Completed 35-minute observation: 2 warm-up samples then 34 consecutive Healthy sampled checks, not uninterrupted monitoring. Not complete workload protection.
D01-D03 agents: MDE 101.26081.0010; Arc server agent 1.68.03532.1399. D03 Defender extension 0.7.8; low-level collector 1.4.6. D03's Alpine 3.23.3 / x86_64 was observed in its pod September 30. D01/D02 had only image tags captured then; October 1 directly verified Alpine 3.23.3 for both, as recorded in the fresh-check table above.
2. What was tested
Detailed September 29-30 methods, counts and query receipts below remain that dated baseline. October 1 posture and capture checks are recorded above; no new AV verdict or edited historical query receipt is implied.
PASS = capability demonstrated for the stated criterion, not secure posture. FAIL = measured criterion failed. N/A = not the relevant producer or architecture; DOCUMENTED LIMIT = documented support boundary; NOT TESTED / NOT PROVEN / PENDING = missing evidence; BLOCKED = test could not run. Historical results retain their original date.
Test procedure, product result and verification route
Test / method
MDE result
MDC / Defender for Containers result
Verification
WSL guest and nested Docker executionVerify guest/container execution, sampled plug-in health and Linux cloud process/file/network events independently; do not count Windows launchers as guest telemetry.
D06 guest and Docker execution plus limited process/file/network visibility verified. Completed 35-minute observation: 36 samples, 2 warm-up then 34 consecutive Healthy sampled checks. No uninterrupted monitoring or complete workload-protection claim.
No independent DfC result. Guest/container execution does not establish protection.
Q20 process, Q23 FileDeleted, Q24 nginx network; Q21 native hosting. Final sampled health and Docker running state; PID mismatch and metadata limits retained.
Host AV controlWrite harmless EICAR on the host; check removal and the matching local MDE threat record.
D01/D02: quarantine within 10s on September 30. D03: September 29 quarantine and cloud alert only. D05 separate Windows host test: present 10.09s, absent 60.13s, matching inactive local EICAR threat; no cloud detection yet verified.
Not an independent DfC antivirus test. An MDE alert displayed in MDC remains MDE-produced.
Q03 (Linux cloud alert producer only); local MDE threat record. D05 AV evidence is local; Q19 inventory and Q20 marker telemetry are not AV-alert queries.
Container-file AVWrite canonical EICAR inside each tested container location; check file presence and hash at 10, 60 and 300s.
Registry vulnerability assessment is not file interception. No equivalent DfC antivirus pass is claimed.
Checkpoint table below; local runtime and MDE scan evidence
Container process visibilityCorrelate controlled in-container commands, unique temporary files and time with MDE process/file events, not just host runtime CLIs.
October 1 Q25: D01 20 busybox / 2 FileDeleted rows, D02 12 / 1, D03 11 / 1. Limited visibility, not inventory. Historical D03: 5 matched process rows / 3 PIDs; Q18 returned 45 candidate event rows, not 45 containers.
Q07 returned 0 native cloud container-process rows in its prior scope. October 1 D03 collector capture still failed; MDE records are not DfC evidence.
Host CVEs and insecure settingsQuery host vulnerability rows and latest host configuration assessments; explain applicable failed controls without treating finding availability as compliance.
475 / 459 / 53 vulnerability rows for D01 / D02 / D03. Each had 170 assessments, 9 applicable, 1 failed PUA control (scid-6091). D05: 8 vulnerability rows; 161 assessments, 106 applicable, 59 failed applicable. D06 WSL TVM unavailable by design.
These are MDE / MDVM host findings, not DfC Kubernetes or container-hardening findings.
Q04/Q05/Q15 Linux only. Exact cross-platform Q22 at 21:23:51.247 UTC: 10 metric rows returned, 2 selected Windows rows retained; not a complete export.
Registry image CVEsInspect actual Government ACR vulnerability assessment and package/version metadata for the separate old runtime image.
No endpoint dependency demonstrated inside the image: it was never run.
79 unique CVEs with image/package/fix metadata. No running-nginx mapping was demonstrated.
Registry assessment / portal evidence; Q10 supplied, not executed in this review
Kubernetes runtime sensorCheck installation, pod readiness and low-level collector state independently; do not stop at Ready.
D01-D03 endpoint evidence is separate; MDE on D04 remains unproven.
D03 missing probe; D04 socket failure reproduced October 1. D04 publisher HTTP 200 and two audit alerts are separate positive evidence.
Collector state, init exits, mounts, publisher logs, cloud alerts and support documentation
Query references below identify recipes in How to verify. Some evidence came from local runtime commands or portal assessments, not a KQL execution. Supplied-but-unexecuted recipes are labeled explicitly.
Capability-level comparison and Cyber acceptance boundaries
Compare products for the same stated need. Profile references link results to the versions above; data availability is not an overall Cyber acceptance decision.
Capability / stated need
MDE outcome
MDC / DfC outcome
Test and evidence
Is the needed data available?
Host antivirusPrevent the harmless host test file.
PASSD01 / D02Fresh local quarantine.
PASSD03September 29 host test; not a fresh retest.
PASSD05Separate Windows host EICAR: present at 10.09s, absent at 60.13s; matching inactive local threat. Cloud detection not yet verified.
N/ADfC is not the endpoint-AV producer. An MDE alert displayed in MDC remains MDE evidence.
D01/D02 host controls quarantined within 10s with matching local MDE records. Their cloud follow-up still showed only September 29 alerts. D05: separate Windows host test at 19:53:44.965 UTC with local Virus:DOS/EICAR_Test_File evidence; not WSL or container protection.
AVAILABLEMay satisfy host AV prevention evidence. Fresh local results do not prove fresh cloud-alert delivery or container AV.
Container process visibilitySee some container-launched process events.
PASSD01 / D02September 30 limited process visibility demonstrated.
PASSD03LIMITED: historical in-pod processes matched using derived runtime identity, not native pod/image enrichment.
PASSD01 / D02 / D03October 1 Q25: controlled process/file markers correlated with local executions; no native container/image identity.
D01/D02: four earlier process events. D03: benign in-pod OS/architecture commands at 17:13:55 UTC matched five MDE rows / three distinct PIDs in the 200-row query sample at 17:20:55. A runc-parent working-directory path was matched to Kubernetes runtime identity; this is derived attribution, not structured pod/image enrichment or a behavioral alert.
PARTIALMDE may satisfy Cyber if limited process visibility on D01-D03 is the stated need, even without DfC. D03 attribution requires external runtime correlation; not sufficient for complete inventory or native pod-aware detection.
Automatic container-file antivirusAutomatically remove the canonical test file within 300s.
FAILD01 / D02Original layer, new layer and bind file remained.
FAILD03Existing pod writable layer: canonical file remained at actual elapsed 10/60/300s; cleanup verified.
N/ARegistry image VA is not automatic file interception; no equivalent DfC AV claim was tested.
Seven container-file criteria failed across D01-D03. D03 tested only the existing writable layer (17:30-17:35 UTC); exit 3 recorded the measured failure, not a harness error. File cleanup succeeded; the same container stayed Ready with zero restarts and HTTP 200.
NOT METThe tested automatic-protection criterion failed on all three runtime profiles. D03 had no new-layer, bind, manual-scan or fresh host-control comparison. Manual scan success elsewhere does not satisfy the automatic criterion.
N/AThese measured host TVM assessments are not DfC workload-configuration findings.
D01-D03 each: 170 latest assessments, 9 applicable, 1 failed PUA block-mode control. D05: 161 latest assessments, 106 applicable, 59 failed applicable. These are reported failures needing contextual review: one sampled control is flagged applicable while its knowledge base excludes Azure VMs. No remediation performed; findings availability is not secure posture.
AVAILABLEMDE may satisfy host configuration finding visibility. Not proof of secure hosts or Kubernetes/container posture.
Registry image vulnerabilitiesObtain CVE/package/version metadata for the tested registry image.
N/AThe image was never executed; no endpoint inside it.
PASSMDC cloud image VA; separate registry image, not D01-D03 workloads.
The .NET runtime image returned 79 CVEs with digest, package and installed/fixed versions; 31 High, 37 Medium, 11 Low.
AVAILABLEMDC satisfies this tested registry-image metadata need without an in-image MDE endpoint or runtime sensor. Running-nginx mapping remains unproven.
Native Kubernetes runtime captureCollect low-level workload execution evidence through the DfC sensor, distinct from audit-log detection.
N/AMDE host telemetry is not the DfC sensor; limited process evidence is assessed separately above.
FAILD04October 1 socket creation failure reproduced; audit publishing is a separate path.
D03 fresh verification reproduced the missing probe. Reviewed Government Arc sensor exclusion remains a separate documented limit.
NOT METNo working low-level DfC capture demonstrated. D04 audit publishing and two audit alerts are separate capabilities; host MDE cannot substitute for this criterion.
Native workload inventory and postureMap running containers/images and identify insecure workload controls.
NOT PROVEND01 / D02 / D03Host CVEs and PUA findings do not establish workload-level data.
NOT PROVEND01 / D02 / D03No complete inventory, running-image CVE mapping or named workload finding established.
D01-D03: no matching native workload finding. D04: two audit alerts have workload context, not complete inventory, image-CVE mapping or policy enforcement.
NOT PROVENRequired workload-level data is still missing. A supported monitoring route may provide inventory, but is not automatically a security detection.
The scanned registry image was not the running nginx image. Registry scanning needs no endpoint inside the image or working in-cluster sensor. MDE was not disabled for a controlled before/after trial: this is an architectural distinction, not a measured isolation experiment.
Harmless EICAR text; persistent files were hash-verified. The D01/D02 baseline showed active real-time protection, current definitions, no exclusions and no allowed threat families. No protection settings were disabled. D03 adds only one existing-pod writable-layer test, not a fresh host control or new-layer/bind/manual-scan test.
Expected automatic result: remove the test file within 300 seconds. Producer under test: MDE. MDC registry scanning is not an equivalent file-antivirus test. Each row is one comparison.
Environment
Test location
10 seconds
60 seconds
300 seconds
MDE result
D01
Host file control
Quarantined
Not needed
Not needed
PASS
D01
Existing container writable layer
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D01
New same-image writable layer
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D01
Container-created host bind file
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D02
Host file control
Quarantined
Not needed
Not needed
PASS
D02
Existing container writable layer
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D02
New same-image writable layer
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D02
Container-created host bind file
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D03
Existing pod writable layer
Present / hash matched
Present / hash matched
Present / hash matched
FAIL
D01/D02 manual scan distinction: both bind files were later quarantined by explicit host-path scans (1 file / 1 threat each). Their writable-layer namespace scans scanned zero files, including ignore-exclusions. Neither result changes the automatic-failure verdict; neither scan result applies to D03.
D03 completion: the canonical file remained at actual elapsed 10/60/300s. Exit 3 records the measured criterion failure. The test file was then confirmed absent; the exact same container remained Ready, with zero restarts and workload HTTP 200.
D03 read-only health at 17:43:40 UTC: healthy/licensed, real-time fanotify protection and up-to-date definitions. The local threat list still showed only the September 29 host quarantine, not a new matching pod-file threat. This is a post-test observation, not a continuous health trace or fresh host control.
Both original workloads stayed running and returned HTTP 200. Podman cleanup initially hit an AppArmor signal denial; later read-only checks confirmed the temporary runtime object, its storage metadata and test/bind paths absent. No policy bypass was used; the cleanup error remains an investigation item, not the established AV root cause. Behavior monitoring and network protection were disabled in the recorded MDE configuration and were not validated here.
Separate Windows host AV test (D05) — PASS: started September 30 at 19:53:44.965 UTC. EICAR was present at 10.09 seconds and absent at 60.13 seconds, with a matching inactive Virus:DOS/EICAR_Test_File local threat. Read-only recovery matched the original test file: initial detection at 19:53:46.273 UTC, action status at 19:54:01.915 UTC and ActionSuccess true. This is local Windows host evidence only; the current cloud DeviceEvents query returned 0 rows, so no cloud AV alert is claimed. A separate AlertEvidence / AlertInfo host query succeeded (HTTP 200) with 0 rows. It is excluded from the nine Linux comparisons above and is not a WSL or container test.
What data was actually available?
Field names and measured scope, not private records. These distinctions prevent host findings, local inventory and image-scanner findings being treated as interchangeable.
Cyber requirement
MDE data observed
MDC / DfC data observed
Remaining limit / verification
Host identity and health
Endpoint inventory, OS/distribution, onboarding and sensor state; local agent version, license and antivirus health. Q21 verified native HostDeviceId links D06 to D05, both Onboarded / Active, using distinct device IDs rather than matching names.
Arc/resource connectivity is separate management metadata, not proof of MDE or DfC capture.
An enrolled or healthy-looking resource still needs an actual protection test. Native WSL hosting identity is not Docker image/container identity.Q01 (Linux only); Q19 (cross-platform host); Q21 (native WSL hosting PASS)
Process activity
Timestamp, process ID, file name, command line, parent process/command and AdditionalFields.
No native cloud container-process records returned by Q07 in the captured scope.
Process telemetry is not a behavioral alert or proof that every process was collected.Q02, Q07
Container / pod / image identity
D03 candidate runtime ID derived from a parent working-directory path, then independently matched to the runtime.
D04 audit alerts identify API-server and networking workloads with namespace/container/image context; not complete inventory.
Local Kubernetes metadata is not Defender ingestion. Derived paths can be imitated; Q18 remains a correlation aid.Q18
Software vulnerabilities
Host software vendor/name/version, CVE, severity and update guidance; measured counts are package/version/CVE rows.
Separate scanned image: digest, CVE, severity, package, installed/fixed versions and fix availability.
Host CVEs and registry CVEs describe different assets. Neither alone proves the running pod uses the affected image.Q15; Q10 (not executed)
Insecure configuration
Host control ID/name, applicability, compliance, risk description and remediation guidance; Linux PUA block mode was the failed control.
D04 privileged-container alerts verified. Test specification admitted with a warning, not denied; no workload assessment demonstrated.
An alert is not policy enforcement. No remediation/reassessment was performed.Q04, Q05
Alert ownership
Three historical cloud prevention alerts identified Microsoft Defender for Endpoint / Antivirus as producer.
Displaying those alerts in Defender for Cloud would not make them DfC detections.
The latest cloud check still showed September 29 alerts, not fresh cloud-alert proof for September 30 local tests.Q03
3. Gaps for engineering review
G01MDE automatic file interception — Open
Observed: Seven container-file criteria failed: six D01/D02 cases plus the D03 existing pod writable layer. All retained canonical content at 10/60/300s.
Next check: Investigate file-event and mount/namespace handling with the recorded versions. D01/D02 host-path custom scans recognized bind-file content; no D03 manual scan was performed. The cause of automatic misses is not established.
G02MDE writable-layer scan path — Open
Observed: Custom scans through /proc/<pid>/root scanned zero files, including ignore-exclusions.
Next check: Validate a supported way to scan the exact writable-layer file. Exit code 0 is not a detection pass; zero scanned files are not an engine miss.
G03Defender for Containers runtime — Failed / support boundary
Observed: D03: low-level collector cannot open /ebpf/sysdig-ebpf.o. Ready pods did not mean working capture.
Next check: Resolve Government Arc sensor eligibility and OS/kernel support before deployment remediation. Reviewed component documentation excludes the Government Arc sensor; AL2023 is absent from the verified sensor OS list.
G04Container metadata and workload posture — Partial / incomplete
Observed: D04 audit alerts contain workload context, not complete inventory, running-image CVE mapping or admission enforcement.
Next check: Require workload/image mapping and eligible posture tests. Host MDE findings and alerts cannot establish inventory. AMA/Container insights is separate monitoring; no DCR deployment or Government Arc eligibility was verified.
Observed: Two audit alerts verified; socket failure and cgroup warnings persist. Gated test: no matching alert in one hour or the later recheck; cleanup confirmed.
Next check: Confirm supported collection paths and cgroup layout. Gated result is inconclusive, not universal detection failure. No socket fabrication or managed patch; runtime capture and host MDE remain unproven.
G06Fresh cloud alerts — Not yet verified
Observed: Fresh local MDE quarantines were recorded. The 17:20:14 UTC cloud query still returned only the three September 29 MDE/Antivirus alerts.
Next check: Correlate local threat time and file with the eventual cloud alert. Preserve ServiceSource and DetectionSource; an MDE alert shown in MDC is still an MDE alert.
Not tested: rootless Podman, WSL runtime protection, container-scoped response, node replacement and remediation/reassessment. D04 has dated September/October evidence. Test outcomes do not replace documented eligibility.
Recommended next validation — remaining work, not assumed passes
Further tests must answer an unresolved question; the AWS lab remains retired. OpenShift access was restored and the gated test cleaned up. Confirm support prerequisites before runtime or policy testing. This is not authorization for new billable infrastructure, node replacement, protection changes or response actions.
Capability or scenario
Status
What we know / need
1. Finish evidence download without keeping EC2
CloudShell copies verified
All three full host archives are now copied into standard CloudShell home and match original hashes. Local bundle download remains unverified, but no longer requires running EC2 hosts. Original AV logs, earlier execution receipts and the full MDE marker response remain local. Keep the CloudShell copy until local download is verified; management-resource cleanup remains unverified.
2. Targeted OpenShift follow-up
Audit experiment closed
Two audit alerts credited; gated test inconclusive and cleaned up. Confirm supported detection prerequisites and cgroup layout with engineering. Do not recreate CRC or fabricate sockets; do not install MDE on RHCOS without support confirmation.
3. MDE container AV boundary
Product-guided follow-up
Preserve diagnostics for the existing host-pass/container-automatic-fail comparisons. Confirm expected filesystem/runtime coverage with MDE engineering; repeat the matched controls only after an approved supported change or a new diagnostic hypothesis. More identical EICAR runs alone will not explain the gap.
4. Supported Kubernetes runtime and alert path
Support confirmation first
Use an explicitly supported cloud/OS/runtime as a positive control. Resolve the Government AKS sensor documentation conflict before claiming a supported Government test. Verify healthy capture and native process/audit ingestion, then one reviewed benign simulation and the correct MDC alert producer; verify XDR/Sentinel delivery only if required. No all-scenarios simulation against a broken collector.
5. Running-image to registry finding
Supported path required
Scan the exact benign deployed-image digest in an eligible registry and verify native workload-to-image correlation. Require a completed scan record, not a forced positive CVE count; the existing separate image result is not evidence for running nginx or CRC workloads.
6. Workload configuration enforcement
Eligible Policy path required
In an isolated test namespace, exercise one agreed benign policy violation and verify a workload-specific audit result; test denial only with approval, then clean up. Do not infer enforcement from extension compliance or enable an excluded Government Arc Policy path.
7. Node lifecycle and response
Separate approval / maintenance window
For an intended autoscaling deployment, test whether a replacement node receives the required Arc/MDE onboarding and telemetry automatically. Scope any response action to a supported integration and disposable workload. Do not replace nodes for an unapproved test. This AWS lab is deleted; any future lifecycle test requires a separately approved environment.
Do not repeat without a reason: waiting longer or sending more simulations cannot start a container that cannot be created or supply a missing BPF probe. Do not turn unsupported WSL AV/TVM/response capabilities into failed tests, and do not substitute local inventory or AMA logs for a missing native security finding.
Windows 11 x64 WSL in Government — healthy plug-in; limited process/file/network visibility PASS
Current D05 platform: user-provisioned Windows 11 Pro 24H2, build 26100.9457 x64 on Standard_D4ads_v6. Standard security was preserved; no security baseline was changed. The documented Azure Windows 11 baseline requires Trusted Launch, so this is an unsupported Azure Windows 11 security-baseline comparison, not supported-platform certification.
Measured host and installation: traditional manual Government MDE local-script onboarding exited 0, OnboardingState is 1 and Sense is Running. Government DeviceInfo reported Onboarded / Active. Local guest evidence supplied the OS/build; initial cloud OS fields were empty. WSL 3.0.1.0 and Microsoft-signed plug-in 2.26.921.1 MSI installations exited 0. Reboot completed at 19:24:23 UTC. Separate Windows host AV passed locally; no matching cloud detection is yet verified.
Execution blocker resolved at 21:04:45.733 UTC: the documented LoadUserProfile / CreateEnvironmentBlock / CreateProcessAsUser service method exited 0. The intended user context and loaded profile were verified; Ubuntu import and guest commands succeeded without interactive sign-in or security-policy changes. D06 runs Ubuntu 22.04.5 LTS, kernel 6.18.40.1-microsoft-standard-WSL2, on WSL 3.0.1.0. The distro reported Running, VERSION 2, and the local WSL_USER_PROBE_OK marker was observed. This is a runtime execution PASS, not a protection PASS. Earlier management/preflight failures are historical, not the current deployment blocker.
Nested Docker workload and limited cloud visibility: Docker runs inside D06 on D05. Q20 retained one selected Linux shell row from 14 returned rows, not a complete export; Q21 verified native WSL hosting. A separate stronger local Docker probe matched process/init PID namespaces and the known container cgroup at 21:19:29-36 UTC, with HTTP 200. After earlier zero-row checks, the 21:25:25.101 UTC cloud query returned 3 marker-related rows including the known busybox command at 21:19:28.863816 UTC with runc parent. Command/time/parent corroboration supports attribution to the locally verified container, but local and cloud process IDs differ: direct PID match is NOT PROVEN. A namespace-offset explanation is only a hypothesis. No native container/image keys were present in those rows; POSIX identity, working-directory, permission and CloudPlatform fields are not container enrichment. Separate WSL-device table counts at 21:24:41.437 UTC were 552 process, 42 file and 3 network rows—not container counts or individually verified file/network tests. No complete inventory, behavioral alert, automatic container AV or DfC pass is claimed.
Microsoft Learn grounding: the WSL plug-in documentation supports Windows 11 with the required active WSL distribution. The LoadUserProfile documentation explains that service impersonation does not automatically load a user profile and directs applications to load it before CreateProcessAsUser. The documented API path resolved the automation failure. Interactive sign-in was not required. The recorded Azure security-baseline caveat remains separate from the successfully resolved user-profile execution issue.
The MDE Plan 2 plug-in excludes ARM64, multi-session and custom kernel/command-line configurations. WSL logical-device AV, TVM and response are unavailable by design, not failed test results. WSL is not being labeled generally unavailable in Government. No independent DfC result is established for D05.
Completion and alert boundary: all-sample review at 21:56:19.638 UTC verified the completed 35-minute observation: 36 samples from 21:09:36.7432537 to 21:44:45.8156110 UTC; 2 Waiting, 34 Healthy, 0 Other, first Healthy sample 2 and no unhealthy sample after readiness. Sample 3 was the first selected example, not the first actual Healthy result. These are sampled checks, not an uninterrupted continuous-health claim. Final Docker inspect was true; completion marker verified and keepalive process absent. The scoped host plus WSL alert read at 21:28:04.661 UTC returned HTTP 200 and 0 rows; benign markers were not an alert simulation and zero alerts are not a failed detection test.
Record eligibility separately from execution; publish PASS/FAIL only with the actual criterion and evidence. Keep Windows host AV separate from WSL runtime validation and from the nine Linux comparisons.
4. How to verify and track
For each environment, record OS/kernel, runtime and image version, agent/sensor versions, test time, expected result, actual result, producing product, and evidence reference. Keep real device/resource identifiers in a separate restricted evidence record.
For detections, retain ServiceSource and DetectionSource. For runtime coverage, check actual capture rather than pod readiness. For inventory, distinguish Azure Monitor data from security findings.
Verification queries (optional)
Run one query in its named engine, in your own environment. Queries discover accessible resources without fixed device IDs. Check RBAC, licensing, collection and ingestion before interpreting zero rows. These are queries, not deployed detection rules. Captured rows are samples, not guaranteed complete exports.
Latest accessible DeviceInfo record per device in 30 days, filtered to Linux after deduplication. LastSeen and sensor health are inventory signals, not an AV test or container inventory. Devices absent from this discovery are unknown; reconcile separately against your authoritative asset list.
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux"
| project DeviceId, DeviceName, LastSeen=Timestamp, OSPlatform, OSDistribution,
OnboardingStatus, SensorHealthState, MergedToDeviceId, AzureResourceId
| order by DeviceName asc
Review process events (attribution still required)
Defender XDR Advanced HuntingExecuted successfully; 200 returned rows. 1 selected rows retained; not a complete response export. Capture completeness unknown.
Samples recent processes from accessible Linux devices, not just known runtime names. A process name or Docker parent is not native pod/image enrichment. Correlate a known benign execution with full runtime container identity and UTC before claiming container attribution. This is telemetry, not an alert.
DeviceProcessEvents
| where Timestamp > ago(1d)
| join kind=inner (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux"
| project DeviceId
) on DeviceId
| project Timestamp, DeviceId, DeviceName, FileName, ProcessId,
ProcessCommandLine, InitiatingProcessFileName,
InitiatingProcessCommandLine, AdditionalFields, ReportId
| order by Timestamp desc
| take 200
Retains service and detection source; never relabel an MDE alert as Defender for Containers merely because Defender for Cloud displays it. This device-linked view does not discover every cloud-only alert. XDR AlertId is not assumed equal to an ARM alert resource ID.
AlertInfo
| where Timestamp > ago(7d)
| summarize arg_max(Timestamp, *) by AlertId
| join kind=inner (
AlertEvidence
| where Timestamp > ago(7d)
| join kind=inner (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux"
| project DeviceId
) on DeviceId
| distinct AlertId, DeviceId, DeviceName
) on AlertId
| project Timestamp, DeviceId, DeviceName, AlertId, Title, Severity,
ServiceSource, DetectionSource, Category
| order by Timestamp desc
| take 200
Latest assessment per device/control is selected BEFORE applicability or compliance filtering. Counts cover assessments visible within 30 days; missing or stale devices are unknown, not compliant. Host control findings are not Kubernetes or container configuration findings.
DeviceTvmSecureConfigurationAssessment
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId, ConfigurationId
| join kind=inner (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux"
| project DeviceId
) on DeviceId
| summarize Assessed=count(), Applicable=countif(IsApplicable == true),
NonCompliant=countif(IsApplicable == true and IsCompliant == false),
LastAssessmentUtc=max(Timestamp) by DeviceId, DeviceName
| extend QueryUtc=now()
| order by DeviceName asc
Latest-before-filter prevents old failed states from overriding a newer compliant assessment. Knowledge-base joins describe the control and remediation; nothing is changed. No rows may mean no applicable failures, missing assessments, licensing or RBAC; cross-check Q01 and Q04. These are not insecure-container controls.
DeviceTvmSecureConfigurationAssessment
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId, ConfigurationId
| where IsApplicable == true and IsCompliant == false
| join kind=inner (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux"
| project DeviceId
) on DeviceId
| join kind=leftouter (
DeviceTvmSecureConfigurationAssessmentKB
| project ConfigurationId, ConfigurationName, ConfigurationDescription,
RiskDescription, RemediationOptions
) on ConfigurationId
| project AssessmentUtc=Timestamp, DeviceId, DeviceName, ConfigurationId,
ConfigurationCategory, ConfigurationSubcategory, ConfigurationName,
ConfigurationDescription, RiskDescription, RemediationOptions
| order by DeviceName asc, ConfigurationId asc
Snapshot software table has no Timestamp. DeviceInfo alone uses a 30-day discovery window. VulnerabilityRows counts package/version/CVE rows, not unique CVEs; ApproxDistinctCves is the approximate dcount per device, not additive across devices. Devices missing from this snapshot are unknown, not necessarily free of CVEs. QueryUtc is query time, not assessment time.
DeviceTvmSoftwareVulnerabilities
| join kind=inner (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux"
| project DeviceId
) on DeviceId
| summarize VulnerabilityRows=count(), ApproxDistinctCves=dcount(CveId),
ExampleCves=make_set(CveId, 5) by DeviceId, DeviceName
| extend QueryUtc=now()
| order by DeviceName asc
Discovers accessible cloud process events without fixed cluster or namespace filters. Requires the supported runtime collection and XDR integration; MDE alone does not populate this table. Government Arc sensor exclusions still apply. Empty or unavailable data is not clean posture and does not override documented support boundaries.
CloudProcessEvents
| where Timestamp > ago(7d)
| project Timestamp, AzureResourceId, AwsResourceName, GcpFullResourceName,
HostName, KubernetesNamespace, KubernetesPodName,
ContainerId, ContainerName, ContainerImageName, ImageDigest,
ProcessName, ProcessCommandLine, AgentId
| order by Timestamp desc
| take 200
Correlate monitoring inventory
Log AnalyticsNot executed in this review.
Run in the intended workspace(s). Requires supported Container insights streams and DCR association, independently of MDE. Join on normalized resource + computer + normalized FULL container ID, never a prefix. Missing image-side rows remain visible. ImageID is not assumed to equal a registry manifest digest; this is monitoring inventory, not detection.
KubePodInventory
| where TimeGenerated > ago(2h)
| where isnotempty(ContainerID) and isnotempty(_ResourceId) and isnotempty(Computer)
| extend Scope=tolower(_ResourceId), Computer=tolower(Computer),
RuntimeId=tolower(replace_regex(ContainerID, @"^[^:]+://", ""))
| summarize arg_max(TimeGenerated, *) by Scope, Computer, RuntimeId
| project Scope, Computer, RuntimeId, PodSeen=TimeGenerated,
Namespace, PodName=Name, PodUid, ContainerName, ContainerStatus
| join kind=leftouter (
ContainerInventory
| where TimeGenerated > ago(2h)
| where isnotempty(ContainerID) and isnotempty(_ResourceId) and isnotempty(Computer)
| extend Scope=tolower(_ResourceId), Computer=tolower(Computer),
RuntimeId=tolower(replace_regex(ContainerID, @"^[^:]+://", ""))
| summarize arg_max(TimeGenerated, *) by Scope, Computer, RuntimeId
| project Scope, Computer, RuntimeId, ImageSeen=TimeGenerated,
Image, ImageID, ImageTag, Repository
) on Scope, Computer, RuntimeId
| project Scope, PodSeen, ImageSeen, Computer, Namespace, PodName, PodUid,
RuntimeId, ContainerName, ContainerStatus, Image, ImageID, ImageTag, Repository
| order by PodSeen desc
| take 500
Inspect registry image assessments
Azure Resource GraphNot executed in this review.
Discovery covers selected subscriptions and RBAC. Inspect AssessedResourceType and AdditionalData before interpreting any row as ACR VA; projected image/package fields use the observed artifactDetails/softwareDetails/vulnerabilityDetails schema and can be blank for other versions/types. This sampled output is not a CVE total. After schema discovery, narrow to your registry and immutable digest. Registry VA requires no endpoint inside the image and no running workload; it does not prove AWS agentless support.
securityresources
| where type =~ "microsoft.security/assessments/subassessments"
| extend Details=properties.additionalData
| extend AssessedResourceType=tostring(Details.assessedResourceType),
Digest=tostring(Details.artifactDetails.digest),
Registry=tostring(Details.artifactDetails.registryHost)
| project AssessmentId=id, subscriptionId, resourceGroup, AssessedResourceType,
DisplayName=tostring(properties.displayName), Status=tostring(properties.status.code),
CVE=tostring(Details.vulnerabilityDetails.cveId),
Severity=tostring(Details.vulnerabilityDetails.severity), Digest, Registry,
Repository=tostring(Details.artifactDetails.repositoryName),
Package=tostring(Details.softwareDetails.packageName),
Installed=tostring(Details.softwareDetails.version),
Fixed=tostring(Details.softwareDetails.fixedVersion),
FixStatus=tostring(Details.softwareDetails.fixStatus), AdditionalData=Details
| order by AssessedResourceType asc, Registry asc, Digest asc
| take 500
Derive candidate runtime identity (heuristic, not native enrichment)
Defender XDR Advanced HuntingExecuted successfully; 45 returned rows. 3 selected rows retained; not a complete response export. Capture completeness unknown.
Extracts a candidate container ID from an observed containerd parent working-directory path. This is a heuristic, not a native ContainerId field or complete inventory; verify against the runtime's actual container ID and execution time. The path alone can be imitated and does not supply pod, image digest, image CVEs or a security alert. Runtime/layout differences and missing event context can produce no rows. Results are a 200-row sample.
DeviceProcessEvents
| where Timestamp > ago(1d)
| extend HostContext=parse_json(AdditionalFields)
| extend RuntimeWorkingDirectory=tostring(HostContext.InitiatingProcessCurrentWorkingDirectory)
| extend DerivedContainerId=extract(@"/(?:k8s[.]io|moby)/([0-9a-f]{64})/rootfs(?:/|$)", 1, RuntimeWorkingDirectory)
| where isnotempty(DerivedContainerId)
| project Timestamp, DeviceId, DeviceName, FileName, ProcessId,
DerivedContainerId, RuntimeWorkingDirectory, ProcessCommandLine, ReportId
| order by Timestamp desc
| take 200
Find cross-platform devices and sensor state (Windows / WSL verification)
Defender XDR Advanced HuntingExecuted successfully; 5 returned rows. 1 selected rows retained; not a complete response export. Capture completeness unknown.
Latest accessible DeviceInfo record per device in 30 days, without an OS filter; includes Windows and any reported WSL logical devices. OS fields may initially be empty. Onboarding and sensor health are inventory signals, not proof of host AV or WSL runtime protection. Reconcile identity and freshness with local evidence; the 500-row cap is a sample, not a complete inventory.
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| project LastSeen=Timestamp, DeviceId, DeviceName, OSPlatform, OSDistribution,
OnboardingStatus, SensorHealthState
| order by LastSeen desc, DeviceId asc
| take 500
Defender XDR Advanced HuntingExecuted successfully; 14 returned rows. 1 selected rows retained; not a complete response export. Capture completeness unknown.
Searches the previous day for a deliberately generated benign WSL_VALIDATION command-line marker without an OS filter. Correlate the event time, device identity and process/parent context with the actual WSL execution; a Windows launcher or copied marker alone does not prove guest telemetry or container attribution. These are process events, not AV or behavioral alerts. Zero rows can reflect no marker execution, ingestion delay, RBAC or collection gaps; the 200-row cap is a sample.
DeviceProcessEvents
| where Timestamp > ago(1d)
| where ProcessCommandLine contains "WSL_VALIDATION"
| project Timestamp, DeviceId, DeviceName, FileName, ProcessId,
ProcessCommandLine, InitiatingProcessId, InitiatingProcessFileName,
InitiatingProcessCommandLine, AdditionalFields, ReportId
| order by Timestamp desc
| take 200
Map WSL to Windows with native HostDeviceId (not heuristic container IDs)
Uses Microsoft's documented native HostDeviceId relationship, not the heuristic runtime-container IDs derived by Q18. Selects the latest record per device within 30 days before filtering Linux WSL records, then left-joins the reported host ID to latest accessible host inventory. Missing host fields can reflect RBAC, stale data or ingestion gaps; zero rows do not disprove local guest execution. This relationship is not a protection test, per-distro inventory or container attribution. Bounded to 500 rows.
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux" and isnotempty(HostDeviceId)
| project WSLDeviceId=DeviceId, WSLDeviceName=DeviceName, WSLLastSeen=Timestamp,
HostDeviceId, WSLOnboardingStatus=OnboardingStatus, WSLSensorHealth=SensorHealthState
| join kind=leftouter (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| project HostDeviceId=DeviceId, HostDeviceName=DeviceName, HostOSPlatform=OSPlatform,
HostLastSeen=Timestamp, HostOnboardingStatus=OnboardingStatus, HostSensorHealth=SensorHealthState
) on HostDeviceId
| project WSLLastSeen, WSLDeviceId, WSLDeviceName, WSLOnboardingStatus, WSLSensorHealth,
HostDeviceId, HostDeviceName, HostOSPlatform, HostLastSeen, HostOnboardingStatus, HostSensorHealth
| order by WSLLastSeen desc, WSLDeviceId asc
| take 500
Defender XDR Advanced HuntingExecuted successfully; 10 returned rows. 2 selected rows retained; not a complete response export. Capture completeness unknown.
Cross-platform host summary with separate metric rows. Software vulnerabilities are a current snapshot without a Timestamp filter: counts are software/package/CVE rows, not distinct CVEs. Configuration assessments use the latest device/control record within 30 days before counting applicability and failure. Empty metric columns mean not applicable to that metric row, not zero findings. Devices without TVM rows are absent, not proven secure; WSL logical-device TVM is documented unavailable. No complete asset inventory, remediation, container-image scan or secure posture is implied. Output is capped at 500 metric rows.
union
(
DeviceTvmSoftwareVulnerabilities
| summarize VulnerabilityRows=count() by DeviceId
| extend Metric="Host software vulnerabilities"
),
(
DeviceTvmSecureConfigurationAssessment
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId, ConfigurationId
| summarize Assessed=count(), Applicable=countif(IsApplicable == true),
NonCompliant=countif(IsApplicable == true and IsCompliant == false),
LastAssessmentUtc=max(Timestamp) by DeviceId
| extend Metric="Host configuration assessments"
)
| join kind=leftouter (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| project DeviceId, DeviceName, OSPlatform, OSDistribution, LastSeen=Timestamp
) on DeviceId
| project DeviceId, DeviceName, OSPlatform, OSDistribution, LastSeen, Metric,
VulnerabilityRows, Assessed, Applicable, NonCompliant, LastAssessmentUtc
| order by DeviceName asc, DeviceId asc, Metric asc
| take 500
Samples file events for the controlled WSL_VALIDATION_FILE_METADATA.txt marker over one day without private IDs. Correlate device identity, time and initiating process with the known local container test. FileDeleted alone does not prove FileCreated was captured; an empty SHA256 is not a cloud hash match. No native image identity, complete file coverage, antivirus detection or behavioral alert is implied.
DeviceFileEvents
| where Timestamp > ago(1d)
| where FileName == "WSL_VALIDATION_FILE_METADATA.txt"
| project Timestamp, DeviceId, DeviceName, ActionType, FileName, FolderPath,
SHA256, InitiatingProcessId, InitiatingProcessFileName, AdditionalFields
| order by Timestamp asc
| take 200
Review WSL network events (native host relation, not image identity)
Samples one day of network events for latest Linux DeviceInfo records with native HostDeviceId. Correlate process, time and socket fields with the controlled workload; this identifies WSL devices, not native Docker image/container identity. Missing addresses or zero ports require interpretation, not invented enrichment. Host curl and container nginx events are different observations. No network blocking, complete connection inventory or behavioral alert is proven. Limited to 200 rows.
DeviceNetworkEvents
| where Timestamp > ago(1d)
| join kind=inner (
DeviceInfo
| where Timestamp > ago(30d)
| summarize arg_max(Timestamp, *) by DeviceId
| where OSPlatform =~ "Linux" and isnotempty(HostDeviceId)
| project DeviceId, HostDeviceId
) on DeviceId
| project Timestamp, DeviceId, DeviceName, HostDeviceId, ActionType,
LocalIP, LocalPort, RemoteIP, RemotePort, Protocol,
InitiatingProcessFileName, InitiatingProcessId,
InitiatingProcessCommandLine, AdditionalFields
| order by Timestamp desc
| take 200
Defender XDR Advanced HuntingExecuted successfully; 70 returned rows. 6 selected rows retained; not a complete response export. Capture completeness unknown.
Prerequisite: run an authorized benign process and unique temporary-file probe using the AWS_FINAL_VALIDATION_ prefix inside a known container, then correlate exact command, filename and execution time. One-hour window, oldest-first 200-row cap; includes host launchers, not just in-container events. Device association and markers are not native container/image identity. Some process/file visibility does not prove complete inventory, antivirus interception, behavioral alerts or DfC coverage. Blank parent fields must not be inferred.
union
(DeviceProcessEvents | where Timestamp > ago(1h) | where ProcessCommandLine contains "AWS_FINAL_VALIDATION_" | extend EventTable="DeviceProcessEvents" | project EventTable, Timestamp, DeviceId, FileName, ProcessCommandLine, ProcessId, InitiatingProcessFileName, ActionType, AdditionalFields),
(DeviceFileEvents | where Timestamp > ago(1h) | where FileName startswith "AWS_FINAL_VALIDATION_" | extend EventTable="DeviceFileEvents" | project EventTable, Timestamp, DeviceId, FileName, FolderPath, InitiatingProcessFileName, ActionType, AdditionalFields)
| order by Timestamp asc
| take 200
Microsoft documentation reviewed
Reviewed September 30, 2026. General platform support does not override Government component availability.