Skip to content

Commit c794afa

Browse files
PER-14853: Add HTTP Egress Proxy customer documentation (#640)
* PER-14853: Add HTTP Egress Proxy customer documentation Add a new customer-facing documentation section under Permit MCP Gateway for the HTTP Egress Proxy and the asg CLI — governing an agent's arbitrary outbound HTTP/HTTPS traffic with the same AuthN/AuthZ/consent/HITL the gateway applies to MCP tool calls. New pages (docs/permit-mcp-gateway/http-egress-proxy/): - Overview, Quick Start, asg CLI, Egress Rules, Credentials & Connections, Authorization & Trust, Connecting Agents, Security Also registers the section in sidebars.js and links it from the gateway index. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * PER-14853: Sharpen HTTPS passthrough/intercept accuracy in proxy docs Verified against gateway source that TLS interception (credential injection, path rules, response scrubbing on HTTPS) is a per-rule setting configured in the dashboard — the CLI creates rules in passthrough mode only. Updated the docs to match and to reach the full payoff: - Quick Start: split into "verify the allow-list" (works in passthrough, zero setup) and a new step 7 "Inject credentials into HTTPS traffic" that walks through enabling intercept on the rule (dashboard) + provisioning/trusting the per-host CA, then re-verifying injection + scrubbing. - Security: corrected "TLS mode configurable per host" to "per rule"; clarified it's set in the dashboard rule editor. - Connecting Agents: clarified intercept is enabled per rule in the dashboard (CLI rules are passthrough); reworded "mix modes across hosts" to per rule. - Egress Rules: added a "HTTPS handling per rule" subsection documenting the passthrough/intercept TLS mode as a rule property. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * PER-14853: correct HTTP Egress Proxy docs to the shipped API workflow model The published pages described the removed flat-rule model — `asg proxy rules` add/list/update/delete/reorder, ordered allow/block/require_approval actions, per-agent rule scoping, and `asg proxy authorize --host`. The shipped `asg` CLI and gateway enforce the API workflow model instead: policy is authored as workflows (domains + rules + required trust) in the dashboard, and every token is bound to one workflow. Changes across all 8 pages: - Reframe egress-rules → "Workflows & Rules" (workflow → domain → rule; allow-only; required-trust levels; no block/require_approval action, no ordering/agent-match). - Quickstart now creates a workflow in the dashboard and mints a workflow-bound token (`token create --workflow`, which is required). - Authorization: two gates reframed to workflow match + Permit policy; consent uses `authorize --workflow`; trust ceiling is per-human, per-workflow (not per-host). - CLI: fix the npm package scope (`@permitio/agent-security-cli`, was `@permit-io/...`), add bunx/npx zero-install forms, drop the non-existent `proxy rules` commands, and remove the parked `preset apply` path (returns 501). - Correct dashboard nav references (Overview / Workflows / Credentials / Activity / Setup). Docusaurus build + hyperlink check pass: 0 bad links, 0 bad anchors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * PER-14853: address review — token-file in CLI example + clearer verify step - cli.mdx: the Configure example now uses `asg login --token-file` so it matches the security note about process-visible secret flags (Copilot review). - quickstart.mdx: the verify step uses `curl -i` and explains that a `401` from Stripe in passthrough mode is expected — it proves the request reached the upstream (allowed), in contrast to a denied host the proxy never connects to (Copilot review). Zeev's June 18 findings (flat `proxy rules` update/reorder, missing `credentials` group, `token create` --subject/--out, `authorize --hosts`) are all resolved on current main: the CLI added the `credentials` group, `--out`, optional `--subject`, and `--workflow`, and removed the flat-rule surface — the docs already match. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * PER-14853: address Zeev's review — HTTPS/CONNECT model, vault precondition, and accuracy fixes Deep review pass over the gateway source confirmed all findings. Key corrections: - HTTPS/CONNECT model (cascading): HTTPS is authorized as a CONNECT with an empty path + Tunnel method class, so only an `all`-method, path-less "tunnel rule" can authorize it. Added a "HTTPS needs a tunnel rule" section, fixed the quickstart and example workflows, and qualified the request-flow / TLS-mode / injection prose. - CRITICAL: encryption at rest is opt-in (KMS vault, off by default) — state the precondition instead of claiming credentials are always encrypted. - Verify step returned 407, not 401: pass `Proxy-Authorization` on every curl; step 7 now installs the CA. `asg proxy env` exports the token path but does not authenticate. - Dashboard nav is "CLIs / APIs", not "Proxy" — fixed every breadcrumb. - Revocation: default removes new-decision authority only; deny-in-flight is opt-in and doesn't re-check an open passthrough tunnel. - Response scrubbing is best-effort + per-credential (documented + softened claims). - Audit identifies the agent (not the human) and is best-effort. Rate limiter fails open. - Trust is declared by the rule, not derived from the method class. "Max Trust Level" linked. - CLI: admin-token source, `--<flag>-file` scope, `connect` required flags, `--subdomain` rule, guardian/identity capabilities defined; AWS STS credential inputs named. Build (Docusaurus + hyperlink) passes: 0 bad links, 0 bad anchors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 4a891fc commit c794afa

10 files changed

Lines changed: 876 additions & 0 deletions

File tree

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
title: Authorization & Trust
3+
sidebar_label: Authorization & Trust
4+
description: How a workflow's rules, Permit.io policy, and human consent compose — including per-human, per-workflow trust ceilings that cap how much access a person can delegate to an agent.
5+
sidebar_position: 5
6+
---
7+
8+
# Authorization & Trust
9+
10+
An allowed outbound request passes through **two independent gates**. Both must say yes. This mirrors how the gateway authorizes MCP tool calls, so the same mental model — and the same Permit policy environment — governs both planes.
11+
12+
## The two gates
13+
14+
```mermaid
15+
flowchart TB
16+
Req["Outbound request"]
17+
Rule{"1. Workflow match<br/>domain / path / method"}
18+
Permit{"2. Permit policy<br/>agent's role for the rule"}
19+
Ceiling["Trust ceiling<br/>(delegated agents)"]
20+
Allow["Forwarded"]
21+
Deny["Denied"]
22+
23+
Req --> Rule
24+
Rule -->|"no matching rule"| Deny
25+
Rule -->|"matched"| Permit
26+
Permit -->|"deny"| Deny
27+
Permit -->|"allow"| Ceiling
28+
Ceiling -->|"over ceiling"| Deny
29+
Ceiling -->|"within ceiling"| Allow
30+
```
31+
32+
### Gate 1 — Workflow match
33+
34+
Every token is bound to one [workflow](./egress-rules). The gateway resolves that workflow, checks the request's target host against the workflow's domains, and finds the rule that governs its path and method. A request with no matching rule is denied before any policy evaluation. This is the coarse, operator-controlled "is this domain/path/method even on the menu" check.
35+
36+
### Gate 2 — Permit.io policy
37+
38+
For requests a rule matches, the gateway then asks your **Permit.io** policy whether *this agent* holds a role that authorizes *this rule's action* — each rule is a Permit action on the workflow resource. The trust level a request must meet is declared **by the rule itself** (its required trust); the method class only determines which rules a request can match, and seeds the **Auto** default when you don't set a level explicitly. Because every gateway host maps to a Permit environment, you manage these policies in the same place as your MCP policies — see [Permit.io Integration](/permit-mcp-gateway/permit-integration).
39+
40+
This split means an operator can define a workflow's domains and rules while your central policy still decides, per agent, which of those rules that agent may actually use.
41+
42+
## Human consent and trust ceilings
43+
44+
Agents usually act **on behalf of a human**. The proxy supports the same delegation-with-consent model the gateway uses for MCP: a person explicitly authorizes an agent to make egress calls for them, for a specific workflow, and the access an agent gets through that person is capped by a **trust ceiling**.
45+
46+
### Trust ceilings
47+
48+
An admin sets, per human and per workflow, the **maximum** trust level that person is allowed to delegate — `low`, `medium`, or `high`. This is the same **Max Trust Level** control described in [Host Setup](/permit-mcp-gateway/host-setup). When a human consents to an agent, the access that agent receives is the **lesser** of what the human grants and the admin-defined ceiling. A person can never delegate more than their ceiling allows.
49+
50+
This has an important security property: an agent that acts for **several** humans does **not** get to combine their ceilings. Each human caps their own delegation independently, so one person's grant can't be used to escalate another's.
51+
52+
### Human consent
53+
54+
To have a human delegate egress access to an agent, run the consent flow:
55+
56+
```bash
57+
asg proxy authorize <agent-client-id> --workflow charge_customers
58+
```
59+
60+
This opens a browser where the human signs in and chooses what to allow:
61+
62+
1. **Sign in** — the human authenticates.
63+
2. **Review the workflow** — the screen shows the workflow's domains and rules the agent is requesting.
64+
3. **Choose an access level** — defaulting to least privilege, and capped at the admin's ceiling for that human and workflow.
65+
4. **Approve** — a short-lived, human-bound token is issued for the agent, bound to that workflow.
66+
67+
Omit `--workflow` in the browser flow to let the consent screen present a picker over the workflows that human may delegate. The optional `--trust low|medium|high` flag lets the human (or the operator preparing the request) propose a lower cap than the ceiling; omit it to default to least privilege.
68+
69+
The result is a token whose access is bound to that specific human's consent — and which the human can revoke.
70+
71+
### Revocation
72+
73+
A human can revoke an agent's delegated access at any time from their account. Revoking removes the agent's policy assignment, so **new** authorization decisions fail immediately. A proxy token already issued under that grant stays valid until it expires (up to its TTL) **unless** the human also chooses **deny in-flight tokens** — the panic-button option for a lost device or compromised agent, which hard-denies every token minted before the revoke for the rest of its life.
74+
75+
Even then, revocation is only re-evaluated on requests the gateway **inspects**. Traffic already flowing inside an open `passthrough` HTTPS tunnel is opaque and isn't re-checked — it continues until the client closes it or the idle timeout fires. Use `intercept` if you need revocation to cut off an in-progress HTTPS connection. This is the egress equivalent of revoking an MCP consent.
76+
77+
## How automated agents differ
78+
79+
Not every agent acts for a human. A CI job or backend service can be issued a token directly with [`asg proxy token create --workflow <slug>`](./quickstart#4-mint-a-workflow-bound-agent-token). Such a token isn't bound to a human, so the per-human trust ceiling doesn't apply — its access is governed purely by the workflow's rules and the agent's own Permit policy. Use direct tokens for machine-to-machine automation, and the consent flow whenever a real person is accountable for what the agent does.
80+
81+
---
82+
83+
## What's next
84+
85+
- [**Workflows & Rules**](./egress-rules) — the operator allow-list that forms the first gate.
86+
- [**Permit.io Integration**](/permit-mcp-gateway/permit-integration) — the policy model behind the second gate.
87+
- [**Security**](./security) — the protections that wrap both gates.
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
---
2+
title: The asg CLI
3+
sidebar_label: asg CLI
4+
description: Install and use the asg command-line tool — the operator's front door for enabling the HTTP Egress Proxy, managing credentials, minting agent tokens, and wiring agents into the proxy.
5+
sidebar_position: 2
6+
---
7+
8+
# The `asg` CLI
9+
10+
`asg` is the command-line tool for managing the Permit MCP Gateway, including the HTTP Egress Proxy control plane. Most of what you can do in the **CLIs / APIs** section of the [dashboard](https://app.agent.security) — enable the proxy, manage credentials, mint tokens, run diagnostics — you can also do with `asg`, scripted and CI-friendly.
11+
12+
The CLI is the operator and automation surface. End users who simply delegate access to an agent normally do that through the browser consent flow, not the CLI.
13+
14+
:::note Workflows are authored in the dashboard
15+
Egress policy lives in **API workflows** (a set of allowed domains and rules). Today you create and edit workflows in the [dashboard](https://app.agent.security) under **CLIs / APIs → Workflows** — there is no CLI command for authoring them yet. The CLI handles everything around them: enabling the proxy, storing credentials, minting workflow-bound tokens, and connecting agents.
16+
:::
17+
18+
## Install
19+
20+
The published package is `@permitio/agent-security-cli`. The quickest way to use it is without installing — run it on demand with your package runner:
21+
22+
```bash
23+
# With Bun (recommended)
24+
bunx @permitio/agent-security-cli --help
25+
26+
# Or with npm
27+
npx -y @permitio/agent-security-cli --help
28+
```
29+
30+
To install it globally and get the `asg` command on your `PATH`:
31+
32+
```bash
33+
# With Bun
34+
bun install -g @permitio/agent-security-cli
35+
36+
# Or with npm
37+
npm install -g @permitio/agent-security-cli
38+
```
39+
40+
Verify the install:
41+
42+
```bash
43+
asg --help
44+
asg proxy --help
45+
```
46+
47+
## Configure
48+
49+
`asg` resolves settings in priority order: environment variables, then a config file at `~/.agent-security/`, then built-in defaults.
50+
51+
The admin token is issued by your **gateway operator** (it's the gateway deployment's admin secret); the CLI never mints one. If you're a tenant developer, ask your platform administrator for it. Save it to a file, then:
52+
53+
```bash
54+
# Point at your gateway and store an admin token (saved with restrictive permissions).
55+
asg config set gateway-url https://gateway.example.com
56+
asg login --token-file ./admin-token # reads the token from a file, not a process-visible flag
57+
58+
# Verify the token against the gateway.
59+
asg whoami
60+
```
61+
62+
You can also supply settings through environment variables, which is the preferred approach in CI:
63+
64+
| Variable | Purpose |
65+
| --- | --- |
66+
| `AGENT_SECURITY_API_KEY` | Admin token used to authenticate control-plane commands. |
67+
| `AGENT_SECURITY_GATEWAY_URL` | Your gateway's admin URL. |
68+
| `AGENT_SECURITY_SUBDOMAIN` | Default host subdomain, so you can omit it from each command. |
69+
| `AGENT_SECURITY_CONSENT_URL` | Consent origin used by `asg proxy authorize` (usually auto-derived). |
70+
| `AGENT_SECURITY_PROXY_TOKEN_FILE` | Path to the agent's proxy token file (set by `asg proxy env`). |
71+
72+
:::warning Treat the admin token as a high-value secret
73+
Prefer the interactive prompt, `AGENT_SECURITY_API_KEY`, or the `--token-file` form over passing the token as a `--token` flag — command-line flags are visible to other users on the machine via the process list. The secret-bearing flags on the proxy and login commands (`--token`, `--secret`, `--client-secret`) each have a companion `--<flag>-file` that reads the value from a file instead. The CLI scrubs secret-shaped strings from its own output, but the process list is outside its control.
74+
:::
75+
76+
## Output and exit codes
77+
78+
Every command supports machine-readable output so agents and CI can drive it deterministically:
79+
80+
```bash
81+
asg proxy doctor acme --json --quiet
82+
```
83+
84+
- `--json` emits structured JSON to stdout.
85+
- `--quiet` drops decorative output (spinners, hints).
86+
- `--yes` accepts confirmation prompts non-interactively.
87+
88+
Exit codes are stable:
89+
90+
| Code | Meaning |
91+
| --- | --- |
92+
| `0` | Success |
93+
| `1` | User error — bad input, missing token, cancelled prompt, or a human-denied approval |
94+
| `2` | Server error — gateway unreachable, 5xx, or network failure |
95+
96+
## The `asg proxy` command tree
97+
98+
| Command | What it does |
99+
| --- | --- |
100+
| `asg proxy config <host> --enable\|--disable` | Turn proxy mode on or off for a host. |
101+
| `asg proxy credentials list\|create\|update\|delete` | Manage stored upstream secrets (write-only). See [Credentials](./credentials). |
102+
| `asg proxy connect <provider> <host> --key <credential-key> --client-id <id>` | Connect an OAuth provider (`github_app`, `notion`, `google`, `atlassian`) and store the resulting credential. |
103+
| `asg proxy token create <host> --client-id <id> --workflow <slug>` | Mint a short-lived, workflow-bound proxy access token (`--out <file>` writes it securely). |
104+
| `asg proxy authorize <agent-client-id> --workflow <slug>` | Run the browser consent flow so a human can delegate access to an agent for a workflow, within a trust ceiling. |
105+
| `asg proxy env <host>` | Print the `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` environment for the current shell. |
106+
| `asg proxy container-config <host>` | Emit Docker, Docker Compose, Kubernetes ConfigMap, or shell bootstrap config. |
107+
| `asg proxy ca status\|download\|rotate\|trust-shell` | Manage the per-host TLS-interception certificate authority. See [Connecting Agents](./connecting-agents#https-interception). |
108+
| `asg proxy doctor <host>` | Diagnose proxy setup end to end. |
109+
110+
Run `asg proxy <command> --help` for the full flag list of any command. `asg proxy --help` also lists preset packs (`asg proxy preset list` browses the built-in catalog) and two opt-in capabilities: **agent identity registration** (see [Agent Verification](/permit-mcp-gateway/advanced-features)) and the **intent guardian**, which judges each request against an operator-declared task description. [Contact us](mailto:support@permit.io) to enable the opt-in capabilities for your account.
111+
112+
## Passing the host subdomain
113+
114+
Most commands take the host subdomain as a positional argument (e.g. `asg proxy config acme`). If you've set a default with `asg config set subdomain acme` (or `AGENT_SECURITY_SUBDOMAIN`), you can omit it. Commands that already take another positional keep the host as the **second positional** (e.g. `asg proxy credentials create stripe acme`). `asg proxy authorize` is the exception: it takes the agent's client id positionally and the host as `--subdomain`.
115+
116+
## Shell completions
117+
118+
Enable tab-completion for your shell:
119+
120+
```bash
121+
asg completion --shell zsh >> ~/.zshrc # or: --shell bash >> ~/.bashrc
122+
```
123+
124+
---
125+
126+
## What's next
127+
128+
- [**Workflows & Rules**](./egress-rules) — the egress policy model in depth.
129+
- [**Credentials & Connections**](./credentials) — static secrets, OAuth connections, and request signing.
130+
- [**Connecting Agents**](./connecting-agents)`asg proxy env`, `container-config`, and `doctor` in context.
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
---
2+
title: Connecting Agents
3+
sidebar_label: Connecting Agents
4+
description: Route an agent's outbound traffic through the HTTP Egress Proxy — shell, Docker, and Kubernetes setup, the proxy access token, HTTPS interception, and the doctor diagnostic.
5+
sidebar_position: 6
6+
---
7+
8+
# Connecting Agents
9+
10+
The proxy uses the standard `HTTP_PROXY` / `HTTPS_PROXY` convention, so most HTTP client libraries route through it automatically once the environment is set. Connecting an agent has two parts: **the environment variables** that point traffic at the gateway, and **a proxy access token** the agent presents to authenticate.
11+
12+
## The pieces
13+
14+
| Piece | What it is |
15+
| --- | --- |
16+
| `HTTP_PROXY` / `HTTPS_PROXY` | Point your agent's outbound HTTP and HTTPS at the gateway. |
17+
| `NO_PROXY` | Hosts that should bypass the proxy (e.g. localhost). |
18+
| Proxy access token | A short-lived, workflow-bound token the agent presents to the proxy. Minted with [`asg proxy token create`](./quickstart#4-mint-a-workflow-bound-agent-token) or the [consent flow](./authorization#human-consent), and referenced via a token file. |
19+
20+
You rarely set these by hand — `asg proxy env` and `asg proxy container-config` generate them for you.
21+
22+
## Shell / local process
23+
24+
```bash
25+
eval "$(asg proxy env acme)"
26+
```
27+
28+
This exports `HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`, and `AGENT_SECURITY_PROXY_TOKEN_FILE` (the path to the token file) into the current shell. Mint the token first (step 4 of the [Quick Start](./quickstart)) at the path `asg proxy env` expects — `$HOME/.agent-security/tokens/<subdomain>.token` — or point `AGENT_SECURITY_PROXY_TOKEN_FILE` at wherever you wrote it.
29+
30+
Routing traffic through the proxy is only half of it: every request must also carry `Proxy-Authorization: Bearer <token>`. Exporting the env does **not** authenticate your requests — your HTTP client has to read the token from `$AGENT_SECURITY_PROXY_TOKEN_FILE` and send that header (or launch the agent with [`asg run`](./cli), which injects the token into the proxy URL for you). Without it the proxy answers `407`.
31+
32+
## Docker and Kubernetes
33+
34+
Generate ready-to-use container configuration:
35+
36+
```bash
37+
# Docker env file or Compose snippet.
38+
asg proxy container-config acme --format docker-env
39+
asg proxy container-config acme --format docker-compose
40+
41+
# Kubernetes ConfigMap.
42+
asg proxy container-config acme --format k8s-configmap
43+
```
44+
45+
Mount or reference the emitted configuration in your agent's container so the proxy variables are present in its environment. Supply the proxy token through your platform's normal secret mechanism (a mounted file or secret), and point `AGENT_SECURITY_PROXY_TOKEN_FILE` at it.
46+
47+
## HTTPS interception
48+
49+
By default the proxy handles HTTPS in **passthrough** mode: it authenticates and authorizes the connection against the domain's **tunnel rule** (the `all`-method, path-less rule — see [Workflows & Rules](./egress-rules#https-needs-a-tunnel-rule)), but the encrypted tunnel is forwarded opaquely — the proxy does not see the request path or body, and it can't inject a credential or scrub the response inside the tunnel.
50+
51+
To apply **full** governance to HTTPS — path-level rules, credential injection, and response scrubbing inside the encrypted connection — switch the domain's **tunnel rule** to **intercept** mode. You set TLS mode in the [dashboard](https://app.agent.security) workflow editor (**CLIs / APIs → Workflows**, open the workflow, edit the tunnel rule, set **TLS mode** to **Intercept (decrypt + inject credential)**). TLS mode is read from the tunnel rule, so setting it on a path- or method-scoped rule has no effect.
52+
53+
In intercept mode the proxy terminates the agent's TLS using a **certificate authority issued for your host** and re-applies every check to the decrypted request. For your agent to trust those connections, it must trust that CA certificate — manage it with the CLI:
54+
55+
```bash
56+
# Inspect your host's interception CA.
57+
asg proxy ca status acme
58+
59+
# Download the CA certificate to install in your agent's trust store.
60+
asg proxy ca download acme --output ./agent-security-ca.pem
61+
62+
# Print a shell snippet that points common tools at the CA.
63+
asg proxy ca trust-shell acme
64+
65+
# Rotate the CA, keeping the previous one valid during a grace window.
66+
asg proxy ca rotate acme --grace-days 7
67+
```
68+
69+
:::note Choosing a mode
70+
Use **passthrough** when domain-level control is enough, or for very large uploads, downloads, and long-lived streaming connections. Use **intercept** when you need path-level rules, credential injection, or response scrubbing on HTTPS traffic. Mode is decided by the rule that authorizes the tunnel, so in practice it's **per domain** for HTTPS — you can mix passthrough and intercept across domains.
71+
:::
72+
73+
## Diagnose with `doctor`
74+
75+
When something isn't connecting, run the built-in diagnostic:
76+
77+
```bash
78+
asg proxy doctor acme
79+
```
80+
81+
`doctor` checks, end to end:
82+
83+
- Gateway reachability
84+
- Whether the proxy is enabled for the host
85+
- How many credentials are configured
86+
- Your local proxy environment variables
87+
- The interception CA's status and expiry, and whether your environment trusts it
88+
- The token file's permissions and the token's expiry
89+
90+
Each check reports **pass**, **warn**, or **fail**; anything that isn't a pass carries a suggested fix. `doctor` exits `0` (clean), `1` (operator-fixable failure), or `2` (gateway fault), so it's safe to gate CI on — and it's the first thing to run whenever an agent's traffic isn't behaving.
91+
92+
---
93+
94+
## What's next
95+
96+
- [**Quick Start**](./quickstart) — the end-to-end setup these commands fit into.
97+
- [**Security**](./security) — what the proxy enforces on the traffic you route through it.
98+
- [**The `asg` CLI**](./cli) — full command reference.

0 commit comments

Comments
 (0)