Document process containers proxy packaging and deployment for developers - #814
Conversation
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
346a94b to
a5f7540
Compare
There was a problem hiding this comment.
Pull request overview
Expands schema 0.8 ProcessContainer proxy deployment guidance with identity and packaging options.
Changes:
- Documents proxy identity and firewall authorization models.
- Adds an example packaged AppContainer manifest.
- Describes the weaker unpackaged host-loopback configuration.
Show a summary per file
| File | Description |
|---|---|
docs/process-container/networking.md |
Documents proxy deployment and enforcement options. |
docs/process-container/examples/0.8.0-schema.md |
Adds manifest and configuration examples. |
Review details
Tip
Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Suppressed comments (1)
docs/process-container/examples/0.8.0-schema.md:78
- This rule omits
LocalPortMin/LocalPortMax, so it authorizes every inbound TCP port forproxy.exeon every network profile rather than only the documented proxy endpoint. Scope the rule to port 8080 (and have deployers substitute their configured proxy port) to avoid exposing unrelated listeners in the same executable.
<desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all" />
- Files reviewed: 2/2 changed files
- Comments generated: 1
- Review effort level: Balanced
a5f7540 to
3d61728
Compare
There was a problem hiding this comment.
Review details
Suppressed comments (1)
docs/process-container/examples/0.8.0-schema.md:92
- The example still configures
allowedProxyPeerasagent-proxy, but this manifest installs a package whose family name is derived from bothIdentity NameandPublisher(for example,Contoso.AgentProxy_<publisher-id>). Without telling readers to use the installedPackageFamilyName, the sample configuration will not authorize this proxy. Please make that mapping explicit and show how to retrieve the PFN.
Replace the identity, publisher, architecture, executable, display strings,
and logo. The publisher must match the signing certificate. `runFullTrust` is
required by the firewall extension; `TrustLevel="appContainer"` still runs the
proxy in an AppContainer. Replace both firewall-rule port values with the port
from `runtimeConfig.networkProxy`.
- Files reviewed: 2/2 changed files
- Comments generated: 0 new
- Review effort level: Balanced
3d61728 to
918321e
Compare
918321e to
517ab56
Compare
There was a problem hiding this comment.
Review details
Suppressed comments (1)
docs/process-container/examples/0.8.0-schema.md:76
- The current manifest still authorizes inbound TCP on every local port for
proxy.exe, even though this example configures port 8080. That broadens the firewall exception beyond the proxy endpoint and contradicts the stated deployment hardening. Scope the rule withLocalPortMin="8080" LocalPortMax="8080"(and revise the dynamic-port paragraph accordingly); if the proxy genuinely needs a runtime-assigned port, its installer must create/update an equivalently scoped rule after selecting that port.
<desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all" />
- Files reviewed: 2/2 changed files
- Comments generated: 0 new
- Review effort level: Balanced
517ab56 to
9d1b9a1
Compare
There was a problem hiding this comment.
Review details
Suppressed comments (3)
docs/process-container/examples/0.8.0-schema.md:53
- The current wording still permits additional wildcard or non-loopback listeners. Since the manifest grants private-network capability and inbound firewall access, a proxy that also listens on
0.0.0.0or[::]becomes reachable from the private network. Require the proxy to expose only the configured loopback listener.
The proxy must already be running and listening on the loopback address and
port configured by `runtimeConfig.networkProxy`. MXC validates that the
configured endpoint is loopback but does not constrain the proxy's other
listeners. A packaged AppContainer proxy needs `privateNetworkClientServer`,
docs/process-container/examples/0.8.0-schema.md:88
- This package installs an inbound TCP rule for every local port, although the example config uses port 8080. Scope the rule with
LocalPortMin="8080"andLocalPortMax="8080", and update the later prose that currently endorses the unrestricted rule. A dynamic port would require deployment-time creation of a correspondingly scoped firewall rule rather than this static manifest rule.
<desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all" />
docs/process-container/networking.md:115
- The PR description promises packaged non-AppContainer and unpackaged non-AppContainer alternatives, including the weaker
ingress.hostLoopback: "allow"path, but this complete options table and the rest of both changed documents cover only AppContainer proxies. Add the two documented alternatives with their identity, firewall, and isolation implications, or narrow the PR description to the implemented scope.
| Packaged AppContainer | Package family name | AppContainer isolation and package firewall rule |
| Unpackaged AppContainer | AppContainer profile name | AppContainer isolation and administrator firewall rule |
- Files reviewed: 2/2 changed files
- Comments generated: 0 new
- Review effort level: Balanced
9d1b9a1 to
854a618
Compare
There was a problem hiding this comment.
Review details
Suppressed comments (2)
docs/process-container/examples/0.8.0-schema.md:88
- This rule authorizes inbound TCP on every local port and network profile. Since the text explicitly allows the proxy to have other listeners, a proxy that also binds
0.0.0.0or[::]exposes those listeners to the network rather than only to the intended loopback client. Scope the example rule to the configured proxy port and require the proxy listener to bind only to loopback.
<desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all" />
docs/process-container/networking.md:115
- The advertised packaged non-AppContainer and unpackaged non-AppContainer deployment paths are missing: this table lists only the two AppContainer variants, and the file contains no guidance for the weaker
ingress.hostLoopback: "allow"path described in the PR. Please either document those alternatives (including theirallowedProxyPeer/firewall behavior) or narrow the PR description.
A packaged AppContainer proxy is recommended. Supported deployment options are:
| Proxy deployment | `allowedProxyPeer` | Enforcement |
|---|---|---|
| Packaged AppContainer | Package family name | AppContainer isolation and package firewall rule |
| Unpackaged AppContainer | AppContainer profile name | AppContainer isolation and administrator firewall rule |
- Files reviewed: 2/2 changed files
- Comments generated: 0 new
- Review effort level: Balanced
854a618 to
05d2a94
Compare
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 789939a6-ae1c-4fb7-9729-5988d3657e7b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 789939a6-ae1c-4fb7-9729-5988d3657e7b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 789939a6-ae1c-4fb7-9729-5988d3657e7b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 789939a6-ae1c-4fb7-9729-5988d3657e7b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 789939a6-ae1c-4fb7-9729-5988d3657e7b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2449dac1-feb7-4da5-a249-9df137cc5360
4f7f4b3 to
8c681f7
Compare
📖 Description
Adds stacked ProcessContainer proxy deployment guidance for schema 0.8.
hostLoopback, WFP, and firewall responsibilities.🔗 References
🔍 Validation
✅ Checklist
Cargo.lock, thedependency-feed-checkcheck passes (see docs/pull-requests.md)📋 Issue Type
GitHub Actions runs the PR validation build automatically. The ADO pipeline
(
MXC-PR-Build) is the Azure version of the PR pipeline, kept in parity with the GitHubActions build; it runs on merge to
main, and Microsoft reviewers with write access can trigger iton a PR with
/azp run. See docs/pull-requests.md.If the
dependency-feed-checkcheck fails on a new dependency, the crate must be added tothe feed before the PR can pass. See docs/pull-requests.md
for the steps.
Microsoft Reviewers: Open in CodeFlow