Agent Gateway multi-agent security
Critical Enforcement Rules & Rationale
- Gcloud Release Tracks: Always use the exact release tracks specified in
the commands (e.g.,
gcloud beta network-services agent-gateways). Omitting
these prefixes causes commands to fail because Agent Gateway features are
located in specialized, non-default namespaces.
- API Enablement: Include
modelarmor.googleapis.com in the API
enablement list when setting up guardrails. Excluding it prevents Model
Armor policies and filters from successfully attaching to the Gateway.
- Egress Verification: Egress policy verification requires using the
Python script
(scripts/verify_egress_policies.py),
not
curl. Egress gateways rely on runtime SDK lifecycle handling and JWT
context that a standard curl command cannot simulate correctly.
- Model Armor Keys: In
model-armor-config.yaml, always include both
piAndJailbreakFilterSettings and sdpFilterSettings (filterEnforcement: ENFORCE). Invalid or missing filters cause deployment validation failures
or lead to silent bypasses of the guardrails.
- Subnet Private Access: Any subnet hosting a Private Service Connect
network attachment for Egress Gateways must have
private_ip_google_access = true enabled in Terraform. Disabling this blocks connectivity to
Google-managed endpoints, causing total routing failures for agents.
- Direct Delivery: Immediately provide the requested architecture,
configuration files, CLI commands, scripts, and diagrams in full. Do not
stop at a planning phase, do not generate a plan artifact, and do not ask
for user confirmation before delivering outputs.
- No Infrastructure Execution: Do not attempt to run deployment or
verification commands (such as
gcloud, kubectl, terraform, or curl)
against real cloud resources during design. You are generating plan
configurations, not executing them.
[!IMPORTANT] Just-In-Time (JIT) Resource Loading Protocol: Inspect
template files in assets/ and executable scripts in
scripts/ using view_file as needed for extended configurations,
deployment scripts, and test suites.
Quick Reference: Required Filenames
Always generate files with these exact names when requested:
agw-ingress-config.yaml
(assets/agw-ingress-config.yaml)
agw-egress-config.yaml
(assets/agw-egress-config.yaml)
agw-authz-extension.yaml
(assets/agw-authz-extension.yaml)
agw-authz-policy.yaml
(assets/agw-authz-policy.yaml)
model-armor-config.yaml
(assets/model-armor-config.yaml)
sgp-policy.yaml (assets/sgp-policy.yaml)
iap-policy.json (assets/iap-policy.json)
model-armor-payload.json
(assets/model-armor-payload.json)
1. Dual Ingress & Egress Architecture Design (dual_ingress_egress_architecture_design)
Ingress Pattern: CLIENT_TO_AGENT fronted by Ingress Control Plane
(Agent Gateway, Model Armor).
Egress Pattern: AGENT_TO_ANYWHERE utilizing Egress Control Plane
(Agent Gateway, roles/iap.egressor CEL policies, Cloud DNS) and Egress
Data Plane (PSC Interface, Cloud Run, PSC Google APIs Global Endpoint),
coordinated via Agent Registry & Agent Engine runtime.
Mermaid Diagram:
graph TD
Client["External Clients"] -->|HTTPS / MCP| GLB["Global Load Balancer"]
GLB --> Ingress["Ingress Agent Gateway (CLIENT_TO_AGENT)"]
Ingress --> MA["Model Armor (CONTENT_AUTHZ)"]
MA --> Agent["Agent Engine Agents (BillingAgent, SupportAgent, FraudAgent)"]
Agent --> Egress["Egress Agent Gateway (AGENT_TO_ANYWHERE)"]
Egress --> PSC["Private Service Connect Network Attachment"]
PSC --> Tools["Private MCP Tool Backends"]
2. Ingress & Egress Guardrail Policy Config (ingress_and_egress_guardrail_policy_config)
When requested for Ingress & Egress guardrail policy configs, you MUST generate
and create all required files in the workspace:
agw-ingress-config.yaml
(assets/agw-ingress-config.yaml): Declares
governedAccessPath: CLIENT_TO_AGENT with protocols HTTP and MCP.
agw-egress-config.yaml
(assets/agw-egress-config.yaml): Declares
governedAccessPath: AGENT_TO_ANYWHERE with protocol MCP.
agw-authz-extension.yaml
(assets/agw-authz-extension.yaml):
Configures AuthzExtension service for IAP authorization.
agw-authz-policy.yaml
(assets/agw-authz-policy.yaml): Configures
AuthzPolicy action ALLOW targeting both Ingress and Egress gateways.
iap-policy.json (assets/iap-policy.json): Binds
roles/iap.egressor with CEL condition checking
iap.googleapis.com/mcp.toolName == 'get_account_balance' && iap.googleapis.com/mcp.tool.isReadOnly == true.
model-armor-config.yaml
(assets/model-armor-config.yaml): Enables
piAndJailbreakFilterSettings and sdpFilterSettings with
filterEnforcement: ENFORCE.
sgp-policy.yaml (assets/sgp-policy.yaml):
Implements Natural Language Constraints blocking transactions > $1000 and
sanitizing PII.
3. Ingress & Egress Infrastructure Deployment (ingress_and_egress_infrastructure_deployment)
Inspect and provide the step-by-step gcloud CLI commands from
scripts/deploy_infrastructure.sh:
- Enable Required APIs:
compute, networkservices, networksecurity,
modelarmor, iap, agentregistry, serviceextensions, and aiplatform.
- Import Agent Gateways: Ingress (
agw-ingress-config.yaml) and Egress
(agw-egress-config.yaml) via gcloud alpha network-services agent-gateways import.
- Import Authz Extension:
agw-authz-extension.yaml via gcloud beta service-extensions authz-extensions import.
- Import Authz Policy:
agw-authz-policy.yaml via gcloud beta network-security authz-policies import.
4. Ingress & Egress Security Validation (ingress_and_egress_security_validation)
When validating security for Ingress and Egress:
- Ingress 403 Unauthenticated Test: Provide the copy-pasteable
verification curl command from
scripts/validate_ingress_unauth.sh
sending an unauthenticated POST request to the Reasoning Engine endpoint
expecting HTTP 403 Forbidden.
- Python Egress Verification Script (MUST use Python script snippet, NOT
curl): Provide the Python verification script snippet from
scripts/verify_egress_policies.py
sending JSON-RPC
tools/call requests (get_account_balance) through the
Egress Gateway to verify HTTP 200 for allowed tools.
- Model Armor Test Payload: Generate
model-armor-payload.json
(assets/model-armor-payload.json)
containing prompt injection/jailbreak instructions.
5. Troubleshooting Ingress & Egress Failures (troubleshooting_ingress_and_egress_failures)
6. Hybrid VPN Connectivity & Egress Routing (hybrid_vpn_connectivity_egress_routing)
- Terraform HCL: Refer to baseline Terraform config in
assets/main.tf for VPC, subnets
(
private_ip_google_access = true), PSC network attachment, Cloud DNS
private forwarding for aws.internal., and HA VPN gateway/router.
- Egress Gateway Config (
agw-egress-config.yaml): Generate configuration
declaring governedAccessPath: AGENT_TO_ANYWHERE, pointing to the PSC
network attachment, and referencing aws.internal. in dnsPeeringConfig
(see assets/agw-egress-config.yaml).
- Python SDK Deployment Script: Refer to
scripts/hybrid_vpn_agent.py for the complete
script initializing Vertex AI with
agent_to_anywhere_config referencing
the Egress Gateway, enabling telemetry, and deploying HybridAgent using
types.IdentityType.AGENT_IDENTITY.
7. Private Egress GKE Internal Load Balancer (private_egress_gke_internal_load_balancer)
- Expose GKE internal MCP tool server via an Internal Load Balancer (ILB) at
literal IP
10.0.1.50, connecting via Agent Gateway PSC Interface + Cloud
DNS Private zone.
- Cloud DNS Record Mapping: Provide the command from
scripts/create_gke_dns_record.sh mapping
the private domain to GKE's private ILB IP
10.0.1.50.
- Explicit TLS Warning: Agent Gateway egress does not natively trust
self-signed certificates or private enterprise CAs. You must use
publicly trusted TLS certificates signed by a trusted Certificate Authority
(e.g., Let's Encrypt).
8. Governance Controls Model Armor SGP (governance_controls_model_armor_sgp)
When configuring dual safety layers with Model Armor on Ingress and SGP on
Egress:
- Model Armor Config: Generate
model-armor-config.yaml
(assets/model-armor-config.yaml) with
piAndJailbreakFilterSettings and sdpFilterSettings (filterEnforcement: ENFORCE).
- Semantic Governance Policy: Generate
sgp-policy.yaml
(assets/sgp-policy.yaml) with Natural Language
Constraints blocking transactions > $1000 and sanitizing PII.
- Curl PATCH Command: Provide the curl command from
scripts/enforce_sgp_patch.sh to update
authzExtensions with sgpEnforcementMode set to ENFORCE.
9. Multi-Agent Cloud Run Egress Routing (multi_agent_cloud_run_egress_routing)
Do NOT produce a plan artifact or stop at planning. When configuring multi-agent
Cloud Run egress routing, you MUST directly provide and generate ALL required
components:
- Egress Gateway Config (
agw-egress-config-run.yaml): Generate
configuration declaring governedAccessPath: AGENT_TO_ANYWHERE, PSC network
attachment, and DNS peering for *.run.app (see
assets/agw-egress-config-run.yaml).
- Register Cloud Run Services in Agent Registry: Provide the registration
commands from
scripts/register_cloud_run_services.sh
registering all 3 Cloud Run services (
marketing-tool-service,
sales-tool-service, support-tool-service) in the us-east4 Agent
Registry.
iap-policy.json (Multi-Agent): Generate iap-policy.json
(assets/iap-policy-multi-agent.json)
containing all 3 principal:// bindings in the members list under
roles/iap.egressor.
- Python SDK Deployment Script: Refer to
scripts/multi_agent_cloud_run.py for the
complete GenAI SDK deployment script.
10. Advanced Model Armor Filtering (advanced_model_armor_filtering)
For custom keyword matching, configure userDefinedFilterSettings (see
assets/model-armor-advanced.yaml).
11. Known Traps & Gotchas (known_traps_and_gotchas)
network_attachment is ForceNew: Enabling Semantic Governance
Policies (SGP) or modifying network attachments after the initial Terraform
apply will force-recreate the gateway resource. If not managed carefully,
this can cause dependency deadlocks during destroy operations. Plan
infrastructure sequencing accordingly.
- Authz Policy Limit: An Agent Gateway allows at most 4 custom
authorization policies attached concurrently. Ensure your security posture
consolidates rules within this limit.
1---2name: google-cloud-solution-multi-agent-security3description: Designs, deploys, and secures Google Cloud Agent Gateway solutions. Use when the user needs to configure multi-agent security, ingress (CLIENT_TO_AGENT), or egress (AGENT_TO_ANYWHERE) patterns involving Model Armor, IAP, and Agent Registry. Don't use for general Cloud Load Balancing or basic VPC setup not related to Agent Gateways.4---56# Agent Gateway multi-agent security78## Critical Enforcement Rules & Rationale910* **Gcloud Release Tracks**: Always use the exact release tracks specified in11 the commands (e.g., `gcloud beta network-services agent-gateways`). Omitting12 these prefixes causes commands to fail because Agent Gateway features are13 located in specialized, non-default namespaces.14* **API Enablement**: Include `modelarmor.googleapis.com` in the API15 enablement list when setting up guardrails. Excluding it prevents Model16 Armor policies and filters from successfully attaching to the Gateway.17* **Egress Verification**: Egress policy verification requires using the18 Python script19 ([scripts/verify_egress_policies.py](scripts/verify_egress_policies.py)),20 not `curl`. Egress gateways rely on runtime SDK lifecycle handling and JWT21 context that a standard curl command cannot simulate correctly.22* **Model Armor Keys**: In `model-armor-config.yaml`, always include both23 `piAndJailbreakFilterSettings` and `sdpFilterSettings` (`filterEnforcement:24 ENFORCE`). Invalid or missing filters cause deployment validation failures25 or lead to silent bypasses of the guardrails.26* **Subnet Private Access**: Any subnet hosting a Private Service Connect27 network attachment for Egress Gateways must have `private_ip_google_access =28 true` enabled in Terraform. Disabling this blocks connectivity to29 Google-managed endpoints, causing total routing failures for agents.30* **Direct Delivery**: Immediately provide the requested architecture,31 configuration files, CLI commands, scripts, and diagrams in full. Do not32 stop at a planning phase, do not generate a plan artifact, and do not ask33 for user confirmation before delivering outputs.34* **No Infrastructure Execution**: Do not attempt to run deployment or35 verification commands (such as `gcloud`, `kubectl`, `terraform`, or `curl`)36 against real cloud resources during design. You are generating plan37 configurations, not executing them.3839> [!IMPORTANT] **Just-In-Time (JIT) Resource Loading Protocol:** Inspect40> template files in [assets/](assets/) and executable scripts in41> [scripts/](scripts/) using `view_file` as needed for extended configurations,42> deployment scripts, and test suites.4344--------------------------------------------------------------------------------4546## Quick Reference: Required Filenames4748Always generate files with these exact names when requested:49501. `agw-ingress-config.yaml`51 ([assets/agw-ingress-config.yaml](assets/agw-ingress-config.yaml))522. `agw-egress-config.yaml`53 ([assets/agw-egress-config.yaml](assets/agw-egress-config.yaml))543. `agw-authz-extension.yaml`55 ([assets/agw-authz-extension.yaml](assets/agw-authz-extension.yaml))564. `agw-authz-policy.yaml`57 ([assets/agw-authz-policy.yaml](assets/agw-authz-policy.yaml))585. `model-armor-config.yaml`59 ([assets/model-armor-config.yaml](assets/model-armor-config.yaml))606. `sgp-policy.yaml` ([assets/sgp-policy.yaml](assets/sgp-policy.yaml))617. `iap-policy.json` ([assets/iap-policy.json](assets/iap-policy.json))628. `model-armor-payload.json`63 ([assets/model-armor-payload.json](assets/model-armor-payload.json))6465--------------------------------------------------------------------------------6667## 1. Dual Ingress & Egress Architecture Design (`dual_ingress_egress_architecture_design`)6869- **Ingress Pattern**: `CLIENT_TO_AGENT` fronted by Ingress Control Plane70 (Agent Gateway, Model Armor).71- **Egress Pattern**: `AGENT_TO_ANYWHERE` utilizing Egress Control Plane72 (Agent Gateway, `roles/iap.egressor` CEL policies, Cloud DNS) and Egress73 Data Plane (PSC Interface, Cloud Run, PSC Google APIs Global Endpoint),74 coordinated via Agent Registry & Agent Engine runtime.75- **Mermaid Diagram**:7677 ```mermaid78 graph TD79 Client["External Clients"] -->|HTTPS / MCP| GLB["Global Load Balancer"]80 GLB --> Ingress["Ingress Agent Gateway (CLIENT_TO_AGENT)"]81 Ingress --> MA["Model Armor (CONTENT_AUTHZ)"]82 MA --> Agent["Agent Engine Agents (BillingAgent, SupportAgent, FraudAgent)"]83 Agent --> Egress["Egress Agent Gateway (AGENT_TO_ANYWHERE)"]84 Egress --> PSC["Private Service Connect Network Attachment"]85 PSC --> Tools["Private MCP Tool Backends"]86 ```8788--------------------------------------------------------------------------------8990## 2. Ingress & Egress Guardrail Policy Config (`ingress_and_egress_guardrail_policy_config`)9192When requested for Ingress & Egress guardrail policy configs, you MUST generate93and create all required files in the workspace:9495- `agw-ingress-config.yaml`96 ([assets/agw-ingress-config.yaml](assets/agw-ingress-config.yaml)): Declares97 `governedAccessPath: CLIENT_TO_AGENT` with protocols `HTTP` and `MCP`.98- `agw-egress-config.yaml`99 ([assets/agw-egress-config.yaml](assets/agw-egress-config.yaml)): Declares100 `governedAccessPath: AGENT_TO_ANYWHERE` with protocol `MCP`.101- `agw-authz-extension.yaml`102 ([assets/agw-authz-extension.yaml](assets/agw-authz-extension.yaml)):103 Configures AuthzExtension service for IAP authorization.104- `agw-authz-policy.yaml`105 ([assets/agw-authz-policy.yaml](assets/agw-authz-policy.yaml)): Configures106 `AuthzPolicy` action `ALLOW` targeting both Ingress and Egress gateways.107- `iap-policy.json` ([assets/iap-policy.json](assets/iap-policy.json)): Binds108 `roles/iap.egressor` with CEL condition checking109 `iap.googleapis.com/mcp.toolName == 'get_account_balance' &&110 iap.googleapis.com/mcp.tool.isReadOnly == true`.111- `model-armor-config.yaml`112 ([assets/model-armor-config.yaml](assets/model-armor-config.yaml)): Enables113 `piAndJailbreakFilterSettings` and `sdpFilterSettings` with114 `filterEnforcement: ENFORCE`.115- `sgp-policy.yaml` ([assets/sgp-policy.yaml](assets/sgp-policy.yaml)):116 Implements Natural Language Constraints blocking transactions > $1000 and117 sanitizing PII.118119--------------------------------------------------------------------------------120121## 3. Ingress & Egress Infrastructure Deployment (`ingress_and_egress_infrastructure_deployment`)122123Inspect and provide the step-by-step `gcloud` CLI commands from124[scripts/deploy_infrastructure.sh](scripts/deploy_infrastructure.sh):1251261. **Enable Required APIs**: `compute`, `networkservices`, `networksecurity`,127 `modelarmor`, `iap`, `agentregistry`, `serviceextensions`, and `aiplatform`.1282. **Import Agent Gateways**: Ingress (`agw-ingress-config.yaml`) and Egress129 (`agw-egress-config.yaml`) via `gcloud alpha network-services agent-gateways130 import`.1313. **Import Authz Extension**: `agw-authz-extension.yaml` via `gcloud beta132 service-extensions authz-extensions import`.1334. **Import Authz Policy**: `agw-authz-policy.yaml` via `gcloud beta134 network-security authz-policies import`.135136--------------------------------------------------------------------------------137138## 4. Ingress & Egress Security Validation (`ingress_and_egress_security_validation`)139140When validating security for Ingress and Egress:1411421. **Ingress 403 Unauthenticated Test**: Provide the copy-pasteable143 verification curl command from144 [scripts/validate_ingress_unauth.sh](scripts/validate_ingress_unauth.sh)145 sending an unauthenticated POST request to the Reasoning Engine endpoint146 expecting HTTP 403 Forbidden.1472. **Python Egress Verification Script (MUST use Python script snippet, NOT148 curl)**: Provide the Python verification script snippet from149 [scripts/verify_egress_policies.py](scripts/verify_egress_policies.py)150 sending JSON-RPC `tools/call` requests (`get_account_balance`) through the151 Egress Gateway to verify HTTP 200 for allowed tools.1523. **Model Armor Test Payload**: Generate `model-armor-payload.json`153 ([assets/model-armor-payload.json](assets/model-armor-payload.json))154 containing prompt injection/jailbreak instructions.155156--------------------------------------------------------------------------------157158## 5. Troubleshooting Ingress & Egress Failures (`troubleshooting_ingress_and_egress_failures`)159160- **Ingress 403 (Client-to-Agent)**:161162 - **Root Cause**: Unauthenticated client requests or missing/invalid OAuth163 2.0 / IAP identity tokens.164 - **OAuth Configuration Steps**:165 1. Configure OAuth 2.0 Client ID credentials in Google Cloud Console.166 2. Grant the client identity / service account167 `roles/iap.httpsResourceAccessor` permission.168 3. Exchange credentials with Google OAuth to acquire an OIDC / OAuth ID169 token.170 4. Pass the token in the `Authorization: Bearer <TOKEN>` header.171 - **Verification Command**: Provide the curl command from172 [scripts/verify_ingress_auth.sh](scripts/verify_ingress_auth.sh).173174- **Egress 403 (Agent-to-Anywhere)**:175176 - **Root Cause**: Missing `roles/iap.egressor` IAM bindings on the Agent177 Identity, malformed principal ID, or mismatched CEL condition on tool178 metadata.179 - **Fix Command**: Provide the exact `gcloud` command from180 [scripts/fix_egress_iap.sh](scripts/fix_egress_iap.sh).181182--------------------------------------------------------------------------------183184## 6. Hybrid VPN Connectivity & Egress Routing (`hybrid_vpn_connectivity_egress_routing`)185186- **Terraform HCL**: Refer to baseline Terraform config in187 [assets/main.tf](assets/main.tf) for VPC, subnets188 (`private_ip_google_access = true`), PSC network attachment, Cloud DNS189 private forwarding for `aws.internal.`, and HA VPN gateway/router.190- **Egress Gateway Config (`agw-egress-config.yaml`)**: Generate configuration191 declaring `governedAccessPath: AGENT_TO_ANYWHERE`, pointing to the PSC192 network attachment, and referencing `aws.internal.` in `dnsPeeringConfig`193 (see [assets/agw-egress-config.yaml](assets/agw-egress-config.yaml)).194- **Python SDK Deployment Script**: Refer to195 [scripts/hybrid_vpn_agent.py](scripts/hybrid_vpn_agent.py) for the complete196 script initializing Vertex AI with `agent_to_anywhere_config` referencing197 the Egress Gateway, enabling telemetry, and deploying `HybridAgent` using198 `types.IdentityType.AGENT_IDENTITY`.199200--------------------------------------------------------------------------------201202## 7. Private Egress GKE Internal Load Balancer (`private_egress_gke_internal_load_balancer`)203204- Expose GKE internal MCP tool server via an Internal Load Balancer (ILB) at205 literal IP `10.0.1.50`, connecting via Agent Gateway PSC Interface + Cloud206 DNS Private zone.207- **Cloud DNS Record Mapping**: Provide the command from208 [scripts/create_gke_dns_record.sh](scripts/create_gke_dns_record.sh) mapping209 the private domain to GKE's private ILB IP `10.0.1.50`.210- **Explicit TLS Warning**: Agent Gateway egress **does not natively trust211 self-signed certificates or private enterprise CAs**. You **must** use212 publicly trusted TLS certificates signed by a trusted Certificate Authority213 (e.g., Let's Encrypt).214215--------------------------------------------------------------------------------216217## 8. Governance Controls Model Armor SGP (`governance_controls_model_armor_sgp`)218219When configuring dual safety layers with Model Armor on Ingress and SGP on220Egress:2212221. **Model Armor Config**: Generate `model-armor-config.yaml`223 ([assets/model-armor-config.yaml](assets/model-armor-config.yaml)) with224 `piAndJailbreakFilterSettings` and `sdpFilterSettings` (`filterEnforcement:225 ENFORCE`).2262. **Semantic Governance Policy**: Generate `sgp-policy.yaml`227 ([assets/sgp-policy.yaml](assets/sgp-policy.yaml)) with Natural Language228 Constraints blocking transactions > $1000 and sanitizing PII.2293. **Curl PATCH Command**: Provide the curl command from230 [scripts/enforce_sgp_patch.sh](scripts/enforce_sgp_patch.sh) to update231 `authzExtensions` with `sgpEnforcementMode` set to `ENFORCE`.232233--------------------------------------------------------------------------------234235## 9. Multi-Agent Cloud Run Egress Routing (`multi_agent_cloud_run_egress_routing`)236237Do NOT produce a plan artifact or stop at planning. When configuring multi-agent238Cloud Run egress routing, you MUST directly provide and generate ALL required239components:2402411. **Egress Gateway Config (`agw-egress-config-run.yaml`)**: Generate242 configuration declaring `governedAccessPath: AGENT_TO_ANYWHERE`, PSC network243 attachment, and DNS peering for `*.run.app` (see244 [assets/agw-egress-config-run.yaml](assets/agw-egress-config-run.yaml)).2452. **Register Cloud Run Services in Agent Registry**: Provide the registration246 commands from247 [scripts/register_cloud_run_services.sh](scripts/register_cloud_run_services.sh)248 registering all 3 Cloud Run services (`marketing-tool-service`,249 `sales-tool-service`, `support-tool-service`) in the `us-east4` Agent250 Registry.2513. **`iap-policy.json` (Multi-Agent)**: Generate `iap-policy.json`252 ([assets/iap-policy-multi-agent.json](assets/iap-policy-multi-agent.json))253 containing all 3 `principal://` bindings in the `members` list under254 `roles/iap.egressor`.2554. **Python SDK Deployment Script**: Refer to256 [scripts/multi_agent_cloud_run.py](scripts/multi_agent_cloud_run.py) for the257 complete GenAI SDK deployment script.258259--------------------------------------------------------------------------------260261## 10. Advanced Model Armor Filtering (`advanced_model_armor_filtering`)262263For custom keyword matching, configure `userDefinedFilterSettings` (see264[assets/model-armor-advanced.yaml](assets/model-armor-advanced.yaml)).265266--------------------------------------------------------------------------------267268## 11. Known Traps & Gotchas (`known_traps_and_gotchas`)269270* **`network_attachment` is `ForceNew`**: Enabling Semantic Governance271 Policies (SGP) or modifying network attachments after the initial Terraform272 apply will force-recreate the gateway resource. If not managed carefully,273 this can cause dependency deadlocks during destroy operations. Plan274 infrastructure sequencing accordingly.275* **Authz Policy Limit**: An Agent Gateway allows at most **4 custom276 authorization policies** attached concurrently. Ensure your security posture277 consolidates rules within this limit.