opencode-skills-collection 4.0.68 → 4.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +266 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6943 -323
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cdn-setup
|
|
3
|
+
description: Configure CDNs for content delivery. Set up CloudFront, Cloudflare, and
|
|
4
|
+
Fastly. Use when optimizing global content delivery.
|
|
5
|
+
category: devops
|
|
6
|
+
risk: critical
|
|
7
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
8
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
9
|
+
source_type: community
|
|
10
|
+
date_added: '2026-09-20'
|
|
11
|
+
license: MIT
|
|
12
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
13
|
+
compatibility: Requires the relevant OS/platform tooling and privileged access where
|
|
14
|
+
noted. Docs-only; helper scripts and templates not bundled.
|
|
15
|
+
metadata:
|
|
16
|
+
author: devops-skills
|
|
17
|
+
version: '1.0'
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# CDN Setup
|
|
21
|
+
|
|
22
|
+
Configure content delivery networks for fast, reliable global asset delivery with proper caching, invalidation, and security.
|
|
23
|
+
|
|
24
|
+
## When to Use
|
|
25
|
+
|
|
26
|
+
- Serving static assets (JS, CSS, images, fonts) globally with low latency.
|
|
27
|
+
- Offloading traffic from origin servers to reduce compute costs.
|
|
28
|
+
- Adding TLS termination and DDoS protection at the edge.
|
|
29
|
+
- Implementing geo-based routing or content restrictions.
|
|
30
|
+
- Accelerating API responses with edge caching.
|
|
31
|
+
|
|
32
|
+
## Prerequisites
|
|
33
|
+
|
|
34
|
+
- Domain with DNS management access.
|
|
35
|
+
- Origin server or S3/R2 bucket with content to serve.
|
|
36
|
+
- AWS CLI configured (for CloudFront).
|
|
37
|
+
- Cloudflare account with zone configured (for Cloudflare CDN).
|
|
38
|
+
- Terraform 1.5+ (for infrastructure-as-code examples).
|
|
39
|
+
|
|
40
|
+
## AWS CloudFront
|
|
41
|
+
|
|
42
|
+
### Create a Distribution via CLI
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Create an S3 origin distribution with OAC (Origin Access Control)
|
|
46
|
+
aws cloudfront create-distribution --distribution-config '{
|
|
47
|
+
"CallerReference": "my-site-'$(date +%s)'",
|
|
48
|
+
"Comment": "Production site CDN",
|
|
49
|
+
"Enabled": true,
|
|
50
|
+
"Origins": {
|
|
51
|
+
"Quantity": 1,
|
|
52
|
+
"Items": [{
|
|
53
|
+
"Id": "s3-origin",
|
|
54
|
+
"DomainName": "my-bucket.s3.us-east-1.amazonaws.com",
|
|
55
|
+
"OriginPath": "",
|
|
56
|
+
"S3OriginConfig": {
|
|
57
|
+
"OriginAccessIdentity": ""
|
|
58
|
+
},
|
|
59
|
+
"OriginAccessControlId": "E2QWRUHAPOMQZL"
|
|
60
|
+
}]
|
|
61
|
+
},
|
|
62
|
+
"DefaultCacheBehavior": {
|
|
63
|
+
"TargetOriginId": "s3-origin",
|
|
64
|
+
"ViewerProtocolPolicy": "redirect-to-https",
|
|
65
|
+
"AllowedMethods": {
|
|
66
|
+
"Quantity": 2,
|
|
67
|
+
"Items": ["GET", "HEAD"]
|
|
68
|
+
},
|
|
69
|
+
"CachePolicyId": "658327ea-f89d-4fab-a63d-7e88639e58f6",
|
|
70
|
+
"Compress": true
|
|
71
|
+
},
|
|
72
|
+
"DefaultRootObject": "index.html",
|
|
73
|
+
"PriceClass": "PriceClass_100",
|
|
74
|
+
"ViewerCertificate": {
|
|
75
|
+
"ACMCertificateArn": "arn:aws:acm:us-east-1:123456789:certificate/abc-123",
|
|
76
|
+
"SSLSupportMethod": "sni-only",
|
|
77
|
+
"MinimumProtocolVersion": "TLSv1.2_2021"
|
|
78
|
+
},
|
|
79
|
+
"Aliases": {
|
|
80
|
+
"Quantity": 1,
|
|
81
|
+
"Items": ["www.example.com"]
|
|
82
|
+
},
|
|
83
|
+
"CustomErrorResponses": {
|
|
84
|
+
"Quantity": 1,
|
|
85
|
+
"Items": [{
|
|
86
|
+
"ErrorCode": 404,
|
|
87
|
+
"ResponseCode": "200",
|
|
88
|
+
"ResponsePagePath": "/index.html",
|
|
89
|
+
"ErrorCachingMinTTL": 10
|
|
90
|
+
}]
|
|
91
|
+
}
|
|
92
|
+
}'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Cache Invalidation
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Invalidate specific paths
|
|
99
|
+
aws cloudfront create-invalidation \
|
|
100
|
+
--distribution-id E1A2B3C4D5E6F7 \
|
|
101
|
+
--paths "/index.html" "/css/*" "/js/*"
|
|
102
|
+
|
|
103
|
+
# Invalidate everything (costs apply per path)
|
|
104
|
+
aws cloudfront create-invalidation \
|
|
105
|
+
--distribution-id E1A2B3C4D5E6F7 \
|
|
106
|
+
--paths "/*"
|
|
107
|
+
|
|
108
|
+
# Check invalidation status
|
|
109
|
+
aws cloudfront get-invalidation \
|
|
110
|
+
--distribution-id E1A2B3C4D5E6F7 \
|
|
111
|
+
--id I1A2B3C4D5E6F7
|
|
112
|
+
|
|
113
|
+
# List recent invalidations
|
|
114
|
+
aws cloudfront list-invalidations --distribution-id E1A2B3C4D5E6F7
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### CloudFront Functions (Lightweight Edge Logic)
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
// URL rewrite function — add index.html to directory requests
|
|
121
|
+
function handler(event) {
|
|
122
|
+
var request = event.request;
|
|
123
|
+
var uri = request.uri;
|
|
124
|
+
|
|
125
|
+
if (uri.endsWith('/')) {
|
|
126
|
+
request.uri += 'index.html';
|
|
127
|
+
} else if (!uri.includes('.')) {
|
|
128
|
+
request.uri += '/index.html';
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return request;
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### CloudFront with Terraform
|
|
136
|
+
|
|
137
|
+
```hcl
|
|
138
|
+
# cloudfront.tf
|
|
139
|
+
resource "aws_cloudfront_distribution" "site" {
|
|
140
|
+
enabled = true
|
|
141
|
+
is_ipv6_enabled = true
|
|
142
|
+
default_root_object = "index.html"
|
|
143
|
+
aliases = ["www.example.com"]
|
|
144
|
+
price_class = "PriceClass_100"
|
|
145
|
+
|
|
146
|
+
origin {
|
|
147
|
+
domain_name = aws_s3_bucket.site.bucket_regional_domain_name
|
|
148
|
+
origin_id = "s3-origin"
|
|
149
|
+
origin_access_control_id = aws_cloudfront_origin_access_control.oac.id
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
default_cache_behavior {
|
|
153
|
+
allowed_methods = ["GET", "HEAD"]
|
|
154
|
+
cached_methods = ["GET", "HEAD"]
|
|
155
|
+
target_origin_id = "s3-origin"
|
|
156
|
+
|
|
157
|
+
cache_policy_id = "658327ea-f89d-4fab-a63d-7e88639e58f6" # CachingOptimized
|
|
158
|
+
origin_request_policy_id = "88a5eaf4-2fd4-4709-b370-b4c650ea3fcf" # CORS-S3Origin
|
|
159
|
+
|
|
160
|
+
viewer_protocol_policy = "redirect-to-https"
|
|
161
|
+
compress = true
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# SPA fallback
|
|
165
|
+
custom_error_response {
|
|
166
|
+
error_code = 404
|
|
167
|
+
response_code = 200
|
|
168
|
+
response_page_path = "/index.html"
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
# API pass-through (no caching)
|
|
172
|
+
ordered_cache_behavior {
|
|
173
|
+
path_pattern = "/api/*"
|
|
174
|
+
allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"]
|
|
175
|
+
cached_methods = ["GET", "HEAD"]
|
|
176
|
+
target_origin_id = "api-origin"
|
|
177
|
+
|
|
178
|
+
cache_policy_id = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad" # CachingDisabled
|
|
179
|
+
origin_request_policy_id = "b689b0a8-53d0-40ab-baf2-68738e2966ac" # AllViewerExceptHostHeader
|
|
180
|
+
|
|
181
|
+
viewer_protocol_policy = "https-only"
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
viewer_certificate {
|
|
185
|
+
acm_certificate_arn = aws_acm_certificate.cert.arn
|
|
186
|
+
ssl_support_method = "sni-only"
|
|
187
|
+
minimum_protocol_version = "TLSv1.2_2021"
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
restrictions {
|
|
191
|
+
geo_restriction {
|
|
192
|
+
restriction_type = "none"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
resource "aws_cloudfront_origin_access_control" "oac" {
|
|
198
|
+
name = "s3-oac"
|
|
199
|
+
origin_access_control_origin_type = "s3"
|
|
200
|
+
signing_behavior = "always"
|
|
201
|
+
signing_protocol = "sigv4"
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Cloudflare CDN
|
|
206
|
+
|
|
207
|
+
### Zone Setup
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Add a zone
|
|
211
|
+
curl -X POST "https://api.cloudflare.com/client/v4/zones" \
|
|
212
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
213
|
+
-H "Content-Type: application/json" \
|
|
214
|
+
-d '{"name":"example.com","jump_start":true}'
|
|
215
|
+
|
|
216
|
+
# Get zone ID
|
|
217
|
+
ZONE_ID=$(curl -s "https://api.cloudflare.com/client/v4/zones?name=example.com" \
|
|
218
|
+
-H "Authorization: Bearer $CF_API_TOKEN" | jq -r '.result[0].id')
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Cache Rules (Replacing Page Rules)
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Create a cache rule for static assets
|
|
225
|
+
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_cache_settings/entrypoint" \
|
|
226
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
227
|
+
-H "Content-Type: application/json" \
|
|
228
|
+
-d '{
|
|
229
|
+
"rules": [
|
|
230
|
+
{
|
|
231
|
+
"expression": "(http.request.uri.path.extension in {\"css\" \"js\" \"png\" \"jpg\" \"woff2\" \"svg\"})",
|
|
232
|
+
"action": "set_cache_settings",
|
|
233
|
+
"action_parameters": {
|
|
234
|
+
"cache": true,
|
|
235
|
+
"browser_ttl": { "mode": "override_origin", "default": 2592000 },
|
|
236
|
+
"edge_ttl": { "mode": "override_origin", "default": 86400 }
|
|
237
|
+
},
|
|
238
|
+
"description": "Cache static assets aggressively"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
}'
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Purge Cache
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# Purge everything
|
|
248
|
+
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
|
|
249
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
250
|
+
-H "Content-Type: application/json" \
|
|
251
|
+
-d '{"purge_everything":true}'
|
|
252
|
+
|
|
253
|
+
# Purge specific URLs
|
|
254
|
+
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
|
|
255
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
256
|
+
-H "Content-Type: application/json" \
|
|
257
|
+
-d '{"files":["https://example.com/style.css","https://example.com/app.js"]}'
|
|
258
|
+
|
|
259
|
+
# Purge by prefix
|
|
260
|
+
curl -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/purge_cache" \
|
|
261
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
262
|
+
-H "Content-Type: application/json" \
|
|
263
|
+
-d '{"prefixes":["https://example.com/images/"]}'
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Cache Headers on Origin
|
|
267
|
+
|
|
268
|
+
### nginx Cache Headers
|
|
269
|
+
|
|
270
|
+
```nginx
|
|
271
|
+
# Immutable hashed assets (fingerprinted filenames)
|
|
272
|
+
location ~* \.(js|css)$ {
|
|
273
|
+
if ($uri ~* "\.[a-f0-9]{8,}\.(js|css)$") {
|
|
274
|
+
expires 1y;
|
|
275
|
+
add_header Cache-Control "public, immutable";
|
|
276
|
+
}
|
|
277
|
+
expires 7d;
|
|
278
|
+
add_header Cache-Control "public, must-revalidate";
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
# Images and fonts
|
|
282
|
+
location ~* \.(jpg|jpeg|png|gif|ico|svg|webp|woff2|ttf)$ {
|
|
283
|
+
expires 30d;
|
|
284
|
+
add_header Cache-Control "public, immutable";
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
# HTML — always revalidate
|
|
288
|
+
location ~* \.html$ {
|
|
289
|
+
expires -1;
|
|
290
|
+
add_header Cache-Control "no-cache, must-revalidate";
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
# API responses — no caching
|
|
294
|
+
location /api/ {
|
|
295
|
+
add_header Cache-Control "no-store, no-cache";
|
|
296
|
+
add_header Vary "Authorization, Accept";
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Cache-Control Cheat Sheet
|
|
301
|
+
|
|
302
|
+
| Header | Meaning |
|
|
303
|
+
|--------|---------|
|
|
304
|
+
| `public, max-age=31536000, immutable` | Cache for 1 year, never revalidate (hashed assets) |
|
|
305
|
+
| `public, max-age=86400, must-revalidate` | Cache 1 day, check freshness after |
|
|
306
|
+
| `private, max-age=600` | Browser cache only, 10 min (user-specific content) |
|
|
307
|
+
| `no-cache` | Always revalidate with origin before serving |
|
|
308
|
+
| `no-store` | Never cache (sensitive data) |
|
|
309
|
+
| `s-maxage=3600` | CDN caches for 1 hour, overrides `max-age` for shared caches |
|
|
310
|
+
|
|
311
|
+
## Cache Warming
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Warm cache for critical pages after deployment
|
|
315
|
+
#!/bin/bash
|
|
316
|
+
URLS=(
|
|
317
|
+
"https://www.example.com/"
|
|
318
|
+
"https://www.example.com/products"
|
|
319
|
+
"https://www.example.com/about"
|
|
320
|
+
"https://www.example.com/css/main.abc123.css"
|
|
321
|
+
"https://www.example.com/js/app.def456.js"
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
for url in "${URLS[@]}"; do
|
|
325
|
+
curl -s -o /dev/null -w "%{http_code} %{time_total}s %{url_effective}\n" "$url"
|
|
326
|
+
done
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## Monitoring Cache Performance
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
# Check cache status from response headers
|
|
333
|
+
curl -sI https://www.example.com/style.css | grep -i -E "cf-cache|x-cache|age|cache-control"
|
|
334
|
+
|
|
335
|
+
# Expected headers:
|
|
336
|
+
# cf-cache-status: HIT (Cloudflare)
|
|
337
|
+
# x-cache: Hit from cloudfront (CloudFront)
|
|
338
|
+
# age: 3600 (seconds since cached)
|
|
339
|
+
|
|
340
|
+
# CloudFront cache hit ratio
|
|
341
|
+
aws cloudwatch get-metric-statistics \
|
|
342
|
+
--namespace AWS/CloudFront \
|
|
343
|
+
--metric-name CacheHitRate \
|
|
344
|
+
--dimensions Name=DistributionId,Value=E1A2B3C4D5E6F7 \
|
|
345
|
+
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%S) \
|
|
346
|
+
--end-time $(date -u +%Y-%m-%dT%H:%M:%S) \
|
|
347
|
+
--period 300 \
|
|
348
|
+
--statistics Average
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
## Troubleshooting
|
|
352
|
+
|
|
353
|
+
| Symptom | Cause | Fix |
|
|
354
|
+
|---------|-------|-----|
|
|
355
|
+
| `cf-cache-status: DYNAMIC` | No cache rule matches or Cache-Control prevents it | Set `s-maxage` or create a cache rule for the path |
|
|
356
|
+
| Cache hit ratio below 50% | Low TTLs or high URL cardinality (query strings) | Increase TTL; strip unnecessary query strings in cache key |
|
|
357
|
+
| Stale content after deploy | Old objects still cached at edge | Invalidate; use content-hashed filenames to avoid this entirely |
|
|
358
|
+
| CORS errors through CDN | CDN strips or caches wrong `Vary` header | Add `Vary: Origin` and configure origin request policy to forward `Origin` |
|
|
359
|
+
| 502 errors from CDN | Origin down or timeout | Check origin health; increase CDN origin timeout settings |
|
|
360
|
+
| Mixed content warnings | CDN serves HTTPS but origin links use HTTP | Set `viewer-protocol-policy: redirect-to-https`; fix origin URLs |
|
|
361
|
+
| High invalidation costs | Purging `/*` on every deploy | Use fingerprinted filenames; only invalidate `index.html` |
|
|
362
|
+
|
|
363
|
+
## Related Skills
|
|
364
|
+
|
|
365
|
+
- dns-management (`dns-management`) - DNS records for CDN CNAME setup
|
|
366
|
+
- cloudflare-pages (`cloudflare-pages`) - Cloudflare's built-in CDN for Pages projects
|
|
367
|
+
- reverse-proxy (`reverse-proxy`) - Origin server configuration behind CDN
|
|
368
|
+
- load-balancing (`load-balancing`) - Multi-origin CDN backends
|
|
369
|
+
|
|
370
|
+
## Limitations
|
|
371
|
+
|
|
372
|
+
- Infrastructure commands can disrupt services: confirm target host/scope and have backups/snapshots before mutating state.
|
|
373
|
+
- Docs-only import: upstream scripts and templates not bundled.
|
|
374
|
+
|