You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.8 KiB
146 lines
4.8 KiB
#!/bin/bash
|
|
|
|
# Setup OpenBao for SSE Integration Testing
|
|
# This script configures OpenBao with encryption keys for S3 SSE testing
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
OPENBAO_ADDR="${OPENBAO_ADDR:-http://127.0.0.1:8200}"
|
|
OPENBAO_TOKEN="${OPENBAO_TOKEN:-root-token-for-testing}"
|
|
TRANSIT_PATH="${TRANSIT_PATH:-transit}"
|
|
|
|
echo "🚀 Setting up OpenBao for S3 SSE integration testing..."
|
|
echo "OpenBao Address: $OPENBAO_ADDR"
|
|
echo "Transit Path: $TRANSIT_PATH"
|
|
|
|
# Export for API calls
|
|
export VAULT_ADDR="$OPENBAO_ADDR"
|
|
export VAULT_TOKEN="$OPENBAO_TOKEN"
|
|
|
|
# Wait for OpenBao to be ready
|
|
echo "⏳ Waiting for OpenBao to be ready..."
|
|
for i in {1..30}; do
|
|
if curl -s "$OPENBAO_ADDR/v1/sys/health" > /dev/null 2>&1; then
|
|
echo "✅ OpenBao is ready!"
|
|
break
|
|
fi
|
|
if [ $i -eq 30 ]; then
|
|
echo "❌ OpenBao failed to start within 60 seconds"
|
|
exit 1
|
|
fi
|
|
sleep 2
|
|
done
|
|
|
|
# Enable transit secrets engine (ignore error if already enabled)
|
|
echo "🔧 Setting up transit secrets engine..."
|
|
curl -s -X POST \
|
|
-H "X-Vault-Token: $OPENBAO_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"type\":\"transit\"}" \
|
|
"$OPENBAO_ADDR/v1/sys/mounts/$TRANSIT_PATH" || echo "Transit engine may already be enabled"
|
|
|
|
# Create encryption keys for S3 SSE testing
|
|
echo "🔑 Creating encryption keys for SSE testing..."
|
|
|
|
# Test keys that match the existing test expectations
|
|
declare -a keys=(
|
|
"test-key-123:SSE-KMS basic integration test key"
|
|
"source-test-key-123:SSE-KMS copy source key"
|
|
"dest-test-key-456:SSE-KMS copy destination key"
|
|
"test-multipart-key:SSE-KMS multipart upload test key"
|
|
"invalid-test-key:SSE-KMS error testing key"
|
|
"test-kms-range-key:SSE-KMS range request test key"
|
|
"seaweedfs-test-key:General SeaweedFS SSE test key"
|
|
"bucket-default-key:Default bucket encryption key"
|
|
"high-security-key:High security encryption key"
|
|
"performance-key:Performance testing key"
|
|
)
|
|
|
|
for key_info in "${keys[@]}"; do
|
|
IFS=':' read -r key_name description <<< "$key_info"
|
|
echo " Creating key: $key_name ($description)"
|
|
|
|
# Create key
|
|
response=$(curl -s -X POST \
|
|
-H "X-Vault-Token: $OPENBAO_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"type\":\"aes256-gcm96\",\"description\":\"$description\"}" \
|
|
"$OPENBAO_ADDR/v1/$TRANSIT_PATH/keys/$key_name")
|
|
|
|
if echo "$response" | grep -q "errors"; then
|
|
echo " Warning: $response"
|
|
fi
|
|
|
|
# Verify key was created
|
|
verify_response=$(curl -s \
|
|
-H "X-Vault-Token: $OPENBAO_TOKEN" \
|
|
"$OPENBAO_ADDR/v1/$TRANSIT_PATH/keys/$key_name")
|
|
|
|
if echo "$verify_response" | grep -q "\"name\":\"$key_name\""; then
|
|
echo " ✅ Key $key_name created successfully"
|
|
else
|
|
echo " ❌ Failed to verify key $key_name"
|
|
echo " Response: $verify_response"
|
|
fi
|
|
done
|
|
|
|
# Test basic encryption/decryption functionality
|
|
echo "🧪 Testing basic encryption/decryption..."
|
|
test_plaintext="Hello, SeaweedFS SSE Integration!"
|
|
test_key="test-key-123"
|
|
|
|
# Encrypt
|
|
encrypt_response=$(curl -s -X POST \
|
|
-H "X-Vault-Token: $OPENBAO_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"plaintext\":\"$(echo -n "$test_plaintext" | base64)\"}" \
|
|
"$OPENBAO_ADDR/v1/$TRANSIT_PATH/encrypt/$test_key")
|
|
|
|
if echo "$encrypt_response" | grep -q "ciphertext"; then
|
|
ciphertext=$(echo "$encrypt_response" | grep -o '"ciphertext":"[^"]*"' | cut -d'"' -f4)
|
|
echo " ✅ Encryption successful: ${ciphertext:0:50}..."
|
|
|
|
# Decrypt to verify
|
|
decrypt_response=$(curl -s -X POST \
|
|
-H "X-Vault-Token: $OPENBAO_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"ciphertext\":\"$ciphertext\"}" \
|
|
"$OPENBAO_ADDR/v1/$TRANSIT_PATH/decrypt/$test_key")
|
|
|
|
if echo "$decrypt_response" | grep -q "plaintext"; then
|
|
decrypted_b64=$(echo "$decrypt_response" | grep -o '"plaintext":"[^"]*"' | cut -d'"' -f4)
|
|
decrypted=$(echo "$decrypted_b64" | base64 -d)
|
|
if [ "$decrypted" = "$test_plaintext" ]; then
|
|
echo " ✅ Decryption successful: $decrypted"
|
|
else
|
|
echo " ❌ Decryption failed: expected '$test_plaintext', got '$decrypted'"
|
|
fi
|
|
else
|
|
echo " ❌ Decryption failed: $decrypt_response"
|
|
fi
|
|
else
|
|
echo " ❌ Encryption failed: $encrypt_response"
|
|
fi
|
|
|
|
echo ""
|
|
echo "📊 OpenBao SSE setup summary:"
|
|
echo " Address: $OPENBAO_ADDR"
|
|
echo " Transit Path: $TRANSIT_PATH"
|
|
echo " Keys Created: ${#keys[@]}"
|
|
echo " Status: Ready for S3 SSE integration testing"
|
|
echo ""
|
|
echo "🎯 Ready to run S3 SSE integration tests!"
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " # Run with Docker Compose"
|
|
echo " make test-with-kms"
|
|
echo ""
|
|
echo " # Run specific test suites"
|
|
echo " make test-ssekms-integration"
|
|
echo ""
|
|
echo " # Check status"
|
|
echo " curl $OPENBAO_ADDR/v1/sys/health"
|
|
echo ""
|
|
|
|
echo "✅ OpenBao SSE setup complete!"
|