opencode-skills-collection 4.0.68 → 4.0.70
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 +304 -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/api-integration-architect/SKILL.md +241 -0
- package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
- package/bundled-skills/apify-integration-development/SKILL.md +168 -0
- package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
- package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
- package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
- package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/architecture-review/README.md +42 -0
- package/bundled-skills/architecture-review/SKILL.md +77 -0
- package/bundled-skills/architecture-review/examples.md +11 -0
- package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
- package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
- package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
- package/bundled-skills/architecture-review/reference/graph.md +15 -0
- package/bundled-skills/architecture-review/reference/mcp.md +14 -0
- package/bundled-skills/architecture-review/reference/workflow.md +15 -0
- package/bundled-skills/architecture-review/templates/architecture-review.md +21 -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/code-review-sensei/SKILL.md +177 -0
- package/bundled-skills/codebase-onboarding/README.md +42 -0
- package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
- package/bundled-skills/codebase-onboarding/examples.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
- package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
- package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
- package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
- package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
- package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
- package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
- package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -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-analysis/README.md +42 -0
- package/bundled-skills/dependency-analysis/SKILL.md +76 -0
- package/bundled-skills/dependency-analysis/examples.md +11 -0
- package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
- package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
- package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
- package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
- package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
- package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
- package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -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/eas-app-stores/SKILL.md +197 -0
- package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
- package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
- package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
- package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
- package/bundled-skills/eas-hosting/SKILL.md +448 -0
- package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/SKILL.md +75 -0
- package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/references/metrics.md +98 -0
- package/bundled-skills/eas-observe/references/queries.md +403 -0
- package/bundled-skills/eas-observe/references/setup.md +476 -0
- package/bundled-skills/eas-observe/references/third-party.md +136 -0
- package/bundled-skills/eas-simulator/SKILL.md +251 -0
- package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
- package/bundled-skills/eas-simulator/references/controllers.md +135 -0
- package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
- package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
- package/bundled-skills/eas-workflows/SKILL.md +119 -0
- package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
- package/bundled-skills/eas-workflows/scripts/fetch.js +109 -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/expo-animation/LICENSE +21 -0
- package/bundled-skills/expo-animation/RECIPES.md +385 -0
- package/bundled-skills/expo-animation/SKILL.md +295 -0
- package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
- package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
- package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
- package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
- package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
- package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
- package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
- package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
- package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
- package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
- package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -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/gpt-taste/SKILL.md +8 -1
- 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/hf-cli/SKILL.md +263 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
- package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
- package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/bundled-skills/huggingface-datasets/SKILL.md +130 -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-social/SKILL.md +182 -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/longbridge-derivatives/SKILL.md +117 -0
- package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
- package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
- package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
- package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
- package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
- package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
- package/bundled-skills/longbridge-quant/SKILL.md +151 -0
- package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
- package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
- package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
- package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
- package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
- package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
- package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
- package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
- package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
- package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
- package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
- package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
- package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
- package/bundled-skills/longbridge-research/SKILL.md +187 -0
- package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
- package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
- package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
- package/bundled-skills/longbridge-research/references/consensus.md +92 -0
- package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
- package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
- package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
- package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
- package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
- package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
- package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
- package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
- package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
- package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
- package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
- package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
- package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
- package/bundled-skills/longbridge-research/references/investors.md +87 -0
- package/bundled-skills/longbridge-research/references/onchain.md +70 -0
- package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
- package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
- package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
- package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
- package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
- package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -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/makepad-2-0-animation/SKILL.md +318 -0
- package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
- package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
- package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
- package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
- package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
- package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
- package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
- package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
- package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
- package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
- package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
- package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -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/meeting-distiller-pro/SKILL.md +120 -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/monte-carlo-analyze-root-cause/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
- package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -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/remotion-captions/SKILL.md +57 -0
- package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-captions/display-captions.md +190 -0
- package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
- package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
- package/bundled-skills/remotion-create/SKILL.md +106 -0
- package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-create/tailwind.md +11 -0
- package/bundled-skills/remotion-create/video-layout.md +9 -0
- package/bundled-skills/remotion-docs/SKILL.md +67 -0
- package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
- package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/SKILL.md +48 -0
- package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/transparent-videos.md +106 -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-pricing-strategist/SKILL.md +169 -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/score-eval/SKILL.md +35 -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/writing-guidelines/SKILL.md +60 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +7874 -277
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcp-secret-manager
|
|
3
|
+
description: Secure secrets in Google Cloud Secret Manager. Configure IAM policies,
|
|
4
|
+
integrate with GKE, and manage secret versions. Use when managing secrets in GCP
|
|
5
|
+
environments.
|
|
6
|
+
category: security
|
|
7
|
+
risk: critical
|
|
8
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
9
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
10
|
+
source_type: community
|
|
11
|
+
date_added: '2026-09-20'
|
|
12
|
+
license: MIT
|
|
13
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
14
|
+
compatibility: Requires the relevant security tooling (scanners, vault CLIs) and an
|
|
15
|
+
authorized scope for any active assessment. Docs-only; helper scripts and templates
|
|
16
|
+
not bundled.
|
|
17
|
+
metadata:
|
|
18
|
+
author: devops-skills
|
|
19
|
+
version: '1.0'
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# GCP Secret Manager
|
|
23
|
+
|
|
24
|
+
Store and manage secrets securely in Google Cloud Platform.
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
- GCP project with billing enabled
|
|
29
|
+
- `gcloud` CLI installed and authenticated
|
|
30
|
+
- Secret Manager API enabled (`secretmanager.googleapis.com`)
|
|
31
|
+
- IAM permissions: `roles/secretmanager.admin` for management, `roles/secretmanager.secretAccessor` for reading
|
|
32
|
+
- For GKE: Workload Identity configured on the cluster
|
|
33
|
+
|
|
34
|
+
## Enable the API
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Enable Secret Manager API
|
|
38
|
+
gcloud services enable secretmanager.googleapis.com
|
|
39
|
+
|
|
40
|
+
# Verify it's enabled
|
|
41
|
+
gcloud services list --enabled --filter="name:secretmanager"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Secret Creation and Management
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Create a secret (creates the secret resource, not the value)
|
|
48
|
+
gcloud secrets create db-password \
|
|
49
|
+
--replication-policy="automatic" \
|
|
50
|
+
--labels="env=production,team=platform"
|
|
51
|
+
|
|
52
|
+
# Add the secret value (first version)
|
|
53
|
+
echo -n "S3cur3P@ssw0rd!" | gcloud secrets versions add db-password --data-file=-
|
|
54
|
+
|
|
55
|
+
# Create secret with value in one command
|
|
56
|
+
echo -n '{"username":"dbadmin","password":"S3cur3P@ss!","host":"10.0.1.5","port":5432}' | \
|
|
57
|
+
gcloud secrets create db-credentials --data-file=- \
|
|
58
|
+
--replication-policy="automatic" \
|
|
59
|
+
--labels="env=production,team=platform"
|
|
60
|
+
|
|
61
|
+
# Create with specific region replication
|
|
62
|
+
gcloud secrets create regional-secret \
|
|
63
|
+
--replication-policy="user-managed" \
|
|
64
|
+
--locations="us-central1,us-east1"
|
|
65
|
+
|
|
66
|
+
# Create with customer-managed encryption key (CMEK)
|
|
67
|
+
gcloud secrets create sensitive-secret \
|
|
68
|
+
--replication-policy="user-managed" \
|
|
69
|
+
--locations="us-central1" \
|
|
70
|
+
--kms-key-name="projects/my-project/locations/us-central1/keyRings/my-ring/cryptoKeys/my-key"
|
|
71
|
+
|
|
72
|
+
# Access the latest version
|
|
73
|
+
gcloud secrets versions access latest --secret=db-password
|
|
74
|
+
|
|
75
|
+
# Access a specific version
|
|
76
|
+
gcloud secrets versions access 3 --secret=db-password
|
|
77
|
+
|
|
78
|
+
# Add a new version (rotation)
|
|
79
|
+
echo -n "N3wS3cur3P@ss!" | gcloud secrets versions add db-password --data-file=-
|
|
80
|
+
|
|
81
|
+
# List all secrets
|
|
82
|
+
gcloud secrets list --format="table(name, createTime, labels)"
|
|
83
|
+
|
|
84
|
+
# List versions of a secret
|
|
85
|
+
gcloud secrets versions list db-password --format="table(name, state, createTime)"
|
|
86
|
+
|
|
87
|
+
# Disable a version (makes it inaccessible but recoverable)
|
|
88
|
+
gcloud secrets versions disable 1 --secret=db-password
|
|
89
|
+
|
|
90
|
+
# Enable a disabled version
|
|
91
|
+
gcloud secrets versions enable 1 --secret=db-password
|
|
92
|
+
|
|
93
|
+
# Destroy a version (permanent)
|
|
94
|
+
gcloud secrets versions destroy 1 --secret=db-password
|
|
95
|
+
|
|
96
|
+
# Delete the entire secret
|
|
97
|
+
gcloud secrets delete db-password
|
|
98
|
+
|
|
99
|
+
# Set expiration on a secret
|
|
100
|
+
gcloud secrets update db-password \
|
|
101
|
+
--expire-time="2026-06-01T00:00:00Z"
|
|
102
|
+
|
|
103
|
+
# Set TTL-based expiration
|
|
104
|
+
gcloud secrets update temp-token \
|
|
105
|
+
--ttl="2592000s" # 30 days
|
|
106
|
+
|
|
107
|
+
# Update labels
|
|
108
|
+
gcloud secrets update db-password \
|
|
109
|
+
--update-labels="rotation=enabled,last-rotated=2025-01-15"
|
|
110
|
+
|
|
111
|
+
# Add version aliases
|
|
112
|
+
gcloud secrets versions update 5 --secret=db-password --set-aliases="production"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## IAM Bindings
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Grant secret accessor role to a service account
|
|
119
|
+
gcloud secrets add-iam-policy-binding db-password \
|
|
120
|
+
--member="serviceAccount:myapp-sa@my-project.iam.gserviceaccount.com" \
|
|
121
|
+
--role="roles/secretmanager.secretAccessor"
|
|
122
|
+
|
|
123
|
+
# Grant access to a specific secret version
|
|
124
|
+
gcloud secrets add-iam-policy-binding db-password \
|
|
125
|
+
--member="serviceAccount:myapp-sa@my-project.iam.gserviceaccount.com" \
|
|
126
|
+
--role="roles/secretmanager.secretVersionAccessor" \
|
|
127
|
+
--condition='expression=resource.name.endsWith("versions/latest"),title=latest-only'
|
|
128
|
+
|
|
129
|
+
# Grant admin to security team
|
|
130
|
+
gcloud secrets add-iam-policy-binding db-password \
|
|
131
|
+
--member="group:security-team@example.com" \
|
|
132
|
+
--role="roles/secretmanager.admin"
|
|
133
|
+
|
|
134
|
+
# View IAM policy for a secret
|
|
135
|
+
gcloud secrets get-iam-policy db-password
|
|
136
|
+
|
|
137
|
+
# Remove access
|
|
138
|
+
gcloud secrets remove-iam-policy-binding db-password \
|
|
139
|
+
--member="serviceAccount:old-sa@my-project.iam.gserviceaccount.com" \
|
|
140
|
+
--role="roles/secretmanager.secretAccessor"
|
|
141
|
+
|
|
142
|
+
# Project-level IAM for all secrets
|
|
143
|
+
gcloud projects add-iam-policy-binding my-project \
|
|
144
|
+
--member="serviceAccount:myapp-sa@my-project.iam.gserviceaccount.com" \
|
|
145
|
+
--role="roles/secretmanager.secretAccessor" \
|
|
146
|
+
--condition='expression=resource.name.startsWith("projects/my-project/secrets/myapp-"),title=myapp-secrets-only'
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Workload Identity for GKE
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Enable Workload Identity on cluster (if not already)
|
|
153
|
+
gcloud container clusters update my-cluster \
|
|
154
|
+
--zone us-central1-a \
|
|
155
|
+
--workload-pool=my-project.svc.id.goog
|
|
156
|
+
|
|
157
|
+
# Create GCP service account for the workload
|
|
158
|
+
gcloud iam service-accounts create myapp-gke-sa \
|
|
159
|
+
--display-name="MyApp GKE Service Account"
|
|
160
|
+
|
|
161
|
+
# Grant secret accessor role
|
|
162
|
+
gcloud secrets add-iam-policy-binding db-password \
|
|
163
|
+
--member="serviceAccount:myapp-gke-sa@my-project.iam.gserviceaccount.com" \
|
|
164
|
+
--role="roles/secretmanager.secretAccessor"
|
|
165
|
+
|
|
166
|
+
# Bind Kubernetes SA to GCP SA
|
|
167
|
+
gcloud iam service-accounts add-iam-policy-binding \
|
|
168
|
+
myapp-gke-sa@my-project.iam.gserviceaccount.com \
|
|
169
|
+
--role="roles/iam.workloadIdentityUser" \
|
|
170
|
+
--member="serviceAccount:my-project.svc.id.goog[production/myapp-sa]"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Kubernetes Manifests
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
# Kubernetes service account annotated with GCP SA
|
|
177
|
+
apiVersion: v1
|
|
178
|
+
kind: ServiceAccount
|
|
179
|
+
metadata:
|
|
180
|
+
name: myapp-sa
|
|
181
|
+
namespace: production
|
|
182
|
+
annotations:
|
|
183
|
+
iam.gke.io/gcp-service-account: "myapp-gke-sa@my-project.iam.gserviceaccount.com"
|
|
184
|
+
---
|
|
185
|
+
# Secrets Store CSI Driver for GCP
|
|
186
|
+
apiVersion: secrets-store.csi.x-k8s.io/v1
|
|
187
|
+
kind: SecretProviderClass
|
|
188
|
+
metadata:
|
|
189
|
+
name: gcp-secrets
|
|
190
|
+
namespace: production
|
|
191
|
+
spec:
|
|
192
|
+
provider: gcp
|
|
193
|
+
parameters:
|
|
194
|
+
secrets: |
|
|
195
|
+
- resourceName: "projects/my-project/secrets/db-password/versions/latest"
|
|
196
|
+
path: "db-password"
|
|
197
|
+
- resourceName: "projects/my-project/secrets/db-credentials/versions/latest"
|
|
198
|
+
path: "db-credentials"
|
|
199
|
+
- resourceName: "projects/my-project/secrets/api-key/versions/latest"
|
|
200
|
+
path: "api-key"
|
|
201
|
+
secretObjects:
|
|
202
|
+
- secretName: myapp-secrets
|
|
203
|
+
type: Opaque
|
|
204
|
+
data:
|
|
205
|
+
- objectName: db-password
|
|
206
|
+
key: DB_PASSWORD
|
|
207
|
+
- objectName: api-key
|
|
208
|
+
key: API_KEY
|
|
209
|
+
---
|
|
210
|
+
# Deployment using the secrets
|
|
211
|
+
apiVersion: apps/v1
|
|
212
|
+
kind: Deployment
|
|
213
|
+
metadata:
|
|
214
|
+
name: myapp
|
|
215
|
+
namespace: production
|
|
216
|
+
spec:
|
|
217
|
+
replicas: 3
|
|
218
|
+
selector:
|
|
219
|
+
matchLabels:
|
|
220
|
+
app: myapp
|
|
221
|
+
template:
|
|
222
|
+
metadata:
|
|
223
|
+
labels:
|
|
224
|
+
app: myapp
|
|
225
|
+
spec:
|
|
226
|
+
serviceAccountName: myapp-sa
|
|
227
|
+
containers:
|
|
228
|
+
- name: myapp
|
|
229
|
+
image: gcr.io/my-project/myapp:v1.0.0
|
|
230
|
+
env:
|
|
231
|
+
- name: DB_PASSWORD
|
|
232
|
+
valueFrom:
|
|
233
|
+
secretKeyRef:
|
|
234
|
+
name: myapp-secrets
|
|
235
|
+
key: DB_PASSWORD
|
|
236
|
+
volumeMounts:
|
|
237
|
+
- name: secrets
|
|
238
|
+
mountPath: "/var/secrets"
|
|
239
|
+
readOnly: true
|
|
240
|
+
volumes:
|
|
241
|
+
- name: secrets
|
|
242
|
+
csi:
|
|
243
|
+
driver: secrets-store.csi.k8s.io
|
|
244
|
+
readOnly: true
|
|
245
|
+
volumeAttributes:
|
|
246
|
+
secretProviderClass: "gcp-secrets"
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Application SDK Examples
|
|
250
|
+
|
|
251
|
+
### Python
|
|
252
|
+
|
|
253
|
+
```python
|
|
254
|
+
from google.cloud import secretmanager
|
|
255
|
+
from google.api_core import exceptions
|
|
256
|
+
import json
|
|
257
|
+
|
|
258
|
+
def get_secret(project_id: str, secret_id: str, version: str = "latest") -> str:
|
|
259
|
+
"""Access a secret version from GCP Secret Manager."""
|
|
260
|
+
client = secretmanager.SecretManagerServiceClient()
|
|
261
|
+
name = f"projects/{project_id}/secrets/{secret_id}/versions/{version}"
|
|
262
|
+
|
|
263
|
+
try:
|
|
264
|
+
response = client.access_secret_version(request={"name": name})
|
|
265
|
+
return response.payload.data.decode("UTF-8")
|
|
266
|
+
except exceptions.NotFound:
|
|
267
|
+
raise ValueError(f"Secret {secret_id} version {version} not found")
|
|
268
|
+
except exceptions.PermissionDenied:
|
|
269
|
+
raise PermissionError(f"No access to secret {secret_id}")
|
|
270
|
+
|
|
271
|
+
def get_json_secret(project_id: str, secret_id: str) -> dict:
|
|
272
|
+
"""Access and parse a JSON secret."""
|
|
273
|
+
raw = get_secret(project_id, secret_id)
|
|
274
|
+
return json.loads(raw)
|
|
275
|
+
|
|
276
|
+
def create_secret(project_id: str, secret_id: str, value: str, labels: dict = None) -> str:
|
|
277
|
+
"""Create a new secret with an initial version."""
|
|
278
|
+
client = secretmanager.SecretManagerServiceClient()
|
|
279
|
+
parent = f"projects/{project_id}"
|
|
280
|
+
|
|
281
|
+
secret_config = {
|
|
282
|
+
"replication": {"automatic": {}},
|
|
283
|
+
}
|
|
284
|
+
if labels:
|
|
285
|
+
secret_config["labels"] = labels
|
|
286
|
+
|
|
287
|
+
secret = client.create_secret(
|
|
288
|
+
request={"parent": parent, "secret_id": secret_id, "secret": secret_config}
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
client.add_secret_version(
|
|
292
|
+
request={"parent": secret.name, "payload": {"data": value.encode("UTF-8")}}
|
|
293
|
+
)
|
|
294
|
+
return secret.name
|
|
295
|
+
|
|
296
|
+
def rotate_secret(project_id: str, secret_id: str, new_value: str) -> str:
|
|
297
|
+
"""Add a new version to rotate the secret."""
|
|
298
|
+
client = secretmanager.SecretManagerServiceClient()
|
|
299
|
+
parent = f"projects/{project_id}/secrets/{secret_id}"
|
|
300
|
+
|
|
301
|
+
version = client.add_secret_version(
|
|
302
|
+
request={"parent": parent, "payload": {"data": new_value.encode("UTF-8")}}
|
|
303
|
+
)
|
|
304
|
+
return version.name
|
|
305
|
+
|
|
306
|
+
def list_secrets(project_id: str, filter_str: str = "") -> list:
|
|
307
|
+
"""List all secrets in a project."""
|
|
308
|
+
client = secretmanager.SecretManagerServiceClient()
|
|
309
|
+
parent = f"projects/{project_id}"
|
|
310
|
+
|
|
311
|
+
secrets = []
|
|
312
|
+
for secret in client.list_secrets(request={"parent": parent, "filter": filter_str}):
|
|
313
|
+
secrets.append({
|
|
314
|
+
"name": secret.name.split("/")[-1],
|
|
315
|
+
"created": secret.create_time.isoformat(),
|
|
316
|
+
"labels": dict(secret.labels),
|
|
317
|
+
})
|
|
318
|
+
return secrets
|
|
319
|
+
|
|
320
|
+
# Usage
|
|
321
|
+
creds = get_json_secret("my-project", "db-credentials")
|
|
322
|
+
connection_string = (
|
|
323
|
+
f"postgresql://{creds['username']}:{creds['password']}"
|
|
324
|
+
f"@{creds['host']}:{creds['port']}/mydb"
|
|
325
|
+
)
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
### Go
|
|
329
|
+
|
|
330
|
+
```go
|
|
331
|
+
package main
|
|
332
|
+
|
|
333
|
+
import (
|
|
334
|
+
"context"
|
|
335
|
+
"fmt"
|
|
336
|
+
"log"
|
|
337
|
+
|
|
338
|
+
secretmanager "cloud.google.com/go/secretmanager/apiv1"
|
|
339
|
+
secretmanagerpb "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb"
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
func getSecret(projectID, secretID, version string) (string, error) {
|
|
343
|
+
ctx := context.Background()
|
|
344
|
+
client, err := secretmanager.NewClient(ctx)
|
|
345
|
+
if err != nil {
|
|
346
|
+
return "", fmt.Errorf("failed to create client: %w", err)
|
|
347
|
+
}
|
|
348
|
+
defer client.Close()
|
|
349
|
+
|
|
350
|
+
name := fmt.Sprintf("projects/%s/secrets/%s/versions/%s", projectID, secretID, version)
|
|
351
|
+
result, err := client.AccessSecretVersion(ctx, &secretmanagerpb.AccessSecretVersionRequest{
|
|
352
|
+
Name: name,
|
|
353
|
+
})
|
|
354
|
+
if err != nil {
|
|
355
|
+
return "", fmt.Errorf("failed to access secret: %w", err)
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
return string(result.Payload.Data), nil
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
func main() {
|
|
362
|
+
secret, err := getSecret("my-project", "db-password", "latest")
|
|
363
|
+
if err != nil {
|
|
364
|
+
log.Fatalf("Error: %v", err)
|
|
365
|
+
}
|
|
366
|
+
fmt.Printf("Secret: %s\n", secret)
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Node.js
|
|
371
|
+
|
|
372
|
+
```javascript
|
|
373
|
+
const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
|
|
374
|
+
|
|
375
|
+
const client = new SecretManagerServiceClient();
|
|
376
|
+
|
|
377
|
+
async function getSecret(projectId, secretId, version = 'latest') {
|
|
378
|
+
const name = `projects/${projectId}/secrets/${secretId}/versions/${version}`;
|
|
379
|
+
const [response] = await client.accessSecretVersion({ name });
|
|
380
|
+
return response.payload.data.toString('utf8');
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
async function main() {
|
|
384
|
+
const password = await getSecret('my-project', 'db-password');
|
|
385
|
+
console.log(`Secret retrieved, length: ${password.length}`);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
main().catch(console.error);
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
## Contents
|
|
393
|
+
|
|
394
|
+
- [Secret Rotation with Cloud Functions](references/details.md)
|
|
395
|
+
- [Terraform Configuration](references/details.md)
|
|
396
|
+
- [Troubleshooting](references/details.md)
|
|
397
|
+
- [Best Practices](references/details.md)
|
|
398
|
+
- [Related Skills](references/details.md)
|
|
399
|
+
|
|
400
|
+
## When to Use This Skill
|
|
401
|
+
|
|
402
|
+
Use this skill when:
|
|
403
|
+
- Managing secrets in GCP environments
|
|
404
|
+
- Integrating secrets with GKE workloads via Workload Identity
|
|
405
|
+
- Storing API keys, database credentials, or TLS certificates
|
|
406
|
+
- Implementing secret versioning and rotation
|
|
407
|
+
- Meeting compliance requirements for centralized secret management
|
|
408
|
+
|
|
409
|
+
## Limitations
|
|
410
|
+
|
|
411
|
+
- Apply guidance only within authorized scope; test destructive steps in non-production first.
|
|
412
|
+
- Docs-only import: upstream scripts and templates not bundled.
|
|
413
|
+
|
|
414
|
+
### Example
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
# Read-only first: inventory before any active step.
|
|
418
|
+
which <tool> && <tool> --help | head -n 20
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
> 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.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Details (moved from SKILL.md)
|
|
2
|
+
|
|
3
|
+
> Extended reference content for `gcp-secret-manager`, kept under `references/` so the entrypoint stays within the audit budget.
|
|
4
|
+
|
|
5
|
+
## Secret Rotation with Cloud Functions
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
"""cloud_function_rotation.py - Triggered by Pub/Sub on secret rotation events."""
|
|
9
|
+
|
|
10
|
+
import functions_framework
|
|
11
|
+
from google.cloud import secretmanager
|
|
12
|
+
import secrets
|
|
13
|
+
import string
|
|
14
|
+
|
|
15
|
+
@functions_framework.cloud_event
|
|
16
|
+
def rotate_secret(cloud_event):
|
|
17
|
+
"""Handle secret rotation events from Pub/Sub."""
|
|
18
|
+
data = cloud_event.data
|
|
19
|
+
secret_name = data.get("name", "")
|
|
20
|
+
|
|
21
|
+
if "db-password" not in secret_name:
|
|
22
|
+
print(f"Skipping non-DB secret: {secret_name}")
|
|
23
|
+
return
|
|
24
|
+
|
|
25
|
+
client = secretmanager.SecretManagerServiceClient()
|
|
26
|
+
|
|
27
|
+
alphabet = string.ascii_letters + string.digits + "!@#$%^&*"
|
|
28
|
+
new_password = ''.join(secrets.choice(alphabet) for _ in range(32))
|
|
29
|
+
|
|
30
|
+
parent = "/".join(secret_name.split("/")[:4])
|
|
31
|
+
client.add_secret_version(
|
|
32
|
+
request={
|
|
33
|
+
"parent": parent,
|
|
34
|
+
"payload": {"data": new_password.encode("UTF-8")},
|
|
35
|
+
}
|
|
36
|
+
)
|
|
37
|
+
print(f"Rotated secret: {parent}")
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Rotation Schedule with Cloud Scheduler
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Create a Pub/Sub topic for rotation events
|
|
44
|
+
gcloud pubsub topics create secret-rotation
|
|
45
|
+
|
|
46
|
+
# Configure secret to publish rotation events
|
|
47
|
+
gcloud secrets update db-password \
|
|
48
|
+
--add-topics="projects/my-project/topics/secret-rotation" \
|
|
49
|
+
--event-types="SECRET_ROTATE"
|
|
50
|
+
|
|
51
|
+
# Set up rotation schedule
|
|
52
|
+
gcloud secrets update db-password \
|
|
53
|
+
--next-rotation-time="2025-04-01T00:00:00Z" \
|
|
54
|
+
--rotation-period="2592000s" # 30 days
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Terraform Configuration
|
|
59
|
+
|
|
60
|
+
```hcl
|
|
61
|
+
resource "google_secret_manager_secret" "db_password" {
|
|
62
|
+
project = var.project_id
|
|
63
|
+
secret_id = "db-password"
|
|
64
|
+
|
|
65
|
+
replication {
|
|
66
|
+
auto {}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
labels = {
|
|
70
|
+
env = "production"
|
|
71
|
+
team = "platform"
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
rotation {
|
|
75
|
+
next_rotation_time = "2025-04-01T00:00:00Z"
|
|
76
|
+
rotation_period = "2592000s"
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
topics {
|
|
80
|
+
name = google_pubsub_topic.secret_rotation.id
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
resource "google_secret_manager_secret_version" "db_password" {
|
|
85
|
+
secret = google_secret_manager_secret.db_password.id
|
|
86
|
+
secret_data = var.db_password
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
resource "google_secret_manager_secret_iam_member" "app_accessor" {
|
|
90
|
+
project = var.project_id
|
|
91
|
+
secret_id = google_secret_manager_secret.db_password.secret_id
|
|
92
|
+
role = "roles/secretmanager.secretAccessor"
|
|
93
|
+
member = "serviceAccount:${google_service_account.app.email}"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## Troubleshooting
|
|
99
|
+
|
|
100
|
+
| Problem | Cause | Solution |
|
|
101
|
+
|---------|-------|----------|
|
|
102
|
+
| "Secret Manager API not enabled" | API not activated in project | Run `gcloud services enable secretmanager.googleapis.com` |
|
|
103
|
+
| "Permission denied" on access | Missing `secretAccessor` role | Grant `roles/secretmanager.secretAccessor` on the specific secret |
|
|
104
|
+
| Workload Identity not working | K8s SA not bound to GCP SA | Verify annotation on K8s SA; check IAM binding with `workloadIdentityUser` |
|
|
105
|
+
| "Secret version is in DISABLED state" | Version was disabled | Enable with `gcloud secrets versions enable VERSION --secret=SECRET` |
|
|
106
|
+
| High latency on secret access | No client-side caching | Cache secrets in memory with TTL; use CSI driver for GKE |
|
|
107
|
+
| CMEK decrypt fails | KMS key permissions missing | Grant `roles/cloudkms.cryptoKeyEncrypterDecrypter` to Secret Manager SA |
|
|
108
|
+
| Rotation function not triggered | Pub/Sub topic not configured | Verify topic is attached to secret; check Cloud Function subscription |
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
## Best Practices
|
|
112
|
+
|
|
113
|
+
- Use Workload Identity for GKE instead of exported service account keys
|
|
114
|
+
- Implement IAM least-privilege at the individual secret level, not project level
|
|
115
|
+
- Enable audit logging for all secret access (Cloud Audit Logs)
|
|
116
|
+
- Use secret versions for safe rollback during rotation issues
|
|
117
|
+
- Set expiration dates or TTLs on temporary secrets
|
|
118
|
+
- Integrate with Cloud KMS for customer-managed encryption keys
|
|
119
|
+
- Use labels consistently for organization and automation
|
|
120
|
+
- Monitor secret access patterns with Cloud Monitoring
|
|
121
|
+
- Implement rotation schedules for all long-lived credentials
|
|
122
|
+
- Use conditional IAM bindings to restrict access by resource name pattern
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
## Related Skills
|
|
126
|
+
|
|
127
|
+
- hashicorp-vault (`hashicorp-vault`) - Multi-cloud secrets
|
|
128
|
+
- gcp-gke (`gcp-gke`) - GKE integration
|
|
129
|
+
- aws-secrets-manager (`aws-secrets-manager`) - AWS secret management
|
|
130
|
+
- azure-keyvault (`azure-keyvault`) - Azure secret management
|
|
131
|
+
|