# KMS (Key Management Service) Recipes # ====================================== # Encryption, decryption, key management, and backend operations # ============================================================================ # Encryption Operations # ============================================================================ # Encrypt file with RustyVault (fastest default backend) @kms-encrypt FILE: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting {{FILE}} with RustyVault..." provisioning kms encrypt {{FILE}} --backend rustyvault echo "โœ… File encrypted: {{FILE}}.enc" @kms-encrypt-backend FILE BACKEND: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting {{FILE}} with {{BACKEND}}..." provisioning kms encrypt {{FILE}} --backend {{BACKEND}} echo "โœ… File encrypted" @kms-decrypt FILE: echo "๐Ÿ”“ Decrypting {{FILE}}..." provisioning kms decrypt {{FILE}} echo "โœ… File decrypted" @kms-encrypt-string DATA: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting string..." echo "{{DATA}}" | provisioning kms encrypt --backend rustyvault --stdin @kms-decrypt-string ENCRYPTED: #!/usr/bin/env bash echo "๐Ÿ”“ Decrypting string..." echo "{{ENCRYPTED}}" | provisioning kms decrypt --stdin @kms-encrypt-context FILE CONTEXT: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting {{FILE}} with context: {{CONTEXT}}..." provisioning kms encrypt {{FILE}} --backend rustyvault --context "{{CONTEXT}}" echo "โœ… File encrypted with AAD" # Backend Management # ============================================================================ # List available KMS backends @kms-backends: echo "๐Ÿ“‹ Available KMS Backends" echo "=========================" provisioning kms backends @kms-status: echo "๐Ÿ“Š KMS Status" echo "=============" provisioning kms status @kms-test BACKEND="rustyvault": echo "๐Ÿงช Testing KMS backend: {{BACKEND}}" echo "====================================" provisioning kms test {{BACKEND}} @kms-test-all: echo "๐Ÿงช Testing All KMS Backends" echo "============================" echo "" echo "Testing RustyVault..." provisioning kms test rustyvault || echo "โŒ RustyVault failed" echo "" echo "Testing Age..." provisioning kms test age || echo "โŒ Age failed" echo "" echo "Testing Vault..." provisioning kms test vault || echo "โŒ Vault failed" echo "" echo "Testing Cosmian..." provisioning kms test cosmian || echo "โŒ Cosmian failed" echo "" echo "Testing AWS KMS..." provisioning kms test aws-kms || echo "โŒ AWS KMS failed" echo "" echo "โœ… Backend testing complete" @kms-switch-backend BACKEND: echo "๐Ÿ”„ Switching to {{BACKEND}} backend..." provisioning config set kms.backend {{BACKEND}} echo "โœ… Default backend changed to {{BACKEND}}" # Key Management # ============================================================================ # Generate AES256 encryption key @kms-generate-key: #!/usr/bin/env bash echo "๐Ÿ”‘ Generating AES256 encryption key..." provisioning kms generate-key --spec AES256 echo "โœ… Key generated" @kms-generate-key-spec SPEC: #!/usr/bin/env bash echo "๐Ÿ”‘ Generating {{SPEC}} key..." provisioning kms generate-key --spec {{SPEC}} echo "โœ… Key generated" @kms-list-keys: echo "๐Ÿ”‘ Encryption Keys" echo "==================" provisioning kms list-keys @kms-key-info KEY_ID: echo "๐Ÿ” Key Information: {{KEY_ID}}" echo "==============================" provisioning kms key-info {{KEY_ID}} @kms-rotate-key KEY_ID: echo "๐Ÿ”„ Rotating key: {{KEY_ID}}..." provisioning kms rotate-key {{KEY_ID}} echo "โœ… Key rotated successfully" @kms-delete-key KEY_ID: #!/usr/bin/env bash echo "๐Ÿ—‘๏ธ Deleting key: {{KEY_ID}}..." read -p "โš ๏ธ This will permanently delete the key. Continue? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then provisioning kms delete-key {{KEY_ID}} echo "โœ… Key deleted" else echo "โŒ Cancelled" fi # Configuration Encryption # ============================================================================ # Encrypt configuration file (YAML/TOML) @encrypt-config FILE: echo "๐Ÿ”’ Encrypting configuration: {{FILE}}..." provisioning config encrypt {{FILE}} echo "โœ… Configuration encrypted" @decrypt-config FILE: echo "๐Ÿ”“ Decrypting configuration: {{FILE}}..." provisioning config decrypt {{FILE}} echo "โœ… Configuration decrypted" @encrypt-config-inplace FILE: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting configuration in-place: {{FILE}}..." provisioning config encrypt {{FILE}} --in-place echo "โœ… Configuration encrypted (original replaced)" @view-encrypted-config FILE: #!/usr/bin/env bash echo "๐Ÿ‘๏ธ Viewing encrypted configuration: {{FILE}}" echo "==============================================" provisioning config decrypt {{FILE}} --stdout # Bulk Operations # ============================================================================ # Encrypt all .env files in directory @encrypt-env-files DIR=".": #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting all .env files in {{DIR}}..." find {{DIR}} -name "*.env" -type f -exec sh -c 'echo "Encrypting {}"; provisioning kms encrypt "{}" --backend rustyvault' \; echo "โœ… All .env files encrypted" @encrypt-configs DIR="config": echo "๐Ÿ”’ Encrypting all configs in {{DIR}}..." find {{DIR}} \( -name "*.yaml" -o -name "*.toml" \) -type f -exec sh -c 'echo "Encrypting {}"; provisioning config encrypt "{}"' \; echo "โœ… All configurations encrypted" @decrypt-all-files DIR: echo "๐Ÿ”“ Decrypting all encrypted files in {{DIR}}..." find {{DIR}} -name "*.enc" -type f -exec sh -c 'echo "Decrypting {}"; provisioning kms decrypt "{}"' \; echo "โœ… All files decrypted" @reencrypt-files DIR BACKEND: #!/usr/bin/env bash echo "๐Ÿ”„ Re-encrypting all files in {{DIR}} with {{BACKEND}}..." echo "โš ๏ธ This will decrypt and re-encrypt all .enc files" read -p "Continue? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then find {{DIR}} -name "*.enc" -type f -exec sh -c 'f="{}"; provisioning kms decrypt "$f" && rm "$f" && provisioning kms encrypt "${f%.enc}" --backend {{BACKEND}}' \; echo "โœ… Re-encryption complete" else echo "โŒ Cancelled" fi # Secrets Management Integration # ============================================================================ # Encrypt secret value @secret-encrypt NAME VALUE: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting secret: {{NAME}}..." echo "{{VALUE}}" | provisioning kms encrypt --backend rustyvault --stdin > "secrets/{{NAME}}.enc" echo "โœ… Secret encrypted: secrets/{{NAME}}.enc" @secret-decrypt NAME: #!/usr/bin/env bash echo "๐Ÿ”“ Decrypting secret: {{NAME}}..." provisioning kms decrypt "secrets/{{NAME}}.enc" --stdout # Advanced Operations # ============================================================================ # Encrypt with envelope encryption (AWS KMS style) @kms-envelope-encrypt FILE: #!/usr/bin/env bash echo "๐Ÿ”’ Encrypting {{FILE}} with envelope encryption..." provisioning kms encrypt {{FILE}} --backend aws-kms --envelope echo "โœ… File encrypted with envelope encryption" @kms-verify FILE: echo "โœ… Verifying encrypted file: {{FILE}}..." provisioning kms verify {{FILE}} @kms-benchmark BACKEND="rustyvault": #!/usr/bin/env bash echo "๐Ÿ“Š Benchmarking {{BACKEND}} backend..." provisioning kms benchmark --backend {{BACKEND}} # Troubleshooting # ============================================================================ # Test KMS connectivity and configuration @kms-test-connectivity: echo "๐Ÿงช Testing KMS Connectivity" echo "============================" echo "" echo "1. Testing RustyVault (local)..." provisioning kms test rustyvault echo "" echo "2. Testing Vault connectivity..." provisioning kms test vault echo "" echo "3. Testing AWS KMS connectivity..." provisioning kms test aws-kms echo "" echo "โœ… Connectivity test complete" @kms-config: echo "โš™๏ธ KMS Configuration" echo "=====================" provisioning config get kms @kms-diagnose: echo "๐Ÿ” KMS Diagnostics" echo "==================" echo "" echo "Current backend:" provisioning config get kms.backend echo "" echo "Backend status:" provisioning kms status echo "" echo "Available backends:" provisioning kms backends echo "" echo "โœ… Diagnostics complete" # Quick Workflows # ============================================================================ # Quick encrypt workflow (encrypt file with default backend) @quick-encrypt FILE: #!/usr/bin/env bash echo "โšก Quick Encrypt: {{FILE}}" provisioning kms encrypt {{FILE}} --backend rustyvault echo "โœ… Done: {{FILE}}.enc" @quick-decrypt FILE: echo "โšก Quick Decrypt: {{FILE}}" provisioning kms decrypt {{FILE}} echo "โœ… Done" @kms-setup: #!/usr/bin/env bash echo "๐Ÿš€ Setting up KMS" echo "=================" echo "" echo "1. Testing backends..." just kms-test-all echo "" echo "2. Generating encryption key..." provisioning kms generate-key --spec AES256 echo "" echo "3. Creating secrets directory..." mkdir -p secrets echo "" echo "โœ… KMS setup complete" echo "" echo "๐Ÿ’ก Next steps:" echo " - Encrypt configs: just encrypt-configs config/" echo " - Encrypt secrets: just secret-encrypt NAME VALUE" # Help # ============================================================================ # Show KMS help @kms-help: echo "๐Ÿ” KMS RECIPES" echo "==============" echo "" echo "๐Ÿ”’ ENCRYPTION OPERATIONS" echo " just kms-encrypt - Encrypt file (RustyVault)" echo " just kms-encrypt-backend - Encrypt with specific backend" echo " just kms-decrypt - Decrypt file" echo " just kms-encrypt-string - Encrypt string inline" echo " just kms-decrypt-string - Decrypt string" echo " just kms-encrypt-context - Encrypt with AAD context" echo "" echo "๐Ÿ”ง BACKEND MANAGEMENT" echo " just kms-backends - List available backends" echo " just kms-status - Show backend status" echo " just kms-test - Test specific backend" echo " just kms-test-all - Test all backends" echo " just kms-switch-backend - Change default backend" echo "" echo "๐Ÿ”‘ KEY MANAGEMENT" echo " just kms-generate-key - Generate AES256 key" echo " just kms-generate-key-spec - Generate key with spec" echo " just kms-list-keys - List encryption keys" echo " just kms-key-info - Show key details" echo " just kms-rotate-key - Rotate encryption key" echo " just kms-delete-key - Delete key (careful!)" echo "" echo "โš™๏ธ CONFIGURATION ENCRYPTION" echo " just encrypt-config - Encrypt config file" echo " just decrypt-config - Decrypt config file" echo " just encrypt-config-inplace - Encrypt in-place" echo " just view-encrypted-config - View without writing" echo "" echo "๐Ÿ“ฆ BULK OPERATIONS" echo " just encrypt-env-files [dir] - Encrypt all .env files" echo " just encrypt-configs [dir] - Encrypt all configs" echo " just decrypt-all-files - Decrypt all .enc files" echo " just reencrypt-files - Re-encrypt with new backend" echo "" echo "๐Ÿ” SECRETS MANAGEMENT" echo " just secret-encrypt - Encrypt secret value" echo " just secret-decrypt - Decrypt and show secret" echo "" echo "๐Ÿš€ QUICK WORKFLOWS" echo " just quick-encrypt - Fast encrypt" echo " just quick-decrypt - Fast decrypt" echo " just kms-setup - Setup KMS for project" echo "" echo "๐Ÿ”ง TROUBLESHOOTING" echo " just kms-test-connectivity - Test backend connectivity" echo " just kms-config - Show configuration" echo " just kms-diagnose - Diagnose issues" echo "" echo "๐Ÿ“š SUPPORTED BACKENDS" echo " โ€ข rustyvault - Fast local encryption (default)" echo " โ€ข age - Age encryption (SOPS)" echo " โ€ข vault - HashiCorp Vault" echo " โ€ข cosmian - Cosmian KMS" echo " โ€ข aws-kms - AWS Key Management Service" echo "" echo "๐Ÿ’ก EXAMPLES" echo " # Encrypt configuration" echo " just encrypt-config config/production.yaml" echo "" echo " # Encrypt with AWS KMS" echo " just kms-encrypt-backend secrets.json aws-kms" echo "" echo " # Bulk encrypt environment files" echo " just encrypt-env-files ." echo "" echo " # Setup KMS for new project" echo " just kms-setup"