blockmine 1.24.0 → 1.25.0
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/CHANGELOG.md +32 -0
- package/README.en.md +427 -0
- package/README.md +40 -0
- package/backend/cli.js +1 -1
- package/backend/src/ai/plugin-assistant-system-prompt.md +664 -5
- package/backend/src/api/routes/bots.js +13 -0
- package/backend/src/api/routes/servers.js +14 -2
- package/backend/src/core/BotProcess.js +98 -2
- package/backend/src/core/PluginLoader.js +83 -3
- package/backend/src/core/PluginManager.js +75 -5
- package/backend/src/core/services/BotLifecycleService.js +186 -2
- package/backend/src/server.js +11 -1
- package/frontend/dist/assets/browser-ponyfill-DN7pwmHT.js +2 -0
- package/frontend/dist/assets/index-LSy71uwm.js +11261 -0
- package/frontend/dist/assets/index-SfhKxI4-.css +32 -0
- package/frontend/dist/flags/en.svg +32 -0
- package/frontend/dist/flags/ru.svg +5 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/locales/en/admin.json +100 -0
- package/frontend/dist/locales/en/api-keys.json +58 -0
- package/frontend/dist/locales/en/bots.json +110 -0
- package/frontend/dist/locales/en/common.json +47 -0
- package/frontend/dist/locales/en/configuration.json +22 -0
- package/frontend/dist/locales/en/console.json +10 -0
- package/frontend/dist/locales/en/dashboard.json +85 -0
- package/frontend/dist/locales/en/dialogs.json +70 -0
- package/frontend/dist/locales/en/event-graphs.json +50 -0
- package/frontend/dist/locales/en/graph-store.json +70 -0
- package/frontend/dist/locales/en/login.json +34 -0
- package/frontend/dist/locales/en/management.json +114 -0
- package/frontend/dist/locales/en/minecraft-viewer.json +27 -0
- package/frontend/dist/locales/en/nodes.json +1077 -0
- package/frontend/dist/locales/en/permissions.json +50 -0
- package/frontend/dist/locales/en/plugin-detail.json +49 -0
- package/frontend/dist/locales/en/plugins.json +110 -0
- package/frontend/dist/locales/en/proxies.json +81 -0
- package/frontend/dist/locales/en/servers.json +39 -0
- package/frontend/dist/locales/en/setup.json +17 -0
- package/frontend/dist/locales/en/sidebar.json +27 -0
- package/frontend/dist/locales/en/tasks.json +62 -0
- package/frontend/dist/locales/en/visual-editor.json +219 -0
- package/frontend/dist/locales/en/websocket.json +86 -0
- package/frontend/dist/locales/ru/admin.json +100 -0
- package/frontend/dist/locales/ru/api-keys.json +58 -0
- package/frontend/dist/locales/ru/bots.json +110 -0
- package/frontend/dist/locales/ru/common.json +49 -0
- package/frontend/dist/locales/ru/configuration.json +22 -0
- package/frontend/dist/locales/ru/console.json +10 -0
- package/frontend/dist/locales/ru/dashboard.json +85 -0
- package/frontend/dist/locales/ru/dialogs.json +70 -0
- package/frontend/dist/locales/ru/event-graphs.json +50 -0
- package/frontend/dist/locales/ru/graph-store.json +70 -0
- package/frontend/dist/locales/ru/login.json +34 -0
- package/frontend/dist/locales/ru/management.json +114 -0
- package/frontend/dist/locales/ru/minecraft-viewer.json +27 -0
- package/frontend/dist/locales/ru/nodes.json +1077 -0
- package/frontend/dist/locales/ru/permissions.json +50 -0
- package/frontend/dist/locales/ru/plugin-detail.json +49 -0
- package/frontend/dist/locales/ru/plugins.json +110 -0
- package/frontend/dist/locales/ru/proxies.json +81 -0
- package/frontend/dist/locales/ru/servers.json +39 -0
- package/frontend/dist/locales/ru/setup.json +17 -0
- package/frontend/dist/locales/ru/sidebar.json +27 -0
- package/frontend/dist/locales/ru/tasks.json +62 -0
- package/frontend/dist/locales/ru/visual-editor.json +221 -0
- package/frontend/dist/locales/ru/websocket.json +86 -0
- package/frontend/dist/monacoeditorwork/css.worker.bundle.js +7 -7
- package/frontend/dist/monacoeditorwork/html.worker.bundle.js +7 -7
- package/frontend/dist/monacoeditorwork/json.worker.bundle.js +7 -7
- package/frontend/dist/monacoeditorwork/ts.worker.bundle.js +3 -3
- package/frontend/package.json +4 -0
- package/package.json +1 -1
- package/screen/3dviewer.png +0 -0
- package/screen/console.png +0 -0
- package/screen/dashboard.png +0 -0
- package/screen/graph_collabe.png +0 -0
- package/screen/graph_live_debug.png +0 -0
- package/screen/language_selector.png +0 -0
- package/screen/management_command.png +0 -0
- package/screen/node_debug_trace.png +0 -0
- package/screen/plugin_/320/276/320/261/320/267/320/276/321/200.png +0 -0
- package/screen/websocket.png +0 -0
- package/screen//320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270_/320/276/321/202/320/264/320/265/320/273/321/214/320/275/321/213/321/205_/320/272/320/276/320/274/320/260/320/275/320/264_/320/272/320/260/320/266/320/264/321/203_/320/272/320/276/320/274/320/260/320/275/320/273/320/264/321/203_/320/274/320/276/320/266/320/275/320/276_/320/275/320/260/321/201/321/202/321/200/320/260/320/270/320/262/320/260/321/202/321/214.png +0 -0
- package/screen//320/277/320/273/320/260/320/275/320/270/321/200/320/276/320/262/321/211/320/270/320/272_/320/274/320/276/320/266/320/275/320/276_/320/267/320/260/320/264/320/260/320/262/320/260/321/202/321/214_/320/264/320/265/320/271/321/201/321/202/320/262/320/270/321/217_/320/277/320/276_/320/262/321/200/320/265/320/274/320/265/320/275/320/270.png +0 -0
- package/.claude/agents/README.md +0 -469
- package/.claude/agents/auth-route-debugger.md +0 -118
- package/.claude/agents/auth-route-tester.md +0 -93
- package/.claude/agents/auto-error-resolver.md +0 -97
- package/.claude/agents/build-optimizer.md +0 -236
- package/.claude/agents/code-architect.md +0 -34
- package/.claude/agents/code-architecture-reviewer.md +0 -83
- package/.claude/agents/code-explorer.md +0 -51
- package/.claude/agents/code-refactor-master.md +0 -94
- package/.claude/agents/code-reviewer.md +0 -46
- package/.claude/agents/cost-optimizer.md +0 -134
- package/.claude/agents/deployment-orchestrator.md +0 -113
- package/.claude/agents/documentation-architect.md +0 -82
- package/.claude/agents/frontend-error-fixer.md +0 -77
- package/.claude/agents/iac-code-generator.md +0 -71
- package/.claude/agents/incident-responder.md +0 -346
- package/.claude/agents/infrastructure-architect.md +0 -31
- package/.claude/agents/kubernetes-specialist.md +0 -56
- package/.claude/agents/migration-planner.md +0 -181
- package/.claude/agents/network-architect.md +0 -196
- package/.claude/agents/plan-reviewer.md +0 -52
- package/.claude/agents/refactor-planner.md +0 -63
- package/.claude/agents/security-scanner.md +0 -102
- package/.claude/agents/web-research-specialist.md +0 -78
- package/.claude/commands/cost-analysis.md +0 -315
- package/.claude/commands/dev-docs-update.md +0 -55
- package/.claude/commands/dev-docs.md +0 -51
- package/.claude/commands/feature-dev.md +0 -125
- package/.claude/commands/incident-debug.md +0 -247
- package/.claude/commands/infra-plan.md +0 -81
- package/.claude/commands/migration-plan.md +0 -478
- package/.claude/commands/route-research-for-testing.md +0 -37
- package/.claude/commands/security-review.md +0 -66
- package/.claude/hooks/CONFIG.md +0 -448
- package/.claude/hooks/README.md +0 -163
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +0 -226
- package/.claude/hooks/WINDOWS_HOOKS_README.md +0 -151
- package/.claude/hooks/add-skill-activation-banners.ts +0 -132
- package/.claude/hooks/comprehensive-skill-test.ts +0 -1315
- package/.claude/hooks/error-handling-reminder.sh +0 -12
- package/.claude/hooks/error-handling-reminder.ts +0 -222
- package/.claude/hooks/k8s-manifest-validator.sh +0 -56
- package/.claude/hooks/package-lock.json +0 -556
- package/.claude/hooks/package.json +0 -16
- package/.claude/hooks/post-tool-use-tracker.ps1 +0 -174
- package/.claude/hooks/post-tool-use-tracker.sh +0 -183
- package/.claude/hooks/security-policy-check.sh +0 -247
- package/.claude/hooks/skill-activation-prompt.ps1 +0 -10
- package/.claude/hooks/skill-activation-prompt.sh +0 -10
- package/.claude/hooks/skill-activation-prompt.ts +0 -141
- package/.claude/hooks/stop-build-check-enhanced.sh +0 -130
- package/.claude/hooks/terraform-validator.sh +0 -53
- package/.claude/hooks/test-input.json +0 -7
- package/.claude/hooks/test-skill-activation.ts +0 -427
- package/.claude/hooks/trigger-build-resolver.sh +0 -79
- package/.claude/hooks/tsc-check.sh +0 -173
- package/.claude/hooks/tsconfig.json +0 -19
- package/.claude/settings.json +0 -59
- package/.claude/settings.local.json +0 -67
- package/.claude/skills/README.md +0 -507
- package/.claude/skills/api-engineering/SKILL.md +0 -63
- package/.claude/skills/api-engineering/resources/api-versioning.md +0 -88
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +0 -106
- package/.claude/skills/api-engineering/resources/rate-limiting.md +0 -118
- package/.claude/skills/api-engineering/resources/rest-api-design.md +0 -105
- package/.claude/skills/backend-dev-guidelines/SKILL.md +0 -306
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +0 -451
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +0 -307
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +0 -638
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +0 -275
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +0 -224
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +0 -213
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +0 -756
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +0 -336
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +0 -789
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +0 -235
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +0 -754
- package/.claude/skills/budget-and-cost-management/SKILL.md +0 -850
- package/.claude/skills/build-engineering/SKILL.md +0 -431
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +0 -72
- package/.claude/skills/build-engineering/resources/build-caching.md +0 -96
- package/.claude/skills/build-engineering/resources/build-pipelines.md +0 -105
- package/.claude/skills/build-engineering/resources/build-security.md +0 -95
- package/.claude/skills/build-engineering/resources/build-systems.md +0 -389
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +0 -201
- package/.claude/skills/build-engineering/resources/dependency-management.md +0 -73
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +0 -110
- package/.claude/skills/build-engineering/resources/performance-optimization.md +0 -113
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +0 -82
- package/.claude/skills/cloud-engineering/SKILL.md +0 -675
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +0 -742
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +0 -714
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +0 -987
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +0 -757
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +0 -1058
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +0 -1530
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +0 -990
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +0 -758
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +0 -820
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +0 -670
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +0 -1198
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +0 -795
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +0 -966
- package/.claude/skills/cybersecurity/SKILL.md +0 -409
- package/.claude/skills/cybersecurity/resources/security-architecture.md +0 -266
- package/.claude/skills/database-engineering/SKILL.md +0 -61
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +0 -72
- package/.claude/skills/database-engineering/resources/database-replication.md +0 -63
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +0 -70
- package/.claude/skills/database-engineering/resources/query-optimization.md +0 -68
- package/.claude/skills/devsecops/SKILL.md +0 -374
- package/.claude/skills/devsecops/resources/ci-cd-security.md +0 -204
- package/.claude/skills/devsecops/resources/compliance-automation.md +0 -530
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +0 -2322
- package/.claude/skills/devsecops/resources/container-security.md +0 -915
- package/.claude/skills/devsecops/resources/cspm-integration.md +0 -1440
- package/.claude/skills/devsecops/resources/policy-enforcement.md +0 -619
- package/.claude/skills/devsecops/resources/secrets-management.md +0 -755
- package/.claude/skills/devsecops/resources/security-monitoring.md +0 -146
- package/.claude/skills/devsecops/resources/security-scanning.md +0 -887
- package/.claude/skills/devsecops/resources/security-testing.md +0 -203
- package/.claude/skills/devsecops/resources/supply-chain-security.md +0 -518
- package/.claude/skills/devsecops/resources/vulnerability-management.md +0 -481
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +0 -177
- package/.claude/skills/documentation-as-code/SKILL.md +0 -323
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +0 -90
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +0 -79
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +0 -44
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +0 -99
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +0 -68
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +0 -79
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +0 -162
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +0 -77
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +0 -60
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +0 -202
- package/.claude/skills/engineering-management/SKILL.md +0 -356
- package/.claude/skills/engineering-management/resources/career-ladders.md +0 -609
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +0 -555
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +0 -609
- package/.claude/skills/engineering-management/resources/resource-planning.md +0 -557
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +0 -491
- package/.claude/skills/engineering-management/resources/technical-interviews.md +0 -474
- package/.claude/skills/engineering-operations-management/SKILL.md +0 -817
- package/.claude/skills/error-tracking/SKILL.md +0 -379
- package/.claude/skills/frontend-design/SKILL.md +0 -42
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +0 -403
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +0 -331
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +0 -872
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +0 -502
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +0 -767
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +0 -502
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +0 -501
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +0 -406
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +0 -364
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +0 -428
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +0 -418
- package/.claude/skills/general-it-engineering/SKILL.md +0 -393
- package/.claude/skills/general-it-engineering/resources/asset-management.md +0 -712
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +0 -817
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +0 -786
- package/.claude/skills/general-it-engineering/resources/change-management.md +0 -715
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +0 -729
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +0 -738
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +0 -834
- package/.claude/skills/general-it-engineering/resources/it-governance.md +0 -753
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +0 -503
- package/.claude/skills/general-it-engineering/resources/service-management.md +0 -669
- package/.claude/skills/infrastructure-architecture/SKILL.md +0 -328
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +0 -505
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +0 -528
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +0 -453
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +0 -773
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +0 -499
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +0 -501
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +0 -535
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +0 -512
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +0 -608
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +0 -562
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +0 -538
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +0 -489
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +0 -1000
- package/.claude/skills/infrastructure-strategy/SKILL.md +0 -924
- package/.claude/skills/network-engineering/SKILL.md +0 -385
- package/.claude/skills/network-engineering/resources/dns-management.md +0 -738
- package/.claude/skills/network-engineering/resources/load-balancing.md +0 -820
- package/.claude/skills/network-engineering/resources/network-architecture.md +0 -546
- package/.claude/skills/network-engineering/resources/network-security.md +0 -921
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +0 -749
- package/.claude/skills/network-engineering/resources/routing-switching.md +0 -373
- package/.claude/skills/network-engineering/resources/sdn-networking.md +0 -695
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +0 -777
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +0 -444
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +0 -672
- package/.claude/skills/node-development/SKILL.md +0 -317
- package/.claude/skills/observability-engineering/SKILL.md +0 -101
- package/.claude/skills/observability-engineering/resources/apm-tools.md +0 -97
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +0 -87
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +0 -98
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +0 -118
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +0 -141
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +0 -110
- package/.claude/skills/platform-engineering/SKILL.md +0 -555
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +0 -600
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +0 -916
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +0 -634
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +0 -670
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +0 -650
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +0 -778
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +0 -708
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +0 -602
- package/.claude/skills/platform-engineering/resources/platform-security.md +0 -711
- package/.claude/skills/platform-engineering/resources/resource-management.md +0 -592
- package/.claude/skills/platform-engineering/resources/service-mesh.md +0 -628
- package/.claude/skills/release-engineering/SKILL.md +0 -393
- package/.claude/skills/release-engineering/resources/artifact-management.md +0 -108
- package/.claude/skills/release-engineering/resources/build-optimization.md +0 -84
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +0 -411
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +0 -197
- package/.claude/skills/release-engineering/resources/pipeline-security.md +0 -62
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +0 -83
- package/.claude/skills/release-engineering/resources/release-automation.md +0 -68
- package/.claude/skills/release-engineering/resources/release-orchestration.md +0 -77
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +0 -66
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +0 -59
- package/.claude/skills/route-tester/SKILL.md +0 -392
- package/.claude/skills/skill-developer/ADVANCED.md +0 -197
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +0 -306
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +0 -152
- package/.claude/skills/skill-developer/SKILL.md +0 -430
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +0 -315
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +0 -305
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +0 -514
- package/.claude/skills/skill-rules.json +0 -2989
- package/.claude/skills/sre/SKILL.md +0 -464
- package/.claude/skills/sre/resources/alerting-best-practices.md +0 -282
- package/.claude/skills/sre/resources/capacity-planning.md +0 -226
- package/.claude/skills/sre/resources/chaos-engineering.md +0 -193
- package/.claude/skills/sre/resources/disaster-recovery.md +0 -232
- package/.claude/skills/sre/resources/incident-management.md +0 -436
- package/.claude/skills/sre/resources/observability-stack.md +0 -240
- package/.claude/skills/sre/resources/on-call-runbooks.md +0 -167
- package/.claude/skills/sre/resources/performance-optimization.md +0 -108
- package/.claude/skills/sre/resources/reliability-patterns.md +0 -183
- package/.claude/skills/sre/resources/slo-sli-sla.md +0 -464
- package/.claude/skills/sre/resources/toil-reduction.md +0 -145
- package/.claude/skills/systems-engineering/SKILL.md +0 -648
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +0 -771
- package/.claude/skills/systems-engineering/resources/configuration-management.md +0 -998
- package/.claude/skills/systems-engineering/resources/linux-administration.md +0 -672
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +0 -982
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +0 -871
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +0 -482
- package/.claude/skills/systems-engineering/resources/security-hardening.md +0 -739
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +0 -915
- package/.claude/skills/systems-engineering/resources/storage-management.md +0 -628
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +0 -787
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +0 -753
- package/.claude/skills/systems-engineering/resources/windows-administration.md +0 -738
- package/.claude/skills/technical-leadership/SKILL.md +0 -728
- package/backend/docs/SECRETS_DOCUMENTATION.md +0 -327
- package/frontend/dist/assets/index-BC-NbKXi.css +0 -32
- package/frontend/dist/assets/index-DqJXZMHY.js +0 -11266
|
@@ -1,755 +0,0 @@
|
|
|
1
|
-
# Secrets Management
|
|
2
|
-
|
|
3
|
-
Comprehensive guide to managing secrets, credentials, and sensitive data using HashiCorp Vault, Sealed Secrets, External Secrets Operator, AWS Secrets Manager, and secret rotation strategies.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Overview](#overview)
|
|
8
|
-
- [HashiCorp Vault](#hashicorp-vault)
|
|
9
|
-
- [Sealed Secrets](#sealed-secrets)
|
|
10
|
-
- [External Secrets Operator](#external-secrets-operator)
|
|
11
|
-
- [Cloud Provider Solutions](#cloud-provider-solutions)
|
|
12
|
-
- [Secret Rotation](#secret-rotation)
|
|
13
|
-
- [Best Practices](#best-practices)
|
|
14
|
-
- [Anti-Patterns](#anti-patterns)
|
|
15
|
-
|
|
16
|
-
## Overview
|
|
17
|
-
|
|
18
|
-
**Secrets Management Lifecycle:**
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
22
|
-
│ Generate │────▶│ Store │────▶│ Rotate │
|
|
23
|
-
│ (Create) │ │ (Encrypt) │ │ (Update) │
|
|
24
|
-
└──────────────┘ └──────────────┘ └──────────────┘
|
|
25
|
-
│ │
|
|
26
|
-
▼ ▼
|
|
27
|
-
┌──────────────┐ ┌──────────────┐
|
|
28
|
-
│ Access │────▶│ Audit │
|
|
29
|
-
│ (Control) │ │ (Log) │
|
|
30
|
-
└──────────────┘ └──────────────┘
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Never:**
|
|
34
|
-
- ❌ Commit secrets to Git
|
|
35
|
-
- ❌ Hardcode in source code
|
|
36
|
-
- ❌ Store in ConfigMaps
|
|
37
|
-
- ❌ Pass in environment variables (visible in process list)
|
|
38
|
-
- ❌ Store unencrypted
|
|
39
|
-
|
|
40
|
-
**Always:**
|
|
41
|
-
- ✅ Use dedicated secrets management
|
|
42
|
-
- ✅ Encrypt at rest and in transit
|
|
43
|
-
- ✅ Implement access controls
|
|
44
|
-
- ✅ Rotate regularly
|
|
45
|
-
- ✅ Audit access
|
|
46
|
-
|
|
47
|
-
## HashiCorp Vault
|
|
48
|
-
|
|
49
|
-
### Installation
|
|
50
|
-
|
|
51
|
-
**Docker:**
|
|
52
|
-
```bash
|
|
53
|
-
docker run -d --name=vault \
|
|
54
|
-
--cap-add=IPC_LOCK \
|
|
55
|
-
-p 8200:8200 \
|
|
56
|
-
vault server -dev
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Kubernetes (Helm):**
|
|
60
|
-
```bash
|
|
61
|
-
helm repo add hashicorp https://helm.releases.hashicorp.com
|
|
62
|
-
helm repo update
|
|
63
|
-
|
|
64
|
-
helm install vault hashicorp/vault \
|
|
65
|
-
--namespace vault --create-namespace \
|
|
66
|
-
--set server.ha.enabled=true \
|
|
67
|
-
--set server.ha.replicas=3
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Basic Operations
|
|
71
|
-
|
|
72
|
-
**Initialize and Unseal:**
|
|
73
|
-
```bash
|
|
74
|
-
# Initialize Vault
|
|
75
|
-
vault operator init -key-shares=5 -key-threshold=3
|
|
76
|
-
|
|
77
|
-
# Save unseal keys and root token securely!
|
|
78
|
-
|
|
79
|
-
# Unseal (requires 3 keys)
|
|
80
|
-
vault operator unseal <key1>
|
|
81
|
-
vault operator unseal <key2>
|
|
82
|
-
vault operator unseal <key3>
|
|
83
|
-
|
|
84
|
-
# Login
|
|
85
|
-
vault login <root_token>
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
**Storing Secrets:**
|
|
89
|
-
```bash
|
|
90
|
-
# Enable KV secrets engine
|
|
91
|
-
vault secrets enable -path=secret kv-v2
|
|
92
|
-
|
|
93
|
-
# Write secret
|
|
94
|
-
vault kv put secret/myapp/config \
|
|
95
|
-
api_key=abc123 \
|
|
96
|
-
db_password=secret123
|
|
97
|
-
|
|
98
|
-
# Read secret
|
|
99
|
-
vault kv get secret/myapp/config
|
|
100
|
-
|
|
101
|
-
# Get specific field
|
|
102
|
-
vault kv get -field=api_key secret/myapp/config
|
|
103
|
-
|
|
104
|
-
# List secrets
|
|
105
|
-
vault kv list secret/myapp
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Access Control (Policies)
|
|
109
|
-
|
|
110
|
-
```hcl
|
|
111
|
-
# policies/app-policy.hcl
|
|
112
|
-
path "secret/data/myapp/*" {
|
|
113
|
-
capabilities = ["read", "list"]
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
path "secret/metadata/myapp/*" {
|
|
117
|
-
capabilities = ["list"]
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
path "database/creds/myapp-role" {
|
|
121
|
-
capabilities = ["read"]
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
# Create policy
|
|
127
|
-
vault policy write app-policy policies/app-policy.hcl
|
|
128
|
-
|
|
129
|
-
# Create token with policy
|
|
130
|
-
vault token create -policy=app-policy
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### Kubernetes Integration
|
|
134
|
-
|
|
135
|
-
**Enable Kubernetes Auth:**
|
|
136
|
-
```bash
|
|
137
|
-
vault auth enable kubernetes
|
|
138
|
-
|
|
139
|
-
vault write auth/kubernetes/config \
|
|
140
|
-
kubernetes_host="https://$KUBERNETES_HOST:443" \
|
|
141
|
-
token_reviewer_jwt="$SA_JWT_TOKEN" \
|
|
142
|
-
kubernetes_ca_cert=@ca.crt
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Create Role:**
|
|
146
|
-
```bash
|
|
147
|
-
vault write auth/kubernetes/role/myapp \
|
|
148
|
-
bound_service_account_names=myapp \
|
|
149
|
-
bound_service_account_namespaces=production \
|
|
150
|
-
policies=app-policy \
|
|
151
|
-
ttl=24h
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Injector Pattern:**
|
|
155
|
-
```yaml
|
|
156
|
-
apiVersion: v1
|
|
157
|
-
kind: Pod
|
|
158
|
-
metadata:
|
|
159
|
-
name: myapp
|
|
160
|
-
annotations:
|
|
161
|
-
vault.hashicorp.com/agent-inject: "true"
|
|
162
|
-
vault.hashicorp.com/role: "myapp"
|
|
163
|
-
vault.hashicorp.com/agent-inject-secret-config: "secret/data/myapp/config"
|
|
164
|
-
vault.hashicorp.com/agent-inject-template-config: |
|
|
165
|
-
{{- with secret "secret/data/myapp/config" -}}
|
|
166
|
-
export API_KEY="{{ .Data.data.api_key }}"
|
|
167
|
-
export DB_PASSWORD="{{ .Data.data.db_password }}"
|
|
168
|
-
{{- end }}
|
|
169
|
-
spec:
|
|
170
|
-
serviceAccountName: myapp
|
|
171
|
-
containers:
|
|
172
|
-
- name: app
|
|
173
|
-
image: myapp:latest
|
|
174
|
-
command:
|
|
175
|
-
- sh
|
|
176
|
-
- -c
|
|
177
|
-
- source /vault/secrets/config && ./start.sh
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Dynamic Secrets
|
|
181
|
-
|
|
182
|
-
**Database Credentials:**
|
|
183
|
-
```bash
|
|
184
|
-
# Enable database engine
|
|
185
|
-
vault secrets enable database
|
|
186
|
-
|
|
187
|
-
# Configure PostgreSQL
|
|
188
|
-
vault write database/config/postgresql \
|
|
189
|
-
plugin_name=postgresql-database-plugin \
|
|
190
|
-
allowed_roles="myapp-role" \
|
|
191
|
-
connection_url="postgresql://{{username}}:{{password}}@postgres:5432/mydb" \
|
|
192
|
-
username="vault" \
|
|
193
|
-
password="vaultpass"
|
|
194
|
-
|
|
195
|
-
# Create role
|
|
196
|
-
vault write database/roles/myapp-role \
|
|
197
|
-
db_name=postgresql \
|
|
198
|
-
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
|
|
199
|
-
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
|
|
200
|
-
default_ttl="1h" \
|
|
201
|
-
max_ttl="24h"
|
|
202
|
-
|
|
203
|
-
# Generate credentials
|
|
204
|
-
vault read database/creds/myapp-role
|
|
205
|
-
# Returns: username, password (temporary, auto-rotated)
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
**AWS Credentials:**
|
|
209
|
-
```bash
|
|
210
|
-
vault secrets enable aws
|
|
211
|
-
|
|
212
|
-
vault write aws/config/root \
|
|
213
|
-
access_key=$AWS_ACCESS_KEY \
|
|
214
|
-
secret_key=$AWS_SECRET_KEY \
|
|
215
|
-
region=us-east-1
|
|
216
|
-
|
|
217
|
-
vault write aws/roles/myapp-role \
|
|
218
|
-
credential_type=iam_user \
|
|
219
|
-
policy_document=-<<EOF
|
|
220
|
-
{
|
|
221
|
-
"Version": "2012-10-17",
|
|
222
|
-
"Statement": [
|
|
223
|
-
{
|
|
224
|
-
"Effect": "Allow",
|
|
225
|
-
"Action": "s3:*",
|
|
226
|
-
"Resource": ["arn:aws:s3:::mybucket/*"]
|
|
227
|
-
}
|
|
228
|
-
]
|
|
229
|
-
}
|
|
230
|
-
EOF
|
|
231
|
-
|
|
232
|
-
# Generate temporary AWS credentials
|
|
233
|
-
vault read aws/creds/myapp-role
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## Sealed Secrets
|
|
237
|
-
|
|
238
|
-
### Installation
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
# Install controller
|
|
242
|
-
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.24.0/controller.yaml
|
|
243
|
-
|
|
244
|
-
# Install kubeseal CLI
|
|
245
|
-
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.24.0/kubeseal-linux-amd64
|
|
246
|
-
chmod +x kubeseal-linux-amd64
|
|
247
|
-
sudo mv kubeseal-linux-amd64 /usr/local/bin/kubeseal
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### Usage
|
|
251
|
-
|
|
252
|
-
**Create Secret:**
|
|
253
|
-
```bash
|
|
254
|
-
# Create regular secret (don't apply!)
|
|
255
|
-
kubectl create secret generic mysecret \
|
|
256
|
-
--from-literal=api-key=abc123 \
|
|
257
|
-
--from-literal=db-password=secret123 \
|
|
258
|
-
--dry-run=client -o yaml > secret.yaml
|
|
259
|
-
|
|
260
|
-
# Seal it
|
|
261
|
-
kubeseal -f secret.yaml -w sealed-secret.yaml
|
|
262
|
-
|
|
263
|
-
# Now safe to commit sealed-secret.yaml
|
|
264
|
-
git add sealed-secret.yaml
|
|
265
|
-
git commit -m "Add sealed secret"
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
**Sealed Secret Manifest:**
|
|
269
|
-
```yaml
|
|
270
|
-
apiVersion: bitnami.com/v1alpha1
|
|
271
|
-
kind: SealedSecret
|
|
272
|
-
metadata:
|
|
273
|
-
name: mysecret
|
|
274
|
-
namespace: production
|
|
275
|
-
spec:
|
|
276
|
-
encryptedData:
|
|
277
|
-
api-key: AgBP8F3F5...encrypted...
|
|
278
|
-
db-password: AgCY9j2K...encrypted...
|
|
279
|
-
template:
|
|
280
|
-
metadata:
|
|
281
|
-
name: mysecret
|
|
282
|
-
namespace: production
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
**Use in Pod:**
|
|
286
|
-
```yaml
|
|
287
|
-
apiVersion: v1
|
|
288
|
-
kind: Pod
|
|
289
|
-
metadata:
|
|
290
|
-
name: myapp
|
|
291
|
-
spec:
|
|
292
|
-
containers:
|
|
293
|
-
- name: app
|
|
294
|
-
image: myapp:latest
|
|
295
|
-
env:
|
|
296
|
-
- name: API_KEY
|
|
297
|
-
valueFrom:
|
|
298
|
-
secretKeyRef:
|
|
299
|
-
name: mysecret # Created from SealedSecret
|
|
300
|
-
key: api-key
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
**Scope Options:**
|
|
304
|
-
```bash
|
|
305
|
-
# Cluster-wide (any namespace)
|
|
306
|
-
kubeseal --scope cluster-wide -f secret.yaml
|
|
307
|
-
|
|
308
|
-
# Namespace-wide (any name in namespace)
|
|
309
|
-
kubeseal --scope namespace-wide -f secret.yaml
|
|
310
|
-
|
|
311
|
-
# Strict (specific name and namespace)
|
|
312
|
-
kubeseal --scope strict -f secret.yaml
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
## External Secrets Operator
|
|
316
|
-
|
|
317
|
-
### Installation
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
helm repo add external-secrets https://charts.external-secrets.io
|
|
321
|
-
helm install external-secrets \
|
|
322
|
-
external-secrets/external-secrets \
|
|
323
|
-
--namespace external-secrets-system \
|
|
324
|
-
--create-namespace
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
### AWS Secrets Manager Backend
|
|
328
|
-
|
|
329
|
-
**SecretStore:**
|
|
330
|
-
```yaml
|
|
331
|
-
apiVersion: external-secrets.io/v1beta1
|
|
332
|
-
kind: SecretStore
|
|
333
|
-
metadata:
|
|
334
|
-
name: aws-secrets-manager
|
|
335
|
-
namespace: production
|
|
336
|
-
spec:
|
|
337
|
-
provider:
|
|
338
|
-
aws:
|
|
339
|
-
service: SecretsManager
|
|
340
|
-
region: us-east-1
|
|
341
|
-
auth:
|
|
342
|
-
jwt:
|
|
343
|
-
serviceAccountRef:
|
|
344
|
-
name: external-secrets-sa
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
**ExternalSecret:**
|
|
348
|
-
```yaml
|
|
349
|
-
apiVersion: external-secrets.io/v1beta1
|
|
350
|
-
kind: ExternalSecret
|
|
351
|
-
metadata:
|
|
352
|
-
name: app-secrets
|
|
353
|
-
namespace: production
|
|
354
|
-
spec:
|
|
355
|
-
refreshInterval: 1h
|
|
356
|
-
secretStoreRef:
|
|
357
|
-
name: aws-secrets-manager
|
|
358
|
-
kind: SecretStore
|
|
359
|
-
|
|
360
|
-
target:
|
|
361
|
-
name: app-secrets
|
|
362
|
-
creationPolicy: Owner
|
|
363
|
-
|
|
364
|
-
data:
|
|
365
|
-
- secretKey: api-key
|
|
366
|
-
remoteRef:
|
|
367
|
-
key: prod/myapp/api-key
|
|
368
|
-
|
|
369
|
-
- secretKey: db-password
|
|
370
|
-
remoteRef:
|
|
371
|
-
key: prod/myapp/database
|
|
372
|
-
property: password
|
|
373
|
-
```
|
|
374
|
-
|
|
375
|
-
### Vault Backend
|
|
376
|
-
|
|
377
|
-
**SecretStore:**
|
|
378
|
-
```yaml
|
|
379
|
-
apiVersion: external-secrets.io/v1beta1
|
|
380
|
-
kind: SecretStore
|
|
381
|
-
metadata:
|
|
382
|
-
name: vault-backend
|
|
383
|
-
namespace: production
|
|
384
|
-
spec:
|
|
385
|
-
provider:
|
|
386
|
-
vault:
|
|
387
|
-
server: "http://vault.vault:8200"
|
|
388
|
-
path: "secret"
|
|
389
|
-
version: "v2"
|
|
390
|
-
auth:
|
|
391
|
-
kubernetes:
|
|
392
|
-
mountPath: "kubernetes"
|
|
393
|
-
role: "myapp"
|
|
394
|
-
serviceAccountRef:
|
|
395
|
-
name: myapp
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
**ExternalSecret:**
|
|
399
|
-
```yaml
|
|
400
|
-
apiVersion: external-secrets.io/v1beta1
|
|
401
|
-
kind: ExternalSecret
|
|
402
|
-
metadata:
|
|
403
|
-
name: vault-secrets
|
|
404
|
-
namespace: production
|
|
405
|
-
spec:
|
|
406
|
-
refreshInterval: 15m
|
|
407
|
-
secretStoreRef:
|
|
408
|
-
name: vault-backend
|
|
409
|
-
kind: SecretStore
|
|
410
|
-
|
|
411
|
-
target:
|
|
412
|
-
name: vault-secrets
|
|
413
|
-
|
|
414
|
-
dataFrom:
|
|
415
|
-
- extract:
|
|
416
|
-
key: myapp/config
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
### GCP Secret Manager
|
|
420
|
-
|
|
421
|
-
**SecretStore:**
|
|
422
|
-
```yaml
|
|
423
|
-
apiVersion: external-secrets.io/v1beta1
|
|
424
|
-
kind: SecretStore
|
|
425
|
-
metadata:
|
|
426
|
-
name: gcp-secret-manager
|
|
427
|
-
spec:
|
|
428
|
-
provider:
|
|
429
|
-
gcpsm:
|
|
430
|
-
projectID: "my-project"
|
|
431
|
-
auth:
|
|
432
|
-
workloadIdentity:
|
|
433
|
-
clusterLocation: us-central1
|
|
434
|
-
clusterName: my-cluster
|
|
435
|
-
serviceAccountRef:
|
|
436
|
-
name: external-secrets-sa
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
## Cloud Provider Solutions
|
|
440
|
-
|
|
441
|
-
### AWS Secrets Manager
|
|
442
|
-
|
|
443
|
-
**Create Secret:**
|
|
444
|
-
```bash
|
|
445
|
-
aws secretsmanager create-secret \
|
|
446
|
-
--name prod/myapp/api-key \
|
|
447
|
-
--description "API key for myapp" \
|
|
448
|
-
--secret-string "abc123xyz"
|
|
449
|
-
|
|
450
|
-
# Store JSON
|
|
451
|
-
aws secretsmanager create-secret \
|
|
452
|
-
--name prod/myapp/database \
|
|
453
|
-
--secret-string '{"username":"dbuser","password":"dbpass123"}'
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
**Retrieve Secret:**
|
|
457
|
-
```bash
|
|
458
|
-
# Get full secret
|
|
459
|
-
aws secretsmanager get-secret-value \
|
|
460
|
-
--secret-id prod/myapp/api-key \
|
|
461
|
-
--query SecretString --output text
|
|
462
|
-
|
|
463
|
-
# Parse JSON secret
|
|
464
|
-
aws secretsmanager get-secret-value \
|
|
465
|
-
--secret-id prod/myapp/database \
|
|
466
|
-
--query SecretString --output text | jq -r .password
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
**Application Code:**
|
|
470
|
-
```typescript
|
|
471
|
-
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
|
|
472
|
-
|
|
473
|
-
const client = new SecretsManagerClient({ region: 'us-east-1' });
|
|
474
|
-
|
|
475
|
-
async function getSecret(secretName: string): Promise<any> {
|
|
476
|
-
const command = new GetSecretValueCommand({ SecretId: secretName });
|
|
477
|
-
const response = await client.send(command);
|
|
478
|
-
return JSON.parse(response.SecretString!);
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
// Usage
|
|
482
|
-
const dbConfig = await getSecret('prod/myapp/database');
|
|
483
|
-
console.log(dbConfig.password);
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
### Google Cloud Secret Manager
|
|
487
|
-
|
|
488
|
-
**Create Secret:**
|
|
489
|
-
```bash
|
|
490
|
-
echo -n "abc123xyz" | gcloud secrets create myapp-api-key \
|
|
491
|
-
--data-file=- \
|
|
492
|
-
--replication-policy="automatic"
|
|
493
|
-
|
|
494
|
-
# Add version
|
|
495
|
-
echo -n "new-secret-value" | gcloud secrets versions add myapp-api-key \
|
|
496
|
-
--data-file=-
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
**Access Secret:**
|
|
500
|
-
```bash
|
|
501
|
-
gcloud secrets versions access latest \
|
|
502
|
-
--secret="myapp-api-key"
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
**Application Code:**
|
|
506
|
-
```python
|
|
507
|
-
from google.cloud import secretmanager
|
|
508
|
-
|
|
509
|
-
client = secretmanager.SecretManagerServiceClient()
|
|
510
|
-
name = f"projects/{project_id}/secrets/{secret_id}/versions/latest"
|
|
511
|
-
response = client.access_secret_version(request={"name": name})
|
|
512
|
-
secret_value = response.payload.data.decode("UTF-8")
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
### Azure Key Vault
|
|
516
|
-
|
|
517
|
-
**Create Secret:**
|
|
518
|
-
```bash
|
|
519
|
-
az keyvault secret set \
|
|
520
|
-
--vault-name mykeyvault \
|
|
521
|
-
--name myapp-api-key \
|
|
522
|
-
--value "abc123xyz"
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
**Retrieve Secret:**
|
|
526
|
-
```bash
|
|
527
|
-
az keyvault secret show \
|
|
528
|
-
--vault-name mykeyvault \
|
|
529
|
-
--name myapp-api-key \
|
|
530
|
-
--query value -o tsv
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
**Application Code:**
|
|
534
|
-
```csharp
|
|
535
|
-
using Azure.Identity;
|
|
536
|
-
using Azure.Security.KeyVault.Secrets;
|
|
537
|
-
|
|
538
|
-
var client = new SecretClient(
|
|
539
|
-
new Uri("https://mykeyvault.vault.azure.net/"),
|
|
540
|
-
new DefaultAzureCredential()
|
|
541
|
-
);
|
|
542
|
-
|
|
543
|
-
KeyVaultSecret secret = await client.GetSecretAsync("myapp-api-key");
|
|
544
|
-
string value = secret.Value;
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
## Secret Rotation
|
|
548
|
-
|
|
549
|
-
### Automated Rotation Strategy
|
|
550
|
-
|
|
551
|
-
**Vault Automatic Rotation:**
|
|
552
|
-
```hcl
|
|
553
|
-
# Database credentials rotate automatically
|
|
554
|
-
vault write database/config/postgresql \
|
|
555
|
-
plugin_name=postgresql-database-plugin \
|
|
556
|
-
connection_url="postgresql://{{username}}:{{password}}@postgres:5432/" \
|
|
557
|
-
rotation_period="24h"
|
|
558
|
-
```
|
|
559
|
-
|
|
560
|
-
**AWS Secrets Manager Rotation:**
|
|
561
|
-
```bash
|
|
562
|
-
aws secretsmanager rotate-secret \
|
|
563
|
-
--secret-id prod/myapp/database \
|
|
564
|
-
--rotation-lambda-arn arn:aws:lambda:us-east-1:123456789:function:SecretsManagerRotation \
|
|
565
|
-
--rotation-rules AutomaticallyAfterDays=30
|
|
566
|
-
```
|
|
567
|
-
|
|
568
|
-
**Lambda Rotation Function:**
|
|
569
|
-
```python
|
|
570
|
-
import boto3
|
|
571
|
-
import json
|
|
572
|
-
|
|
573
|
-
def lambda_handler(event, context):
|
|
574
|
-
secret_id = event['SecretId']
|
|
575
|
-
token = event['ClientRequestToken']
|
|
576
|
-
step = event['Step']
|
|
577
|
-
|
|
578
|
-
client = boto3.client('secretsmanager')
|
|
579
|
-
|
|
580
|
-
if step == "createSecret":
|
|
581
|
-
# Generate new password
|
|
582
|
-
new_password = generate_password()
|
|
583
|
-
client.put_secret_value(
|
|
584
|
-
SecretId=secret_id,
|
|
585
|
-
ClientRequestToken=token,
|
|
586
|
-
SecretString=json.dumps({"password": new_password}),
|
|
587
|
-
VersionStages=['AWSPENDING']
|
|
588
|
-
)
|
|
589
|
-
|
|
590
|
-
elif step == "setSecret":
|
|
591
|
-
# Update database with new password
|
|
592
|
-
update_database_password(new_password)
|
|
593
|
-
|
|
594
|
-
elif step == "testSecret":
|
|
595
|
-
# Test new credentials
|
|
596
|
-
test_database_connection(new_password)
|
|
597
|
-
|
|
598
|
-
elif step == "finishSecret":
|
|
599
|
-
# Mark new version as current
|
|
600
|
-
client.update_secret_version_stage(
|
|
601
|
-
SecretId=secret_id,
|
|
602
|
-
VersionStage='AWSCURRENT',
|
|
603
|
-
MoveToVersionId=token
|
|
604
|
-
)
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
### Manual Rotation Process
|
|
608
|
-
|
|
609
|
-
```bash
|
|
610
|
-
# 1. Generate new secret
|
|
611
|
-
NEW_API_KEY=$(openssl rand -hex 32)
|
|
612
|
-
|
|
613
|
-
# 2. Update secret
|
|
614
|
-
vault kv put secret/myapp/config api_key=$NEW_API_KEY
|
|
615
|
-
|
|
616
|
-
# 3. Restart applications to pick up new secret
|
|
617
|
-
kubectl rollout restart deployment/myapp
|
|
618
|
-
|
|
619
|
-
# 4. Verify new secret is working
|
|
620
|
-
kubectl logs -l app=myapp | grep "API connection successful"
|
|
621
|
-
|
|
622
|
-
# 5. Update external systems if needed
|
|
623
|
-
curl -X POST https://api.provider.com/keys \
|
|
624
|
-
-H "Authorization: Bearer $OLD_KEY" \
|
|
625
|
-
-d "new_key=$NEW_API_KEY"
|
|
626
|
-
```
|
|
627
|
-
|
|
628
|
-
### Zero-Downtime Rotation
|
|
629
|
-
|
|
630
|
-
```yaml
|
|
631
|
-
# Support both old and new secrets during rotation
|
|
632
|
-
apiVersion: v1
|
|
633
|
-
kind: Pod
|
|
634
|
-
spec:
|
|
635
|
-
containers:
|
|
636
|
-
- name: app
|
|
637
|
-
env:
|
|
638
|
-
- name: API_KEY_PRIMARY
|
|
639
|
-
valueFrom:
|
|
640
|
-
secretKeyRef:
|
|
641
|
-
name: app-secrets-new
|
|
642
|
-
key: api-key
|
|
643
|
-
- name: API_KEY_FALLBACK
|
|
644
|
-
valueFrom:
|
|
645
|
-
secretKeyRef:
|
|
646
|
-
name: app-secrets-old
|
|
647
|
-
key: api-key
|
|
648
|
-
```
|
|
649
|
-
|
|
650
|
-
```typescript
|
|
651
|
-
// Application tries primary, falls back to old
|
|
652
|
-
const apiKey = process.env.API_KEY_PRIMARY || process.env.API_KEY_FALLBACK;
|
|
653
|
-
```
|
|
654
|
-
|
|
655
|
-
## Best Practices
|
|
656
|
-
|
|
657
|
-
### 1. Never Commit Secrets
|
|
658
|
-
|
|
659
|
-
```bash
|
|
660
|
-
# Pre-commit hook
|
|
661
|
-
cat > .git/hooks/pre-commit << 'EOF'
|
|
662
|
-
#!/bin/bash
|
|
663
|
-
if git diff --cached | grep -iE '(password|api_key|secret|token).*=.*[a-zA-Z0-9]{16,}'; then
|
|
664
|
-
echo "ERROR: Possible secret detected!"
|
|
665
|
-
exit 1
|
|
666
|
-
fi
|
|
667
|
-
EOF
|
|
668
|
-
chmod +x .git/hooks/pre-commit
|
|
669
|
-
```
|
|
670
|
-
|
|
671
|
-
### 2. Encrypt at Rest
|
|
672
|
-
|
|
673
|
-
All secret backends should encrypt data.
|
|
674
|
-
|
|
675
|
-
### 3. Rotate Regularly
|
|
676
|
-
|
|
677
|
-
```
|
|
678
|
-
Critical: Every 30 days
|
|
679
|
-
High: Every 90 days
|
|
680
|
-
Medium: Every 180 days
|
|
681
|
-
```
|
|
682
|
-
|
|
683
|
-
### 4. Least Privilege Access
|
|
684
|
-
|
|
685
|
-
```hcl
|
|
686
|
-
# Minimal permissions
|
|
687
|
-
path "secret/data/myapp/readonly/*" {
|
|
688
|
-
capabilities = ["read"]
|
|
689
|
-
}
|
|
690
|
-
```
|
|
691
|
-
|
|
692
|
-
### 5. Audit Access
|
|
693
|
-
|
|
694
|
-
```bash
|
|
695
|
-
# Enable audit logging
|
|
696
|
-
vault audit enable file file_path=/var/log/vault-audit.log
|
|
697
|
-
```
|
|
698
|
-
|
|
699
|
-
### 6. Use Short-Lived Credentials
|
|
700
|
-
|
|
701
|
-
```bash
|
|
702
|
-
# TTL example
|
|
703
|
-
vault write database/creds/myapp-role ttl=1h
|
|
704
|
-
```
|
|
705
|
-
|
|
706
|
-
### 7. Separate Secrets by Environment
|
|
707
|
-
|
|
708
|
-
```
|
|
709
|
-
secret/
|
|
710
|
-
dev/
|
|
711
|
-
myapp/
|
|
712
|
-
staging/
|
|
713
|
-
myapp/
|
|
714
|
-
prod/
|
|
715
|
-
myapp/
|
|
716
|
-
```
|
|
717
|
-
|
|
718
|
-
### 8. Emergency Break-Glass Process
|
|
719
|
-
|
|
720
|
-
```
|
|
721
|
-
1. Document emergency access procedure
|
|
722
|
-
2. Store root credentials securely (offline)
|
|
723
|
-
3. Require multiple approvers for access
|
|
724
|
-
4. Audit all emergency access
|
|
725
|
-
5. Rotate secrets after emergency access
|
|
726
|
-
```
|
|
727
|
-
|
|
728
|
-
## Anti-Patterns
|
|
729
|
-
|
|
730
|
-
❌ **Secrets in Git** - Exposed in history forever
|
|
731
|
-
|
|
732
|
-
❌ **Secrets in ConfigMaps** - Not encrypted
|
|
733
|
-
|
|
734
|
-
❌ **Hardcoded secrets** - Can't rotate
|
|
735
|
-
|
|
736
|
-
❌ **Secrets in environment variables** - Visible in process list
|
|
737
|
-
|
|
738
|
-
❌ **Shared secrets** - Can't track who accessed
|
|
739
|
-
|
|
740
|
-
❌ **No rotation** - Compromised secrets stay valid
|
|
741
|
-
|
|
742
|
-
❌ **Overly permissive access** - Least privilege violation
|
|
743
|
-
|
|
744
|
-
❌ **No audit trail** - Can't detect breaches
|
|
745
|
-
|
|
746
|
-
❌ **Secrets in logs** - Exposed to log aggregation
|
|
747
|
-
|
|
748
|
-
❌ **Long-lived credentials** - Higher risk if compromised
|
|
749
|
-
|
|
750
|
-
---
|
|
751
|
-
|
|
752
|
-
**Related Resources:**
|
|
753
|
-
- [encryption.md](encryption.md) - Encryption patterns
|
|
754
|
-
- [policy-enforcement.md](policy-enforcement.md) - Access control policies
|
|
755
|
-
- [compliance-automation.md](compliance-automation.md) - Compliance requirements
|