setup_openbao_sse.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/bin/bash
  2. # Setup OpenBao for SSE Integration Testing
  3. # This script configures OpenBao with encryption keys for S3 SSE testing
  4. set -e
  5. # Configuration
  6. OPENBAO_ADDR="${OPENBAO_ADDR:-http://127.0.0.1:8200}"
  7. OPENBAO_TOKEN="${OPENBAO_TOKEN:-root-token-for-testing}"
  8. TRANSIT_PATH="${TRANSIT_PATH:-transit}"
  9. echo "🚀 Setting up OpenBao for S3 SSE integration testing..."
  10. echo "OpenBao Address: $OPENBAO_ADDR"
  11. echo "Transit Path: $TRANSIT_PATH"
  12. # Export for API calls
  13. export VAULT_ADDR="$OPENBAO_ADDR"
  14. export VAULT_TOKEN="$OPENBAO_TOKEN"
  15. # Wait for OpenBao to be ready
  16. echo "⏳ Waiting for OpenBao to be ready..."
  17. for i in {1..30}; do
  18. if curl -s "$OPENBAO_ADDR/v1/sys/health" > /dev/null 2>&1; then
  19. echo "✅ OpenBao is ready!"
  20. break
  21. fi
  22. if [ $i -eq 30 ]; then
  23. echo "❌ OpenBao failed to start within 60 seconds"
  24. exit 1
  25. fi
  26. sleep 2
  27. done
  28. # Enable transit secrets engine (ignore error if already enabled)
  29. echo "🔧 Setting up transit secrets engine..."
  30. curl -s -X POST \
  31. -H "X-Vault-Token: $OPENBAO_TOKEN" \
  32. -H "Content-Type: application/json" \
  33. -d "{\"type\":\"transit\"}" \
  34. "$OPENBAO_ADDR/v1/sys/mounts/$TRANSIT_PATH" || echo "Transit engine may already be enabled"
  35. # Create encryption keys for S3 SSE testing
  36. echo "🔑 Creating encryption keys for SSE testing..."
  37. # Test keys that match the existing test expectations
  38. declare -a keys=(
  39. "test-key-123:SSE-KMS basic integration test key"
  40. "source-test-key-123:SSE-KMS copy source key"
  41. "dest-test-key-456:SSE-KMS copy destination key"
  42. "test-multipart-key:SSE-KMS multipart upload test key"
  43. "invalid-test-key:SSE-KMS error testing key"
  44. "test-kms-range-key:SSE-KMS range request test key"
  45. "seaweedfs-test-key:General SeaweedFS SSE test key"
  46. "bucket-default-key:Default bucket encryption key"
  47. "high-security-key:High security encryption key"
  48. "performance-key:Performance testing key"
  49. )
  50. for key_info in "${keys[@]}"; do
  51. IFS=':' read -r key_name description <<< "$key_info"
  52. echo " Creating key: $key_name ($description)"
  53. # Create key
  54. response=$(curl -s -X POST \
  55. -H "X-Vault-Token: $OPENBAO_TOKEN" \
  56. -H "Content-Type: application/json" \
  57. -d "{\"type\":\"aes256-gcm96\",\"description\":\"$description\"}" \
  58. "$OPENBAO_ADDR/v1/$TRANSIT_PATH/keys/$key_name")
  59. if echo "$response" | grep -q "errors"; then
  60. echo " Warning: $response"
  61. fi
  62. # Verify key was created
  63. verify_response=$(curl -s \
  64. -H "X-Vault-Token: $OPENBAO_TOKEN" \
  65. "$OPENBAO_ADDR/v1/$TRANSIT_PATH/keys/$key_name")
  66. if echo "$verify_response" | grep -q "\"name\":\"$key_name\""; then
  67. echo " ✅ Key $key_name created successfully"
  68. else
  69. echo " ❌ Failed to verify key $key_name"
  70. echo " Response: $verify_response"
  71. fi
  72. done
  73. # Test basic encryption/decryption functionality
  74. echo "🧪 Testing basic encryption/decryption..."
  75. test_plaintext="Hello, SeaweedFS SSE Integration!"
  76. test_key="test-key-123"
  77. # Encrypt
  78. encrypt_response=$(curl -s -X POST \
  79. -H "X-Vault-Token: $OPENBAO_TOKEN" \
  80. -H "Content-Type: application/json" \
  81. -d "{\"plaintext\":\"$(echo -n "$test_plaintext" | base64)\"}" \
  82. "$OPENBAO_ADDR/v1/$TRANSIT_PATH/encrypt/$test_key")
  83. if echo "$encrypt_response" | grep -q "ciphertext"; then
  84. ciphertext=$(echo "$encrypt_response" | grep -o '"ciphertext":"[^"]*"' | cut -d'"' -f4)
  85. echo " ✅ Encryption successful: ${ciphertext:0:50}..."
  86. # Decrypt to verify
  87. decrypt_response=$(curl -s -X POST \
  88. -H "X-Vault-Token: $OPENBAO_TOKEN" \
  89. -H "Content-Type: application/json" \
  90. -d "{\"ciphertext\":\"$ciphertext\"}" \
  91. "$OPENBAO_ADDR/v1/$TRANSIT_PATH/decrypt/$test_key")
  92. if echo "$decrypt_response" | grep -q "plaintext"; then
  93. decrypted_b64=$(echo "$decrypt_response" | grep -o '"plaintext":"[^"]*"' | cut -d'"' -f4)
  94. decrypted=$(echo "$decrypted_b64" | base64 -d)
  95. if [ "$decrypted" = "$test_plaintext" ]; then
  96. echo " ✅ Decryption successful: $decrypted"
  97. else
  98. echo " ❌ Decryption failed: expected '$test_plaintext', got '$decrypted'"
  99. fi
  100. else
  101. echo " ❌ Decryption failed: $decrypt_response"
  102. fi
  103. else
  104. echo " ❌ Encryption failed: $encrypt_response"
  105. fi
  106. echo ""
  107. echo "📊 OpenBao SSE setup summary:"
  108. echo " Address: $OPENBAO_ADDR"
  109. echo " Transit Path: $TRANSIT_PATH"
  110. echo " Keys Created: ${#keys[@]}"
  111. echo " Status: Ready for S3 SSE integration testing"
  112. echo ""
  113. echo "🎯 Ready to run S3 SSE integration tests!"
  114. echo ""
  115. echo "Usage:"
  116. echo " # Run with Docker Compose"
  117. echo " make test-with-kms"
  118. echo ""
  119. echo " # Run specific test suites"
  120. echo " make test-ssekms-integration"
  121. echo ""
  122. echo " # Check status"
  123. echo " curl $OPENBAO_ADDR/v1/sys/health"
  124. echo ""
  125. echo "✅ OpenBao SSE setup complete!"