Skip to content

confcom: C-WCOW enforcement-point support, Elastic SAN mounts, and package/versioning updates - #10273

Open
Takuro Sato (takuro-sato) wants to merge 23 commits into
Azure:mainfrom
takuro-sato:esan-cwcow-change
Open

Takuro Sato (takuro-sato) wants to merge 23 commits into
Azure:mainfrom
takuro-sato:esan-cwcow-change

Conversation

@takuro-sato

@takuro-sato Takuro Sato (takuro-sato) commented Aug 28, 2026

Copy link
Copy Markdown

🤖 PR Validation — ⚠️ Review suggested

Breaking Changes
⚠️ None
⚠️Azure CLI Extensions Breaking Change Test
⚠️confcom
rule cmd_name rule_message suggest_message
⚠️ 1006 - ParaAdd confcom acipolicygen cmd confcom acipolicygen added parameter prerelease_policy_api

Summary

Extends the az confcom extension (src/confcom, azext_confcom) to generate policies for the newer hcsshim policy framework, adds several Confidential-WCOW (C-WCOW) enforcement points, adds Elastic SAN volume support for Confidential ACI, and bundles the CimWriter binaries needed to build C-WCOW policies on WS2025. The extension is bumped to 2.2.0.

Framework / API version bumps

  • api_version 0.11.00.12.0; framework_version0.5.0 across the customer/sidecar rego templates, internal_config.json, README, docs, and regenerated samples.

New C-WCOW enforcement points (hcsshim PR #2842)

All of the following have no ARM property and are settable only via the --input JSON:

  • allowedLogProviders / allowLogProviderDropping — ETW log-provider allow-list and dropping switch (dropping defaults to true).
  • allowHostNetwork — wires host_network (defaults false).
  • allowRegistryChangesDropping and per-container registryChanges (hcsshim shape {"add_values":[...], "delete_keys":[...]}, emitted per container only when supplied).
  • mappedDirectories — backs mapped_directory_mount/unmount (VSMB hot-add) for --input
  • Windows policy template also wires registry_changes, unmount_cims, scratch_unmount, and load_transparency_trust_list.

Elastic SAN volumes (Confidential ACI)

  • New elasticSan mount type (sandbox:///tmp/atlas/esanVolume/.+).
  • On Linux, host_network is forced on when an Elastic SAN mount is present, matching Compute-ACI (iscsid needs the UVM init netns).

Windows / VN2 fixes

  • Windows managed-identity env rules (adds IDENTITY_ENDPOINT); Windows containers get all injected rules except OPENGCS (TERM=xterm is Linux-GCS only).
  • Windows VN2 default mounts (Windows destination paths, e.g. C:\var\run\secrets\...) via new get_default_mounts_* platform-aware helpers.
  • Default container signals now include SIGKILL (9) and SIGTERM (15).

Packaging

  • rootfs_proxy.py: fetch integrity-vhd v2.2 binaries (updated SHAs) and bundle CimWriter.dll + CimWriter.LICENSE.pdf; binary list restructured to fetch all platforms at build time. Added to .gitignore.

Tests

  • New test_confcom_input_fields.py covering host-network, signals, Windows wiring, registry-changes (dropping + per-container), mapped-directories, and log-providers.
  • test_confcom_scenario.py updated for framework_version 0.5.0; samples regenerated.

This checklist is used to make sure that common guidelines for a pull request are followed.

Related command

confcom

General Guidelines

  • Have you run azdev style <YOUR_EXT> locally? (pip install azdev required)
  • Have you run python scripts/ci/test_index.py -q locally? (pip install azdev required)
  • My extension version conforms to the Extension version schema

For new extensions:

About Extension Publish

There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify src/index.json.

@azure-client-tools-bot-prd

Copy link
Copy Markdown

Hi Takuro Sato (@takuro-sato),
Please write the description of changes which can be perceived by customers into HISTORY.rst.
If you want to release a new extension version, please update the version in pyproject.toml (or setup.py, if the extension has not migrated yet) as well.

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

@microsoft-github-policy-service microsoft-github-policy-service Bot added the customer-reported Issues that are reported by GitHub users external to the Azure organization. label Aug 28, 2026
@microsoft-github-policy-service

Copy link
Copy Markdown
Contributor

Thank you for your contribution Takuro Sato (@takuro-sato)! We will review the pull request and get back to you soon.

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

@yonzhan

Copy link
Copy Markdown
Collaborator

confcom

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

@takuro-sato Takuro Sato (takuro-sato) changed the title Esan cwcow change [WIP[Esan cwcow change Sep 7, 2026
@takuro-sato Takuro Sato (takuro-sato) changed the title [WIP[Esan cwcow change [WIP]Esan cwcow change Sep 7, 2026
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

@takuro-sato Takuro Sato (takuro-sato) changed the title [WIP]Esan cwcow change confcom: C-WCOW enforcement-point support, Elastic SAN mounts, and package/versioning updates Sep 10, 2026
Comment thread src/confcom/azext_confcom/azext_metadata.json Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for taking in the LCOW changes too!

Comment thread src/confcom/azext_confcom/security_policy.py
Comment thread src/confcom/azext_confcom/tests/latest/test_confcom_scenario.py Outdated
Comment thread src/confcom/azext_confcom/README.md Outdated
@takuro-sato
Takuro Sato (takuro-sato) marked this pull request as ready for review September 14, 2026 15:56
Copilot AI lite review requested due to automatic review settings September 14, 2026 15:56
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
There may be pipelines that require an authorized user to comment /azp run to run.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A critical policy deserialization incompatibility and moderate input-validation gaps remain unresolved, alongside documentation and regression-test nits.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

This PR extends az confcom with hcsshim 0.5/C-WCOW policy support, Elastic SAN mounts, Windows VN2 behavior, and packaging updates.

Changes:

  • Adds C-WCOW enforcement inputs and policy wiring.
  • Adds Elastic SAN handling and Windows platform defaults.
  • Updates versions, templates, samples, documentation, tests, and bundled binaries.

Open findings remain: a critical generated-policy/model deserialization incompatibility; moderate validation gaps for mappedDirectories and allowedLogProviders; and nit requests for framework-version documentation, Windows registry_changes assertions, and an Elastic SAN regression test.

File summaries
File Summary
src/confcom/setup.py Version and package asset updates.
src/confcom/samples/vn2/workload_identity/policy.rego Regenerated VN2 workload-identity policy sample.
src/confcom/samples/vn2/workload_identity/containers.inc.rego Regenerated VN2 workload-identity container fragment.
src/confcom/samples/vn2/volume_claim_templates/policy.rego Regenerated VN2 volume-claim policy sample.
src/confcom/samples/vn2/volume_claim_templates/containers.inc.rego Regenerated VN2 volume-claim container fragment.
src/confcom/samples/vn2/special_env_regex/policy.rego Regenerated VN2 special-environment policy sample.
src/confcom/samples/vn2/special_env_regex/containers.inc.rego Regenerated VN2 special-environment container fragment.
src/confcom/samples/vn2/signals/policy.rego Regenerated VN2 signals policy sample.
src/confcom/samples/vn2/signals/containers.inc.rego Regenerated VN2 signals container fragment.
src/confcom/samples/vn2/security_context_merge/policy.rego Regenerated VN2 security-context policy sample.
src/confcom/samples/vn2/security_context_merge/containers.inc.rego Regenerated VN2 security-context container fragment.
src/confcom/samples/vn2/seccomp_profile/policy.rego Regenerated VN2 seccomp policy sample.
src/confcom/samples/vn2/seccomp_profile/containers.inc.rego Regenerated VN2 seccomp container fragment.
src/confcom/samples/vn2/resourcefieldref_env/policy.rego Regenerated VN2 resource-field policy sample.
src/confcom/samples/vn2/resourcefieldref_env/containers.inc.rego Regenerated VN2 resource-field container fragment.
src/confcom/samples/vn2/read_only_mounts/policy.rego Regenerated VN2 read-only-mount policy sample.
src/confcom/samples/vn2/read_only_mounts/containers.inc.rego Regenerated VN2 read-only-mount container fragment.
src/confcom/samples/vn2/privileged_container/policy.rego Regenerated VN2 privileged-container policy sample.
src/confcom/samples/vn2/privileged_container/containers.inc.rego Regenerated VN2 privileged-container fragment.
src/confcom/samples/vn2/multi_container/policy.rego Regenerated VN2 multi-container policy sample.
src/confcom/samples/vn2/multi_container/containers.inc.rego Regenerated VN2 multi-container fragment.
src/confcom/samples/vn2/init_and_lifecycle/policy.rego Regenerated VN2 lifecycle policy sample.
src/confcom/samples/vn2/init_and_lifecycle/containers.inc.rego Regenerated VN2 lifecycle container fragment.
src/confcom/samples/vn2/fieldref_env/policy.rego Regenerated VN2 field-reference policy sample.
src/confcom/samples/vn2/fieldref_env/containers.inc.rego Regenerated VN2 field-reference container fragment.
src/confcom/samples/vn2/configmap_secret_env/policy.rego Regenerated VN2 ConfigMap/Secret policy sample.
src/confcom/samples/vn2/configmap_secret_env/containers.inc.rego Regenerated VN2 ConfigMap/Secret container fragment.
src/confcom/samples/vn2/basic_command_args/policy.rego Regenerated VN2 command-argument policy sample.
src/confcom/samples/vn2/basic_command_args/containers.inc.rego Regenerated VN2 command-argument container fragment.
src/confcom/samples/radius/volumes/aci_container.inc.rego Regenerated Radius volume policy fixture.
src/confcom/samples/radius/sidecar/aci_container.inc.rego Regenerated Radius sidecar fixture.
src/confcom/samples/radius/sidecar/aci_container_2.inc.rego Regenerated second Radius sidecar fixture.
src/confcom/samples/radius/sidecar/aci_container_1.inc.rego Regenerated first Radius sidecar fixture.
src/confcom/samples/radius/exec-probes/aci_container.inc.rego Regenerated Radius exec-probe fixture.
src/confcom/samples/radius/demo/aci_container.inc.rego Regenerated Radius demo fixture.
src/confcom/samples/radius/compute-volumes/aci_container.inc.rego Regenerated compute-volume fixture.
src/confcom/samples/radius/compute-volumes-2/aci_container.inc.rego Regenerated second compute-volume fixture.
src/confcom/samples/radius/compute-basic/aci_container.inc.rego Regenerated basic compute fixture.
src/confcom/samples/radius/command-args/aci_container.inc.rego Regenerated command-argument fixture.
src/confcom/samples/images/minimal/aci_container.inc.rego Regenerated minimal image fixture.
src/confcom/samples/images/environment_variables/aci_container.inc.rego Regenerated image environment fixture.
src/confcom/samples/images/command/aci_container.inc.rego Regenerated image command fixture.
src/confcom/samples/aci/volume_mounts/container1.rego Regenerated ACI volume-mount fixture.
src/confcom/samples/aci/volume_mount_secret/container1.rego Regenerated ACI secret-volume fixture.
src/confcom/samples/aci/variables/policy.rego Regenerated ACI variables policy.
src/confcom/samples/aci/variables/policy_fragment.rego Regenerated ACI variables fragment.
src/confcom/samples/aci/variables/policy_exclude_default_fragment.rego Regenerated ACI variables exclusion fragment.
src/confcom/samples/aci/variables/policy_disable_stdio.rego Regenerated ACI variables stdio fragment.
src/confcom/samples/aci/variables/container1.rego Regenerated ACI variables container fixture.
src/confcom/samples/aci/security_context_run_as_user/policy_exclude_default_fragment.rego Regenerated run-as-user policy fragment.
src/confcom/samples/aci/security_context_run_as_user/container1.rego Regenerated run-as-user container fixture.
src/confcom/samples/aci/security_context_run_as_group/container1.rego Regenerated run-as-group container fixture.
src/confcom/samples/aci/security_context_capabilities_drop/policy.rego Regenerated capability-drop policy.
src/confcom/samples/aci/security_context_capabilities_drop/policy_infrastructure_svn.rego Regenerated infrastructure capability policy.
src/confcom/samples/aci/security_context_capabilities_drop/policy_fragment.rego Regenerated capability-drop fragment.
src/confcom/samples/aci/security_context_capabilities_drop/policy_fragment_plus_infrastructure_svn.rego Regenerated combined capability fragment.
src/confcom/samples/aci/security_context_capabilities_drop/policy_exclude_default_fragment.rego Regenerated capability exclusion fragment.
src/confcom/samples/aci/security_context_capabilities_drop/policy_disable_stdio.rego Regenerated capability stdio fragment.
src/confcom/samples/aci/security_context_capabilities_drop/container1.rego Regenerated capability-drop container fixture.
src/confcom/samples/aci/security_context_capabilities_add/container1.rego Regenerated capability-add container fixture.
src/confcom/samples/aci/security_context_capabilities_add_drop/container1.rego Regenerated capability add/drop fixture.
src/confcom/samples/aci/multi_containers/container2.rego Regenerated second multi-container fixture.
src/confcom/samples/aci/multi_containers/container1.rego Regenerated first multi-container fixture.
src/confcom/samples/aci/multi_container_groups/container1.rego Regenerated multi-container-group fixture.
src/confcom/samples/aci/minimal/policy.rego Regenerated minimal ACI policy.
src/confcom/samples/aci/minimal/policy_fragment.rego Regenerated minimal policy fragment.
src/confcom/samples/aci/minimal/policy_exclude_default_fragment.rego Regenerated minimal exclusion fragment.
src/confcom/samples/aci/minimal/policy_disable_stdio.rego Regenerated minimal stdio fragment.
src/confcom/samples/aci/minimal/container1.rego Regenerated minimal container fixture.
src/confcom/samples/aci/existing_policy/policy.rego Regenerated existing-policy sample.
src/confcom/samples/aci/existing_policy/policy_fragment.rego Regenerated existing-policy fragment.
src/confcom/samples/aci/existing_policy/policy_exclude_default_fragment.rego Regenerated existing-policy exclusion fragment.
src/confcom/samples/aci/existing_policy/container1.rego Regenerated existing-policy container fixture.
src/confcom/samples/aci/existing_policy_allow_all/policy_exclude_default_fragment.rego Regenerated allow-all exclusion fragment.
src/confcom/samples/aci/existing_policy_allow_all/container1.rego Regenerated allow-all container fixture.
src/confcom/samples/aci/environment_variables/container1.rego Regenerated environment-variable fixture.
src/confcom/samples/aci/default_variables/policy.rego Regenerated default-variables policy.
src/confcom/samples/aci/default_variables/policy_fragment.rego Regenerated default-variables fragment.
src/confcom/samples/aci/default_variables/policy_exclude_default_fragment.rego Regenerated default-variable exclusion fragment.
src/confcom/samples/aci/default_variables/policy_disable_stdio.rego Regenerated default-variable stdio fragment.
src/confcom/samples/aci/default_variables/container1.rego Regenerated default-variable container fixture.
src/confcom/samples/aci/default_variables_override/container1.rego Regenerated default-variable override fixture.
src/confcom/samples/aci/container_group_profiles/policy.rego Regenerated container-group profile policy.
src/confcom/samples/aci/container_group_profiles/policy_fragment.rego Regenerated container-group profile fragment.
src/confcom/samples/aci/container_group_profiles/policy_exclude_default_fragment.rego Regenerated profile exclusion fragment.
src/confcom/samples/aci/container_group_profiles/container1.rego Regenerated profile container fixture.
src/confcom/samples/aci/conflicting_variables/container1.rego Regenerated conflicting-variable fixture.
src/confcom/samples/aci/command/container1.rego Regenerated command fixture.
src/confcom/HISTORY.rst Release notes for the update.
src/confcom/azext_confcom/tests/latest/test_confcom_scenario.py Updated scenario coverage for the framework version.
src/confcom/azext_confcom/rootfs_proxy.py Updated integrity-vhd and CimWriter packaging.
src/confcom/azext_confcom/README.md Documentation update; framework-version example remains inconsistent.
src/confcom/azext_confcom/lib/containers.py Default signal serialization updates.
src/confcom/azext_confcom/docs/policy_enforcement_points.md Enforcement-point documentation; framework-version example remains inconsistent.
src/confcom/azext_confcom/data/sidecar_rego_policy.txt Updated sidecar policy template.
src/confcom/azext_confcom/data/internal_config.json Updated policy and mount configuration.
src/confcom/azext_confcom/data/customer_rego_policy.txt Updated customer policy template; critical deserialization incompatibility remains.
src/confcom/azext_confcom/data/customer_rego_policy_windows.txt Updated Windows customer policy template.
src/confcom/azext_confcom/data/customer_rego_fragment.txt Updated customer policy fragment.
src/confcom/azext_confcom/container.py Windows rules and registry-change serialization; output assertions remain needed.
src/confcom/azext_confcom/config.py New inputs, signals, and platform-aware mounts.
src/confcom/azext_confcom/azext_metadata.json Preview metadata update.
src/confcom/.gitignore Binary build-artifact exclusions.
Review details

Suppressed comments (2)

src/confcom/azext_confcom/container.py:831

  • The new Windows serialization branch is not verified by the added tests: RegistryChangesInput only checks the private _registry_changes field and never asserts that get_policy_json() emits registry_changes for Windows (or omits it for Linux). Add output assertions so this policy contract cannot regress while parsing tests still pass.
            # registry_changes is Windows-only and emitted only when supplied
            if self._registry_changes:
                elements[config.POLICY_FIELD_CONTAINERS_ELEMENTS_REGISTRY_CHANGES] = self._registry_changes

src/confcom/azext_confcom/security_policy.py:1180

  • allowedLogProviders is passed through without checking that it is a list of strings. A malformed string value is emitted as allowed_log_providers := "..." instead of a Rego array, so the generated C-WCOW policy has the wrong type; reject invalid input before serialization.
    allowed_log_providers = case_insensitive_dict_get(
        policy_input_json, config.ACI_FIELD_ALLOWED_LOG_PROVIDERS
    ) or []
  • Files reviewed: 148/210 changed files
  • Comments generated: 5
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/confcom/azext_confcom/data/customer_rego_policy.txt Outdated
Comment thread src/confcom/azext_confcom/security_policy.py Outdated
Comment thread src/confcom/azext_confcom/README.md Outdated
Comment thread src/confcom/azext_confcom/docs/policy_enforcement_points.md Outdated
Comment thread src/confcom/azext_confcom/security_policy.py
@yonzhan

Copy link
Copy Markdown
Collaborator

confcom

@yonzhan

Copy link
Copy Markdown
Collaborator

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved critical serialization and moderate mapped-directory and release-version issues remain.

Get a fresh assessment by requesting another Copilot review.

Review details

Suppressed comments (3)

src/confcom/azext_confcom/data/customer_rego_policy_windows.txt:38

  • This placeholder is populated unconditionally with _get_mapped_directory_rego(), so Windows policies with no mappedDirectories still emit mapped_directories := [] and both mapped_directory_mount/mapped_directory_unmount bindings. The PR description says the list and wiring are emitted only when the list is non-empty; either conditionally omit this block or update the stated contract and tests.
%sload_fragment := data.framework.load_fragment

src/confcom/azext_confcom/lib/serialization.py:119

  • The PR summary and both policy docs state that mapped_directories and its enforcement bindings are emitted only when mappedDirectories is non-empty, but this branch always serializes mapped_directories := [] for Windows and the binding list above always includes the mapped-directory rules. This changes every Windows policy and contradicts the stated contract; either gate both on a non-empty list or update the contract and tests to document the always-wired behavior.
{"mapped_directories := " + mapped_directories_json if is_windows else ""}

{enforcement_bindings}

src/confcom/azext_confcom/security_policy.py:268

  • The PR description and the updated documentation say mapped_directories and its bindings are emitted only when the list is non-empty, but this helper always emits mapped_directories := [] and both enforcement bindings; the added test also locks in the opposite behavior. Please reconcile the implementation, tests, and stated contract before merging.
    def _get_mapped_directory_rego(self) -> str:
        return (
            f"mapped_directories := {pretty_print_func(self._mapped_directories)}\n"
            "mapped_directory_mount := data.framework.mapped_directory_mount\n"
            "mapped_directory_unmount := data.framework.mapped_directory_unmount\n"
        )
  • Files reviewed: 163/214 changed files
  • Comments generated: 2
  • Review effort level: Lite

Comment thread src/confcom/azext_confcom/lib/serialization.py
Comment thread src/confcom/setup.py
@a0x1ab

Copy link
Copy Markdown
Member

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

Assisted-by: GitHub-Copilot copilot-review
Signed-off-by: Tingmao Wang <tingmaowang@microsoft.com>
(cherry picked from commit 72c0de5)
Windows VN2 pods need CCE policies that match what actually lands in the
container at runtime. The mount *sources* are still emitted by the (Linux)
mounthost as sandbox:///tmp/atlas/emptydir/.+, but the *destination* paths are
translated to Windows form by k8s/containerd/hcsshim (e.g.
/var/run/secrets/... -> C:\var\run\secrets\..., /etc/hosts ->
C:\Windows\System32\drivers\etc\hosts). Windows managed identity also exposes
IDENTITY_ENDPOINT, which Linux does not.

Branch VN2 mounts and injected env and mount rules based on platform
(linux/amd64 vs windows/amd64):
- Add Windows mount sets (C:\ destinations; empty user/privileged sets) and
  managedIdentityWindows env rules (adds IDENTITY_ENDPOINT).
- IDENTITY_ENDPOINT is WCOW-only for now to avoid changing a bunch of LCOW
  tests.
- config.py: platform-aware get_default_mounts_*_virtual_node() helpers.
- container.py: pick Windows env rules (managed identity + restart only;
  OPENGCS/FABRIC stay Linux-specific) and Windows VN2 mounts by platform.
- security_policy.py: route the VN2 privileged / workload-identity mount call
  sites through the platform-aware helpers.

Assisted-by: GitHub Copilot:claude-opus-4.8
Signed-off-by: Tingmao Wang <tingmaowang@microsoft.com>
(cherry picked from commit 42cecaf)
Signed-off-by: Tingmao Wang <tingmaowang@microsoft.com>
(cherry picked from commit 32a06b7)
Signed-off-by: Tingmao Wang <tingmaowang@microsoft.com>
(cherry picked from commit 773679c)
Support the log_provider enforcement point from hcsshim PR Azure#2763 (CWCOW: Logging enforcement) in the Windows policy producer. The Windows rego policy template now wires log_provider and emits allow_log_provider_dropping plus an allowed_log_providers list.

There is no ARM property for log providers, so the allow-list is settable only through the --input JSON via the new allowedLogProviders and allowLogProviderDropping fields. allow_log_provider_dropping defaults to true, mirroring allow_environment_variable_dropping, so providers outside the allow-list are dropped rather than denied.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>
Bump api_version to 0.12.0 and framework_version to 0.5.0 to match the hcsshim CWCOW policy framework, and add the enforcement points introduced by PR Azure#2842.

The Windows policy template now wires registry_changes, unmount_cims, host_network and load_transparency_trust_list, and emits the allow_host_network, allow_unencrypted_scratch, allow_capability_dropping and allow_registry_changes_dropping switches. The Linux policy template wires host_network and load_transparency_trust_list (newly active at api_version 0.12.0) and emits allow_host_network, which has no framework default. The fragment and sidecar templates are bumped to framework_version 0.5.0.

These enforcement points have no ARM property, so they are exposed only through confcom-owned --input (-i) JSON fields, mirroring the log-provider fields: the top-level allowHostNetwork and allowRegistryChangesDropping bools, the per-container registryChanges object (passed through in the hcsshim add_values/delete_keys shape), and the top-level mappedDirectories list. mapped_directory_mount/unmount are wired only when mappedDirectories is supplied, since wiring them without backing data can only deny; an undeclared hot-add is denied by the framework either way.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>
Elastic SAN volumes on Confidential ACI are bind-mounted into the workload
container by the atlas mounthost from /tmp/atlas/esanVolume/<deployment>/<volume>,
analogous to Azure File's /tmp/atlas/azureFileVolume/... . Register a matching
"elasticSan" mount type so CCE policies accept the Elastic SAN volume mount.

The type name matches the ARM/CCE volume property (Volume.ElasticSan ->
"elasticSan") and the source mirrors the azureFile entry, both per Compute-ACI
release/rel-20260429.

Compute-ACI also places a Linux pod that mounts an Elastic SAN volume on the
host network (iscsid needs the UVM init netns), so the generated policy for such
a pod must allow the host_network enforcement point (added in Azure#2842). Detect the
elasticSan mount type and force allow_host_network on for Linux policies, leaving
the flag at its default False otherwise.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>
Allow signals 9 and 15 for every generated workload container and the default pause container. Preserve additional image stop signals while ensuring the shutdown defaults are always present.

Regenerate the ACI, VN2, Radius, and image policy fixtures to reflect the new defaults.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>
Export scratch_unmount from generated Windows policies so container teardown clears framework scratch metadata and container recreation can remount the same path.

Add a regression assertion covering both scratch mount and unmount wiring.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Takuro Sato <takurosato@microsoft.com>
Add "vtable" entry for host_network and load_transparency_trust_list, and
transparently pass through allowed_log_providers which contains a list
rather than a boolean. Then for the C-WCOW ones conditionally add them.

Assisted-by: GitHub-Copilot
Signed-off-by: Tingmao Wang <tingmaowang@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep existing Linux policy and fragment output on the deployed policy contract while allowing callers to explicitly select the latest bundled Linux API and framework. Windows continues to use the latest bundled contract, and Radius serialization preserves enforcement-point version boundaries.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Always emit the mapped-directory enforcement bindings, including an empty rule set, and reject malformed mappedDirectories input instead of coercing values.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update the infrastructure_svn scenario test to assert the generated fragment minimum_svn instead of an unrelated framework version.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add mapped_directories and registry_changes to the Radius policy models and preserve them across policy deserialization and serialization.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Update the Rego examples using policy API 0.12.0 to declare the corresponding framework version 0.5.0.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Tingmao Wang <m@maowtm.org>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document that Windows policies always wire mapped-directory enforcement and use an empty list to deny undeclared hot-adds.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

customer-reported Issues that are reported by GitHub users external to the Azure organization.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants