Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Implementing Google's BeyondCorp zero trust access model to eliminate implicit trust from the network perimeter, enforce identity-aware access controls using IAP, Access Context Manager, and Chrome Enterprise Premium for VPN-less secure application access.
.claude/skills/implementing-beyondcorp-zero-trust-access-model/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-18 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
Do not use when applications require raw network-level access (e.g., UDP-based protocols not supported by IAP), for consumer-facing public applications, or when the organization lacks an identity provider with MFA capabilities.
Define access levels that represent trust tiers based on device and user attributes.
bash# Enable required APIs gcloud services enable iap.googleapis.com gcloud services enable accesscontextmanager.googleapis.com gcloud services enable beyondcorp.googleapis.com # Create an access policy (organization level) gcloud access-context-manager policies create \ --organization=ORG_ID \ --title="BeyondCorp Enterprise Policy" # Create a basic access level for corporate managed devices cat > corporate-device-level.yaml << 'EOF' - devicePolicy: allowedEncryptionStatuses: - ENCRYPTED osConstraints: - osType: DESKTOP_CHROME_OS minimumVersion: "13816.0.0" - osType: DESKTOP_WINDOWS minimumVersion: "10.0.19045" - osType: DESKTOP_MAC minimumVersion: "13.0.0" requireScreenlock: true requireAdminApproval: true regions: - US - GB - DE EOF gcloud access-context-manager levels create corporate-managed \ --policy=POLICY_ID \ --title="Corporate Managed Device" \ --basic-level-spec=corporate-device-level.yaml # Create a custom access level using CEL expressions gcloud access-context-manager levels create high-trust \ --policy=POLICY_ID \ --title="High Trust Level" \ --custom-level-spec=high-trust-cel.yaml
Enable IAP on backend services to enforce identity verification before granting access.
bash# Create OAuth consent screen gcloud iap oauth-brands create \ --application_title="Corporate Applications" \ --support_email=security@company.com # Create OAuth client for IAP gcloud iap oauth-clients create BRAND_NAME \ --display_name="BeyondCorp IAP Client" # Enable IAP on a backend service (GCE/GKE behind HTTPS LB) gcloud compute backend-services update internal-app-backend \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET \ --global # Enable IAP on App Engine gcloud iap web enable \ --resource-type=app-engine \ --oauth2-client-id=CLIENT_ID \ --oauth2-client-secret=CLIENT_SECRET # Enable IAP on Cloud Run service gcloud run services add-iam-policy-binding internal-api \ --member="serviceAccount:service-PROJECT_NUM@gcp-sa-iap.iam.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=us-central1
Bind IAP access to specific groups with access level requirements.
bash# Grant access to engineering group with corporate device requirement gcloud iap web add-iam-policy-binding \ --resource-type=backend-services \ --service=internal-app-backend \ --member="group:engineering@company.com" \ --role="roles/iap.httpsResourceAccessor" \ --condition="expression=accessPolicies/POLICY_ID/accessLevels/corporate-managed,title=Require Corporate Device" # Grant access to contractors with high-trust requirement gcloud iap web add-iam-policy-binding \ --resource-type=backend-services \ --service=internal-app-backend \ --member="group:contractors@company.com" \ --role="roles/iap.httpsResourceAccessor" \ --condition="expression=accessPolicies/POLICY_ID/accessLevels/high-trust,title=Require High Trust" # Configure re-authentication settings (session duration) gcloud iap settings set --project=PROJECT_ID \ --resource-type=compute \ --service=internal-app-backend \ --reauth-method=LOGIN \ --max-session-duration=3600s
Roll out Chrome Enterprise Endpoint Verification for device posture collection.
bash# Deploy Endpoint Verification via Chrome policy (managed browsers) # In Google Admin Console > Devices > Chrome > Apps & extensions # Force-install: Endpoint Verification extension ID: callobklhcbilhphinckomhgkigmfocg # Verify device inventory in Admin SDK gcloud endpoint-verification list-endpoints \ --filter="deviceType=CHROME_BROWSER" \ --format="table(deviceId, osVersion, isCompliant, encryptionStatus)" # Create device trust connector for third-party EDR signals gcloud beyondcorp app connections create crowdstrike-connector \ --project=PROJECT_ID \ --location=global \ --application-endpoint=host=crowdstrike-api.internal:443,port=443 \ --type=TCP_PROXY_TUNNEL \ --connectors=projects/PROJECT_ID/locations/us-central1/connectors/connector-1 # List enrolled devices and their compliance status gcloud alpha devices list --format="table(name,deviceType,complianceState)"
Enable URL filtering, malware scanning, and DLP for Chrome Enterprise users.
bash# Configure Chrome Enterprise Premium threat protection rules # In Google Admin Console > Security > Chrome Enterprise Premium # Create a BeyondCorp Enterprise connector for on-prem apps gcloud beyondcorp app connectors create onprem-connector \ --project=PROJECT_ID \ --location=us-central1 \ --display-name="On-Premises App Connector" gcloud beyondcorp app connections create hr-portal \ --project=PROJECT_ID \ --location=us-central1 \ --application-endpoint=host=hr.internal.company.com,port=443 \ --type=TCP_PROXY_TUNNEL \ --connectors=projects/PROJECT_ID/locations/us-central1/connectors/onprem-connector # Enable security investigation tool for access anomaly detection gcloud logging read ' resource.type="iap_tunnel" jsonPayload.decision="DENY" timestamp >= "2026-02-22T00:00:00Z" ' --project=PROJECT_ID --format=json --limit=100
Set up comprehensive logging and alerting for zero trust policy enforcement.
bash# Create a log sink for IAP access decisions gcloud logging sinks create iap-access-audit \ --destination=bigquery.googleapis.com/projects/PROJECT_ID/datasets/beyondcorp_audit \ --log-filter='resource.type="iap_tunnel" OR resource.type="gce_backend_service"' # Query BigQuery for access pattern analysis bq query --use_legacy_sql=false ' SELECT protopayload_auditlog.authenticationInfo.principalEmail AS user, resource.labels.backend_service_name AS application, JSON_EXTRACT_SCALAR(protopayload_auditlog.requestMetadata.callerSuppliedUserAgent, "$") AS device, protopayload_auditlog.status.code AS decision_code, COUNT(*) AS request_count FROM `PROJECT_ID.beyondcorp_audit.cloudaudit_googleapis_com_data_access` WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR) GROUP BY user, application, device, decision_code ORDER BY request_count DESC LIMIT 50 ' # Create an alert policy for repeated access denials gcloud alpha monitoring policies create \ --display-name="BeyondCorp Repeated Access Denials" \ --condition-display-name="High denial rate" \ --condition-filter='resource.type="iap_tunnel" AND jsonPayload.decision="DENY"' \ --condition-threshold-value=10 \ --condition-threshold-duration=300s \ --notification-channels=projects/PROJECT_ID/notificationChannels/CHANNEL_ID
| Term | Definition | |------|------------| | BeyondCorp | Google's zero trust security framework that shifts access controls from network perimeter to per-request identity and device verification | | Identity-Aware Proxy (IAP) | Google Cloud service that intercepts HTTP requests and verifies user identity and device context before forwarding to backend applications | | Access Context Manager | GCP service that defines fine-grained attribute-based access control policies using access levels and service perimeters | | Endpoint Verification | Chrome Enterprise extension that collects device attributes (OS version, encryption, screen lock) for access level evaluation | | Access Levels | Named conditions in Access Context Manager that define minimum requirements (device posture, IP range, geography) for resource access | | Chrome Enterprise Premium | Google's commercial BeyondCorp offering providing threat protection, URL filtering, DLP, and continuous access evaluation |
Context: A technology company with 3,000 employees uses Cisco AnyConnect VPN for accessing internal applications. The VPN introduces latency, creates a single point of failure, and grants excessive network access after authentication.
Approach:
Pitfalls: Some legacy applications may not support HTTPS proxying and require TCP tunnel mode. Device enrollment takes time; plan a 2-week onboarding period before enforcing device posture requirements. Break-glass accounts with bypassed access levels must be created and tested for identity provider outages.
BeyondCorp Zero Trust Implementation Report
==================================================
Organization: TechCorp Inc.
Implementation Date: 2026-02-23
Migration Phase: Phase 2 of 3
ACCESS ARCHITECTURE:
Identity Provider: Google Workspace
Access Proxy: Google Cloud IAP
Device Management: Chrome Enterprise + Endpoint Verification
Threat Protection: Chrome Enterprise Premium
On-Prem Connector: BeyondCorp Enterprise Connector (3 instances)
ACCESS LEVEL COVERAGE:
Access Level: corporate-managed
Devices enrolled: 2,847 / 3,000 (94.9%)
Compliant devices: 2,712 / 2,847 (95.3%)
Access Level: high-trust
Devices enrolled: 312 / 350 (89.1%)
Compliant devices: 298 / 312 (95.5%)
APPLICATION MIGRATION:
GCP HTTPS apps (IAP-protected): 32 / 35 (91.4%)
On-prem apps (via connector): 12 / 15 (80.0%)
SaaS apps (via SAML/OIDC): 8 / 8 (100%)
Total migrated: 52 / 58 (89.7%)
SECURITY METRICS (last 30 days):
Total access requests: 1,247,832
Denied by IAP policy: 3,412 (0.27%)
Denied by access level: 1,208 (0.10%)
Re-authentication triggered: 45,219
Anomalous access patterns: 12 (investigated)
VPN-related incidents (before): 8/month
BeyondCorp incidents (after): 1/month
VPN DECOMMISSION STATUS:
Parallel operation remaining: 14 days
Users still on VPN: 148 (5%)
Planned decommission: 2026-03-15| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.