skills/landing-zones/SKILL.md
Use when designing multi-tenant OCI environments, standing up landing zone Terraform stacks, enforcing Security Zones, or planning hub-spoke network topology. Covers OCI-specific compartment hierarchies, multi-tenant IAM decision trees, Security Zone automation, CIS Foundations compliance, and DRG routing. Keywords: landing zone, compartments, Security Zone, hub-spoke, DRG, CIS, multi-tenant, tenancy, IAM policy.
npx skillsauth add acedergren/agentic-tools landing-zonesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
4 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
NEVER create a flat compartment structure
BAD:
tenancy/ app1-dev, app1-test, app1-prod, app2-dev ...
Problems:
- Cannot apply a single policy to all dev environments
- Cannot delegate administration per team
- Cost reports are unstructured
- Policy duplication grows O(n) with team count
GOOD - hierarchical:
tenancy/
Network/ (Hub, Spokes)
Security/ (Vault, Logging)
Workloads/
App1/ (Dev, Test, Prod)
App2/ (Dev, Test, Prod)
Shared-Services/ (Identity, Monitoring)
Policy inheritance flows DOWN the tree. One policy at Workloads/ applies to all workloads.
NEVER reuse 10.0.0.0/16 across VCNs
BAD - same CIDR everywhere:
Dev VCN: 10.0.0.0/16
Test VCN: 10.0.0.0/16 # Cannot peer with Dev
Prod VCN: 10.0.0.0/16 # Cannot peer with either
VCN CIDR is IMMUTABLE. Wrong CIDR = complete rebuild + downtime.
GOOD - non-overlapping allocation:
Hub VCN: 10.0.0.0/16
Dev VCN: 10.10.0.0/16
Test VCN: 10.20.0.0/16
Prod VCN: 10.30.0.0/16
NEVER skip Security Zones for production compartments
# BAD: Compartment with no guardrails
oci iam compartment create --compartment-id $PARENT --name "Prod"
# Result: Anyone can create public IPs, unencrypted buckets, etc.
# GOOD: Security Zone enforces policies BEFORE resource creation
oci cloud-guard security-zone-recipe create \
--compartment-id $TENANCY_ID \
--display-name "CIS-Prod-Recipe" \
--security-policies '["deny-public-ip","deny-public-bucket"]'
oci cloud-guard security-zone create \
--compartment-id $PROD_COMPARTMENT_ID \
--display-name "Prod-Security-Zone" \
--security-zone-recipe-id $RECIPE_ID
Security Zones prevent violations BEFORE resource creation. Auditing finds them AFTER compromise.
NEVER put workload resources in the root compartment
Root compartment is for tenancy-wide IAM only (users, groups, policies).
Resources in root bypass governance, cannot be delegated, violate CIS OCI Foundations Benchmark.
Root should contain ONLY:
- Top-level child compartments
- Tenancy-wide IAM policies
Nothing else.
NEVER mix dev and prod resources in the same compartment
Developers with dev access can accidentally delete prod resources. Cannot set different backup policies, tagging strategies, or budget alerts per environment.
NEVER skip tagging strategy
# Without tags: "oci.compute.instance: $5,234/month" — which team? which project?
# Cannot chargeback, cannot identify waste.
# RIGHT: Create tag namespace with mandatory defaults
oci iam tag-namespace create --compartment-id $TENANCY_ID --name "Organization"
# Create: CostCenter, Environment, Owner tags
# Apply tag-defaults at compartment level (auto-applied to all resources)
oci iam tag-default create \
--compartment-id $WORKLOAD_COMPARTMENT_ID \
--tag-definition-id $COSTCENTER_TAG_ID \
--value '${iam.principal.name}'
NEVER allow internet egress from spoke VCNs directly
BAD: Spoke subnet → Internet Gateway
- Data exfiltration undetectable
- Egress cost $3k-5k/month per spoke (unmetered)
- No DPI or egress filtering
GOOD - hub-spoke with centralized control:
Spoke → DRG → Hub VCN → Network Firewall → NAT Gateway → Internet
- Single egress point with firewall policies
- Complete visibility via VCN Flow Logs
NEVER use single-region for production workloads requiring SLA
Region outage = complete downtime. No automatic failover without DR.
Multi-region pattern:
Primary: us-ashburn-1 + DR: us-phoenix-1
- Autonomous Data Guard for database (near-zero RPO)
- Traffic Manager for DNS failover (RTO ~15 minutes)
- Object Storage cross-region replication
- Mirror compartment structure in DR region
Workloads single-tenant?
│
├─ YES → Environment-centric model
│ Compartments: Network, Shared-Services, Workloads/App/Dev-Test-Prod
│ IAM: Per-env groups (DevAdmins, ProdOps) scoped to env compartment
│
└─ NO (Multi-tenant SaaS)?
│
├─ Strict tenant isolation required?
│ ├─ YES → Tenant-per-compartment: Org/TenantA, Org/TenantB
│ │ Dynamic Group per tenant VCN for instance principal auth
│ │ Policy: `allow dynamic-group TenantA-VMs to manage all-resources
│ │ in compartment TenantA`
│ └─ NO → Shared compartment + per-tenant tagging
│ (faster setup, shared blast radius)
│
├─ Multiple environments per tenant?
│ └─ Nest: TenantA/Dev, TenantA/Test, TenantA/Prod
│ Policies inherit down the tree automatically
│
└─ Centralized shared services?
└─ Shared-Services compartment (Logging, Monitoring, Identity)
Grant tenancy-level Ops group least-privileged read access
IAM policy template for multi-tenant:
Allow group TenantA-Admins to manage all-resources in compartment TenantA
Allow dynamic-group TenantA-VCN to manage virtual-network-family in compartment TenantA
Allow group Shared-Network to use virtual-network-family in compartment Shared-Services
Guardrails:
iam-identity-management skill for fine-grained policy verb syntaxEnvironment=Prodreferences/security-zone-automation.mdoci cloud-guard security-zone list-problems; alert on PROBLEM stateFull scripts in references/security-zone-automation.md. Treat as MANDATORY for bulk Security Zone changes.
Load references/landing-zone-patterns.md when:
Load references/landing-zone-cli.md when:
Load references/security-zone-automation.md when (MANDATORY for bulk changes):
Load references/oci-well-architected-framework.md when:
development
--- name: api-audit description: "Use when auditing API routes for schema drift, missing auth, or validation gaps. Scans routes against shared TypeScript types to find mismatches, missing middleware, and undocumented endpoints. Read-only — produces a severity-grouped report. Keywords: audit routes, schema drift, auth gaps, missing validation, type mismatch, orphaned schemas. Triggers on "audit API routes" or "find schema drift"." --- # API Route & Type Audit Skill ## When to Use Load this skil
development
Use when drafting, translating, polishing, or reviewing Swedish text so it sounds natural, fluent, contemporary, and appropriate for its audience. Triggers include "write better Swedish", "make this sound natural in Swedish", "translate into Swedish", "polish this Swedish", "tech company Swedish", "contemporary Swedish words", "Swedish developer docs", and "avoid Anglicisms".
development
Use when working with shadcn-svelte components, TanStack Table in Svelte 5, or Tailwind v4.1. Covers non-obvious reactivity bugs, library selection trade-offs, and migration pitfalls not in the official docs. Keywords: shadcn-svelte, TanStack Table, Tailwind v4.1, Svelte 5 runes, bits-ui, superforms, data table, svelte-check.
data-ai
Use when mapping IDCS claims to org membership after OAuth login succeeds. Covers mapProfileToUser, session.create.before, session.create.after hooks, MERGE INTO upserts, tenant-org mapping, and first-admin bootstrap. Keywords: IDCS groups, org_members, provisioning, session hooks, tenant map, MERGE INTO.