opencode-skills-collection 4.0.67 → 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 +281 -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/anti-slop-design/SKILL.md +393 -0
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +1 -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/artifact-yylo/SKILL.md +122 -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/google-no-code/SKILL.md +136 -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/idea-evaluator/SKILL.md +75 -0
- package/bundled-skills/idea-evaluator/idea-evaluator-con/SKILL.md +64 -0
- package/bundled-skills/idea-evaluator/idea-evaluator-pro/SKILL.md +64 -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/ledger-tasks-yylo/SKILL.md +219 -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/loki-mode/examples/todo-app-generated/backend/package-lock.json +4 -4
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +1 -1
- 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/plan-ledger-tasks-yylo/SKILL.md +52 -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/ralph-loop-yylo/SKILL.md +55 -0
- package/bundled-skills/ralph-loop-yylo/references/first_check.md +18 -0
- package/bundled-skills/ralph-loop-yylo/references/implement.md +60 -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/resumable-implementation-contracts/SKILL.md +254 -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/understand-project-yylo/SKILL.md +62 -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/weather-model-data-fetching/SKILL.md +277 -0
- package/bundled-skills/weather-observation-fetching/SKILL.md +246 -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/wiki-yylo/SKILL.md +114 -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/workflow-yylo/SKILL.md +107 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +6924 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aws-secrets-manager
|
|
3
|
+
description: Store and rotate secrets in AWS Secrets Manager.
|
|
4
|
+
category: security
|
|
5
|
+
risk: critical
|
|
6
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
7
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
8
|
+
source_type: community
|
|
9
|
+
date_added: '2026-09-20'
|
|
10
|
+
license: MIT
|
|
11
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
12
|
+
compatibility: Requires the relevant security tooling (scanners, vault CLIs) and an
|
|
13
|
+
authorized scope for any active assessment. Docs-only; helper scripts and templates
|
|
14
|
+
not bundled.
|
|
15
|
+
metadata:
|
|
16
|
+
author: devops-skills
|
|
17
|
+
version: '1.0'
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# AWS Secrets Manager
|
|
21
|
+
|
|
22
|
+
Securely store, manage, and rotate secrets in AWS.
|
|
23
|
+
|
|
24
|
+
## When to Use This Skill
|
|
25
|
+
|
|
26
|
+
Use this skill when:
|
|
27
|
+
- Storing database credentials, API keys, or tokens in AWS
|
|
28
|
+
- Implementing automatic credential rotation for RDS or other services
|
|
29
|
+
- Replacing hardcoded secrets in application code or config files
|
|
30
|
+
- Integrating secrets into ECS, EKS, or Lambda workloads
|
|
31
|
+
- Meeting compliance requirements for secret management and rotation
|
|
32
|
+
|
|
33
|
+
## Prerequisites
|
|
34
|
+
|
|
35
|
+
- AWS account with appropriate IAM permissions
|
|
36
|
+
- AWS CLI v2 installed and configured
|
|
37
|
+
- IAM policy allowing `secretsmanager:*` actions (or scoped permissions)
|
|
38
|
+
- For rotation: Lambda execution role and VPC access to target services
|
|
39
|
+
- Python 3.9+ with `boto3` for SDK examples
|
|
40
|
+
|
|
41
|
+
## Secret Creation and Management
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Create a secret with JSON structure
|
|
45
|
+
aws secretsmanager create-secret \
|
|
46
|
+
--name myapp/production/database \
|
|
47
|
+
--description "Production database credentials" \
|
|
48
|
+
--secret-string '{"username":"dbadmin","password":"S3cur3P@ssw0rd!","engine":"postgres","host":"db.internal.example.com","port":5432,"dbname":"myapp"}' \
|
|
49
|
+
--tags '[{"Key":"Environment","Value":"production"},{"Key":"Team","Value":"platform"}]'
|
|
50
|
+
|
|
51
|
+
# Create a secret with KMS encryption (custom key)
|
|
52
|
+
aws secretsmanager create-secret \
|
|
53
|
+
--name myapp/production/api-key \
|
|
54
|
+
--description "Third-party API key" \
|
|
55
|
+
--secret-string "ak_live_xxxxxxxxxxxx" \
|
|
56
|
+
--kms-key-id alias/secrets-key
|
|
57
|
+
|
|
58
|
+
# Create a binary secret (certificates, keys)
|
|
59
|
+
aws secretsmanager create-secret \
|
|
60
|
+
--name myapp/production/tls-cert \
|
|
61
|
+
--secret-binary fileb://server.pfx
|
|
62
|
+
|
|
63
|
+
# Get secret value
|
|
64
|
+
aws secretsmanager get-secret-value \
|
|
65
|
+
--secret-id myapp/production/database \
|
|
66
|
+
--query 'SecretString' --output text | jq .
|
|
67
|
+
|
|
68
|
+
# Get a specific version
|
|
69
|
+
aws secretsmanager get-secret-value \
|
|
70
|
+
--secret-id myapp/production/database \
|
|
71
|
+
--version-stage AWSPREVIOUS
|
|
72
|
+
|
|
73
|
+
# Update secret value
|
|
74
|
+
aws secretsmanager put-secret-value \
|
|
75
|
+
--secret-id myapp/production/database \
|
|
76
|
+
--secret-string '{"username":"dbadmin","password":"N3wS3cur3P@ss!","engine":"postgres","host":"db.internal.example.com","port":5432,"dbname":"myapp"}'
|
|
77
|
+
|
|
78
|
+
# List all secrets
|
|
79
|
+
aws secretsmanager list-secrets \
|
|
80
|
+
--filters Key=name,Values=myapp/production
|
|
81
|
+
|
|
82
|
+
# Delete secret (with recovery window)
|
|
83
|
+
aws secretsmanager delete-secret \
|
|
84
|
+
--secret-id myapp/production/old-key \
|
|
85
|
+
--recovery-window-in-days 7
|
|
86
|
+
|
|
87
|
+
# Restore a deleted secret
|
|
88
|
+
aws secretsmanager restore-secret \
|
|
89
|
+
--secret-id myapp/production/old-key
|
|
90
|
+
|
|
91
|
+
# Tag a secret
|
|
92
|
+
aws secretsmanager tag-resource \
|
|
93
|
+
--secret-id myapp/production/database \
|
|
94
|
+
--tags '[{"Key":"RotationEnabled","Value":"true"}]'
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Automatic Rotation
|
|
98
|
+
|
|
99
|
+
### Enable Rotation
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Enable rotation with an existing Lambda function
|
|
103
|
+
aws secretsmanager rotate-secret \
|
|
104
|
+
--secret-id myapp/production/database \
|
|
105
|
+
--rotation-lambda-arn arn:aws:lambda:us-east-1:123456789012:function:SecretsManagerRDSPostgreSQLRotation \
|
|
106
|
+
--rotation-rules '{"AutomaticallyAfterDays":30,"ScheduleExpression":"rate(30 days)"}'
|
|
107
|
+
|
|
108
|
+
# Trigger immediate rotation
|
|
109
|
+
aws secretsmanager rotate-secret \
|
|
110
|
+
--secret-id myapp/production/database
|
|
111
|
+
|
|
112
|
+
# Check rotation status
|
|
113
|
+
aws secretsmanager describe-secret \
|
|
114
|
+
--secret-id myapp/production/database \
|
|
115
|
+
--query '{RotationEnabled:RotationEnabled,RotationLambdaARN:RotationLambdaARN,RotationRules:RotationRules,LastRotatedDate:LastRotatedDate}'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Lambda Rotation Function
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
"""rotation_function.py - Custom rotation Lambda for database credentials."""
|
|
122
|
+
|
|
123
|
+
import boto3
|
|
124
|
+
import json
|
|
125
|
+
import logging
|
|
126
|
+
import psycopg2
|
|
127
|
+
|
|
128
|
+
logger = logging.getLogger()
|
|
129
|
+
logger.setLevel(logging.INFO)
|
|
130
|
+
|
|
131
|
+
def lambda_handler(event, context):
|
|
132
|
+
"""Secrets Manager rotation handler.
|
|
133
|
+
|
|
134
|
+
The rotation process has four steps:
|
|
135
|
+
1. createSecret - Generate new secret value
|
|
136
|
+
2. setSecret - Apply the new secret to the target service
|
|
137
|
+
3. testSecret - Verify the new secret works
|
|
138
|
+
4. finishSecret - Mark rotation complete
|
|
139
|
+
"""
|
|
140
|
+
secret_arn = event['SecretId']
|
|
141
|
+
token = event['ClientRequestToken']
|
|
142
|
+
step = event['Step']
|
|
143
|
+
|
|
144
|
+
client = boto3.client('secretsmanager')
|
|
145
|
+
|
|
146
|
+
metadata = client.describe_secret(SecretId=secret_arn)
|
|
147
|
+
if not metadata.get('RotationEnabled'):
|
|
148
|
+
raise ValueError(f"Secret {secret_arn} does not have rotation enabled")
|
|
149
|
+
|
|
150
|
+
versions = metadata.get('VersionIdsToStages', {})
|
|
151
|
+
if token not in versions:
|
|
152
|
+
raise ValueError(f"Secret version {token} has no stage for rotation")
|
|
153
|
+
|
|
154
|
+
if step == "createSecret":
|
|
155
|
+
create_secret(client, secret_arn, token)
|
|
156
|
+
elif step == "setSecret":
|
|
157
|
+
set_secret(client, secret_arn, token)
|
|
158
|
+
elif step == "testSecret":
|
|
159
|
+
test_secret(client, secret_arn, token)
|
|
160
|
+
elif step == "finishSecret":
|
|
161
|
+
finish_secret(client, secret_arn, token)
|
|
162
|
+
else:
|
|
163
|
+
raise ValueError(f"Invalid step: {step}")
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def create_secret(client, secret_arn, token):
|
|
167
|
+
"""Generate a new secret value."""
|
|
168
|
+
current = client.get_secret_value(
|
|
169
|
+
SecretId=secret_arn, VersionStage="AWSCURRENT"
|
|
170
|
+
)
|
|
171
|
+
current_dict = json.loads(current['SecretString'])
|
|
172
|
+
|
|
173
|
+
new_password = client.get_random_password(
|
|
174
|
+
PasswordLength=32,
|
|
175
|
+
ExcludeCharacters='/@"\\',
|
|
176
|
+
RequireEachIncludedType=True,
|
|
177
|
+
)['RandomPassword']
|
|
178
|
+
|
|
179
|
+
current_dict['password'] = new_password
|
|
180
|
+
client.put_secret_value(
|
|
181
|
+
SecretId=secret_arn,
|
|
182
|
+
ClientRequestToken=token,
|
|
183
|
+
SecretString=json.dumps(current_dict),
|
|
184
|
+
VersionStages=['AWSPENDING'],
|
|
185
|
+
)
|
|
186
|
+
logger.info(f"createSecret: New secret version created for {secret_arn}")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def set_secret(client, secret_arn, token):
|
|
190
|
+
"""Apply the new secret to the target database."""
|
|
191
|
+
pending = client.get_secret_value(
|
|
192
|
+
SecretId=secret_arn, VersionId=token, VersionStage="AWSPENDING"
|
|
193
|
+
)
|
|
194
|
+
pending_dict = json.loads(pending['SecretString'])
|
|
195
|
+
|
|
196
|
+
current = client.get_secret_value(
|
|
197
|
+
SecretId=secret_arn, VersionStage="AWSCURRENT"
|
|
198
|
+
)
|
|
199
|
+
current_dict = json.loads(current['SecretString'])
|
|
200
|
+
|
|
201
|
+
conn = psycopg2.connect(
|
|
202
|
+
host=current_dict['host'],
|
|
203
|
+
port=current_dict.get('port', 5432),
|
|
204
|
+
user=current_dict['username'],
|
|
205
|
+
password=current_dict['password'],
|
|
206
|
+
dbname=current_dict.get('dbname', 'postgres'),
|
|
207
|
+
)
|
|
208
|
+
conn.autocommit = True
|
|
209
|
+
with conn.cursor() as cur:
|
|
210
|
+
cur.execute(
|
|
211
|
+
"ALTER USER %s WITH PASSWORD %s",
|
|
212
|
+
(pending_dict['username'], pending_dict['password']),
|
|
213
|
+
)
|
|
214
|
+
conn.close()
|
|
215
|
+
logger.info(f"setSecret: Password updated in database for {secret_arn}")
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def test_secret(client, secret_arn, token):
|
|
219
|
+
"""Verify the new secret works."""
|
|
220
|
+
pending = client.get_secret_value(
|
|
221
|
+
SecretId=secret_arn, VersionId=token, VersionStage="AWSPENDING"
|
|
222
|
+
)
|
|
223
|
+
pending_dict = json.loads(pending['SecretString'])
|
|
224
|
+
|
|
225
|
+
conn = psycopg2.connect(
|
|
226
|
+
host=pending_dict['host'],
|
|
227
|
+
port=pending_dict.get('port', 5432),
|
|
228
|
+
user=pending_dict['username'],
|
|
229
|
+
password=pending_dict['password'],
|
|
230
|
+
dbname=pending_dict.get('dbname', 'postgres'),
|
|
231
|
+
)
|
|
232
|
+
conn.close()
|
|
233
|
+
logger.info(f"testSecret: New credentials verified for {secret_arn}")
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def finish_secret(client, secret_arn, token):
|
|
237
|
+
"""Finalize the rotation by updating version stages."""
|
|
238
|
+
metadata = client.describe_secret(SecretId=secret_arn)
|
|
239
|
+
versions = metadata.get('VersionIdsToStages', {})
|
|
240
|
+
|
|
241
|
+
current_version = None
|
|
242
|
+
for version_id, stages in versions.items():
|
|
243
|
+
if "AWSCURRENT" in stages:
|
|
244
|
+
if version_id == token:
|
|
245
|
+
logger.info("finishSecret: Version already marked AWSCURRENT")
|
|
246
|
+
return
|
|
247
|
+
current_version = version_id
|
|
248
|
+
break
|
|
249
|
+
|
|
250
|
+
client.update_secret_version_stage(
|
|
251
|
+
SecretId=secret_arn,
|
|
252
|
+
VersionStage="AWSCURRENT",
|
|
253
|
+
MoveToVersionId=token,
|
|
254
|
+
RemoveFromVersionId=current_version,
|
|
255
|
+
)
|
|
256
|
+
logger.info(f"finishSecret: Rotation complete for {secret_arn}")
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Rotation Lambda Terraform
|
|
260
|
+
|
|
261
|
+
```hcl
|
|
262
|
+
resource "aws_lambda_function" "rotation" {
|
|
263
|
+
filename = "rotation_function.zip"
|
|
264
|
+
function_name = "secrets-rotation-postgresql"
|
|
265
|
+
role = aws_iam_role.rotation.arn
|
|
266
|
+
handler = "rotation_function.lambda_handler"
|
|
267
|
+
runtime = "python3.11"
|
|
268
|
+
timeout = 60
|
|
269
|
+
|
|
270
|
+
vpc_config {
|
|
271
|
+
subnet_ids = var.private_subnet_ids
|
|
272
|
+
security_group_ids = [aws_security_group.rotation.id]
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
environment {
|
|
276
|
+
variables = {
|
|
277
|
+
SECRETS_MANAGER_ENDPOINT = "https://secretsmanager.${var.region}.amazonaws.com"
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
resource "aws_lambda_permission" "secrets_manager" {
|
|
283
|
+
action = "lambda:InvokeFunction"
|
|
284
|
+
function_name = aws_lambda_function.rotation.function_name
|
|
285
|
+
principal = "secretsmanager.amazonaws.com"
|
|
286
|
+
statement_id = "AllowSecretsManager"
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
resource "aws_secretsmanager_secret_rotation" "db" {
|
|
290
|
+
secret_id = aws_secretsmanager_secret.db.id
|
|
291
|
+
rotation_lambda_arn = aws_lambda_function.rotation.arn
|
|
292
|
+
rotation_rules {
|
|
293
|
+
automatically_after_days = 30
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Application Integration
|
|
299
|
+
|
|
300
|
+
### Python SDK
|
|
301
|
+
|
|
302
|
+
```python
|
|
303
|
+
import boto3
|
|
304
|
+
import json
|
|
305
|
+
from functools import lru_cache
|
|
306
|
+
|
|
307
|
+
def get_secret(secret_name: str, region: str = "us-east-1") -> dict:
|
|
308
|
+
"""Retrieve and parse a secret from AWS Secrets Manager."""
|
|
309
|
+
client = boto3.client("secretsmanager", region_name=region)
|
|
310
|
+
response = client.get_secret_value(SecretId=secret_name)
|
|
311
|
+
if "SecretString" in response:
|
|
312
|
+
return json.loads(response["SecretString"])
|
|
313
|
+
else:
|
|
314
|
+
import base64
|
|
315
|
+
return base64.b64decode(response["SecretBinary"])
|
|
316
|
+
|
|
317
|
+
@lru_cache(maxsize=32)
|
|
318
|
+
def get_cached_secret(secret_name: str) -> dict:
|
|
319
|
+
"""Cached secret retrieval. Clear cache on rotation events."""
|
|
320
|
+
return get_secret(secret_name)
|
|
321
|
+
|
|
322
|
+
# Usage
|
|
323
|
+
creds = get_secret("myapp/production/database")
|
|
324
|
+
connection_string = (
|
|
325
|
+
f"postgresql://{creds['username']}:{creds['password']}"
|
|
326
|
+
f"@{creds['host']}:{creds['port']}/{creds['dbname']}"
|
|
327
|
+
)
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### ECS Task Definition
|
|
331
|
+
|
|
332
|
+
```json
|
|
333
|
+
{
|
|
334
|
+
"containerDefinitions": [
|
|
335
|
+
{
|
|
336
|
+
"name": "myapp",
|
|
337
|
+
"image": "ghcr.io/acme/myapp:v1.0.0",
|
|
338
|
+
"secrets": [
|
|
339
|
+
{
|
|
340
|
+
"name": "DB_USERNAME",
|
|
341
|
+
"valueFrom": "arn:aws:secretsmanager:us-east-1:123456789:secret:myapp/production/database:username::"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"name": "DB_PASSWORD",
|
|
345
|
+
"valueFrom": "arn:aws:secretsmanager:us-east-1:123456789:secret:myapp/production/database:password::"
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"name": "API_KEY",
|
|
349
|
+
"valueFrom": "arn:aws:secretsmanager:us-east-1:123456789:secret:myapp/production/api-key"
|
|
350
|
+
}
|
|
351
|
+
]
|
|
352
|
+
}
|
|
353
|
+
],
|
|
354
|
+
"executionRoleArn": "arn:aws:iam::123456789:role/ecsTaskExecutionRole"
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### EKS with External Secrets Operator
|
|
359
|
+
|
|
360
|
+
```yaml
|
|
361
|
+
apiVersion: external-secrets.io/v1beta1
|
|
362
|
+
kind: SecretStore
|
|
363
|
+
metadata:
|
|
364
|
+
name: aws-secrets-manager
|
|
365
|
+
namespace: production
|
|
366
|
+
spec:
|
|
367
|
+
provider:
|
|
368
|
+
aws:
|
|
369
|
+
service: SecretsManager
|
|
370
|
+
region: us-east-1
|
|
371
|
+
auth:
|
|
372
|
+
jwt:
|
|
373
|
+
serviceAccountRef:
|
|
374
|
+
name: external-secrets-sa
|
|
375
|
+
---
|
|
376
|
+
apiVersion: external-secrets.io/v1beta1
|
|
377
|
+
kind: ExternalSecret
|
|
378
|
+
metadata:
|
|
379
|
+
name: db-credentials
|
|
380
|
+
namespace: production
|
|
381
|
+
spec:
|
|
382
|
+
refreshInterval: 1h
|
|
383
|
+
secretStoreRef:
|
|
384
|
+
name: aws-secrets-manager
|
|
385
|
+
kind: SecretStore
|
|
386
|
+
target:
|
|
387
|
+
name: db-credentials
|
|
388
|
+
creationPolicy: Owner
|
|
389
|
+
data:
|
|
390
|
+
- secretKey: username
|
|
391
|
+
remoteRef:
|
|
392
|
+
key: myapp/production/database
|
|
393
|
+
property: username
|
|
394
|
+
- secretKey: password
|
|
395
|
+
remoteRef:
|
|
396
|
+
key: myapp/production/database
|
|
397
|
+
property: password
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Resource-Based Policy
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
# Restrict secret access to specific roles
|
|
404
|
+
aws secretsmanager put-resource-policy \
|
|
405
|
+
--secret-id myapp/production/database \
|
|
406
|
+
--resource-policy '{
|
|
407
|
+
"Version": "2012-10-17",
|
|
408
|
+
"Statement": [
|
|
409
|
+
{
|
|
410
|
+
"Effect": "Allow",
|
|
411
|
+
"Principal": {
|
|
412
|
+
"AWS": [
|
|
413
|
+
"arn:aws:iam::123456789:role/myapp-ecs-task-role",
|
|
414
|
+
"arn:aws:iam::123456789:role/myapp-lambda-role"
|
|
415
|
+
]
|
|
416
|
+
},
|
|
417
|
+
"Action": [
|
|
418
|
+
"secretsmanager:GetSecretValue"
|
|
419
|
+
],
|
|
420
|
+
"Resource": "*",
|
|
421
|
+
"Condition": {
|
|
422
|
+
"StringEquals": {
|
|
423
|
+
"aws:RequestedRegion": "us-east-1"
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"Effect": "Deny",
|
|
429
|
+
"Principal": "*",
|
|
430
|
+
"Action": "secretsmanager:GetSecretValue",
|
|
431
|
+
"Resource": "*",
|
|
432
|
+
"Condition": {
|
|
433
|
+
"StringNotEquals": {
|
|
434
|
+
"aws:PrincipalAccount": "123456789012"
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
]
|
|
439
|
+
}'
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
## Troubleshooting
|
|
443
|
+
|
|
444
|
+
| Problem | Cause | Solution |
|
|
445
|
+
|---------|-------|----------|
|
|
446
|
+
| `AccessDeniedException` on GetSecretValue | IAM policy missing permission | Add `secretsmanager:GetSecretValue` to the role; check resource-based policy |
|
|
447
|
+
| Rotation fails with Lambda timeout | Lambda cannot reach database | Ensure Lambda is in same VPC with route to DB; check security groups |
|
|
448
|
+
| Secret value is empty after rotation | createSecret step failed | Check Lambda CloudWatch logs; verify random password generation works |
|
|
449
|
+
| ECS container fails to start | Secret ARN format incorrect | Use full ARN with `::` for JSON key extraction; verify secret exists |
|
|
450
|
+
| Application uses old credentials after rotation | Client caching stale values | Implement cache invalidation on rotation; reduce cache TTL |
|
|
451
|
+
| Rotation Lambda permission error | Missing `lambda:InvokeFunction` permission | Add `aws_lambda_permission` for secretsmanager.amazonaws.com principal |
|
|
452
|
+
| KMS decrypt fails | Secret KMS key policy missing role | Add the accessing role to the KMS key policy's `kms:Decrypt` principals |
|
|
453
|
+
|
|
454
|
+
## Best Practices
|
|
455
|
+
|
|
456
|
+
- Enable automatic rotation with 30-day intervals minimum
|
|
457
|
+
- Use resource-based policies in addition to IAM policies (defense in depth)
|
|
458
|
+
- Encrypt secrets with customer-managed KMS keys (not default)
|
|
459
|
+
- Implement least-privilege access (only the roles that need each secret)
|
|
460
|
+
- Use secret versioning for safe rollback during rotation issues
|
|
461
|
+
- Monitor secret access with CloudTrail and alert on unusual patterns
|
|
462
|
+
- Structure secret names hierarchically: `{app}/{env}/{secret-type}`
|
|
463
|
+
- Never log secret values; log only secret ARNs and access metadata
|
|
464
|
+
- Test rotation in staging before enabling in production
|
|
465
|
+
- Set up CloudWatch alarms for rotation failures
|
|
466
|
+
|
|
467
|
+
## Related Skills
|
|
468
|
+
|
|
469
|
+
- hashicorp-vault (`hashicorp-vault`) - Multi-cloud secrets
|
|
470
|
+
- aws-iam (`aws-iam`) - IAM policies
|
|
471
|
+
- azure-keyvault (`azure-keyvault`) - Azure secret management
|
|
472
|
+
- gcp-secret-manager (`gcp-secret-manager`) - GCP secret management
|
|
473
|
+
|
|
474
|
+
## Limitations
|
|
475
|
+
|
|
476
|
+
- Apply guidance only within authorized scope; test destructive steps in non-production first.
|
|
477
|
+
- Docs-only import: upstream scripts and templates not bundled.
|
|
478
|
+
|
|
479
|
+
### Example
|
|
480
|
+
|
|
481
|
+
```bash
|
|
482
|
+
# Read-only first: inventory before any active step.
|
|
483
|
+
which <tool> && <tool> --help | head -n 20
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
> Adapted from [BagelHole/DevOps-Security-Agent-Skills](https://github.com/BagelHole/DevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.
|