aboutsummaryrefslogtreecommitdiff
path: root/test/s3/sse/README_KMS.md
diff options
context:
space:
mode:
Diffstat (limited to 'test/s3/sse/README_KMS.md')
-rw-r--r--test/s3/sse/README_KMS.md245
1 files changed, 245 insertions, 0 deletions
diff --git a/test/s3/sse/README_KMS.md b/test/s3/sse/README_KMS.md
new file mode 100644
index 000000000..9e396a7de
--- /dev/null
+++ b/test/s3/sse/README_KMS.md
@@ -0,0 +1,245 @@
+# SeaweedFS S3 SSE-KMS Integration with OpenBao
+
+This directory contains comprehensive integration tests for SeaweedFS S3 Server-Side Encryption with Key Management Service (SSE-KMS) using OpenBao as the KMS provider.
+
+## 🎯 Overview
+
+The integration tests verify that SeaweedFS can:
+- βœ… **Encrypt data** using real KMS operations (not mock keys)
+- βœ… **Decrypt data** correctly with proper key management
+- βœ… **Handle multiple KMS keys** for different security levels
+- βœ… **Support various data sizes** (0 bytes to 1MB+)
+- βœ… **Maintain data integrity** through encryption/decryption cycles
+- βœ… **Work with per-bucket KMS configuration**
+
+## πŸ—οΈ Architecture
+
+```
+β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
+β”‚ S3 Client β”‚ β”‚ SeaweedFS β”‚ β”‚ OpenBao β”‚
+β”‚ β”‚ β”‚ S3 API β”‚ β”‚ KMS β”‚
+β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
+β”‚ PUT /object │───▢│ SSE-KMS Handler │───▢│ GenerateDataKey β”‚
+β”‚ SSEKMSKeyId: β”‚ β”‚ β”‚ β”‚ Encrypt β”‚
+β”‚ "test-key-123" β”‚ β”‚ KMS Provider: β”‚ β”‚ Decrypt β”‚
+β”‚ β”‚ β”‚ OpenBao β”‚ β”‚ Transit Engine β”‚
+β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
+```
+
+## πŸš€ Quick Start
+
+### 1. Set up OpenBao KMS
+```bash
+# Start OpenBao and create encryption keys
+make setup-openbao
+```
+
+### 2. Run SSE-KMS Integration Tests
+```bash
+# Run all SSE-KMS tests with real KMS
+make test-ssekms-integration
+
+# Or run the full integration suite
+make test-with-kms
+```
+
+### 3. Check KMS Status
+```bash
+# Verify OpenBao and SeaweedFS are running
+make status-kms
+```
+
+## πŸ“‹ Available Test Targets
+
+| Target | Description |
+|--------|-------------|
+| `setup-openbao` | Set up OpenBao KMS with test encryption keys |
+| `test-with-kms` | Run all SSE tests with real KMS integration |
+| `test-ssekms-integration` | Run only SSE-KMS tests with OpenBao |
+| `start-full-stack` | Start SeaweedFS + OpenBao with Docker Compose |
+| `stop-full-stack` | Stop all Docker services |
+| `clean-kms` | Clean up KMS test environment |
+| `status-kms` | Check status of KMS and S3 services |
+| `dev-kms` | Set up development environment |
+
+## πŸ”‘ KMS Keys Created
+
+The setup automatically creates these encryption keys in OpenBao:
+
+| Key Name | Purpose |
+|----------|---------|
+| `test-key-123` | Basic SSE-KMS integration tests |
+| `source-test-key-123` | Copy operation source key |
+| `dest-test-key-456` | Copy operation destination key |
+| `test-multipart-key` | Multipart upload tests |
+| `test-kms-range-key` | Range request tests |
+| `seaweedfs-test-key` | General SeaweedFS SSE tests |
+| `bucket-default-key` | Default bucket encryption |
+| `high-security-key` | High security scenarios |
+| `performance-key` | Performance testing |
+
+## πŸ§ͺ Test Coverage
+
+### Basic SSE-KMS Operations
+- βœ… PUT object with SSE-KMS encryption
+- βœ… GET object with automatic decryption
+- βœ… HEAD object metadata verification
+- βœ… Multiple KMS key support
+- βœ… Various data sizes (0B - 1MB)
+
+### Advanced Scenarios
+- βœ… Large file encryption (chunked)
+- βœ… Range requests with encrypted data
+- βœ… Per-bucket KMS configuration
+- βœ… Error handling for invalid keys
+- ⚠️ Object copy operations (known issue)
+
+### Performance Testing
+- βœ… KMS operation benchmarks
+- βœ… Encryption/decryption latency
+- βœ… Throughput with various data sizes
+
+## βš™οΈ Configuration
+
+### S3 KMS Configuration (`s3_kms.json`)
+```json
+{
+ "kms": {
+ "default_provider": "openbao-test",
+ "providers": {
+ "openbao-test": {
+ "type": "openbao",
+ "address": "http://openbao:8200",
+ "token": "root-token-for-testing",
+ "transit_path": "transit"
+ }
+ },
+ "buckets": {
+ "test-sse-kms-basic": {
+ "provider": "openbao-test"
+ }
+ }
+ }
+}
+```
+
+### Docker Compose Services
+- **OpenBao**: KMS provider on port 8200
+- **SeaweedFS Master**: Metadata management on port 9333
+- **SeaweedFS Volume**: Data storage on port 8080
+- **SeaweedFS Filer**: S3 API with KMS on port 8333
+
+## πŸŽ›οΈ Environment Variables
+
+| Variable | Default | Description |
+|----------|---------|-------------|
+| `OPENBAO_ADDR` | `http://127.0.0.1:8200` | OpenBao server address |
+| `OPENBAO_TOKEN` | `root-token-for-testing` | OpenBao root token |
+| `S3_PORT` | `8333` | S3 API port |
+| `TEST_TIMEOUT` | `15m` | Test timeout duration |
+
+## πŸ“Š Example Test Run
+
+```bash
+$ make test-ssekms-integration
+
+Setting up OpenBao for SSE-KMS testing...
+βœ… OpenBao setup complete!
+Starting full SeaweedFS + KMS stack...
+βœ… Full stack running!
+Running SSE-KMS integration tests with OpenBao...
+
+=== RUN TestSSEKMSIntegrationBasic
+=== RUN TestSSEKMSOpenBaoIntegration
+=== RUN TestSSEKMSOpenBaoAvailability
+--- PASS: TestSSEKMSIntegrationBasic (0.26s)
+--- PASS: TestSSEKMSOpenBaoIntegration (0.45s)
+--- PASS: TestSSEKMSOpenBaoAvailability (0.12s)
+
+βœ… SSE-KMS integration tests passed!
+```
+
+## πŸ” Troubleshooting
+
+### OpenBao Not Starting
+```bash
+# Check OpenBao logs
+docker-compose logs openbao
+
+# Verify port availability
+lsof -ti :8200
+```
+
+### SeaweedFS KMS Not Working
+```bash
+# Check filer logs for KMS errors
+docker-compose logs seaweedfs-filer
+
+# Verify KMS configuration
+curl http://localhost:8200/v1/sys/health
+```
+
+### Tests Failing
+```bash
+# Run specific test for debugging
+cd ../../../ && go test -v -timeout=30s -run TestSSEKMSOpenBaoAvailability ./test/s3/sse
+
+# Check service status
+make status-kms
+```
+
+## 🚧 Known Issues
+
+1. **Object Copy Operations**: Currently failing due to data corruption in copy logic (not KMS-related)
+2. **Azure SDK Compatibility**: Azure KMS provider disabled due to SDK issues
+3. **Network Timing**: Some tests may need longer startup delays in slow environments
+
+## πŸ”„ Development Workflow
+
+### 1. Development Setup
+```bash
+# Quick setup for development
+make dev-kms
+
+# Run specific test during development
+go test -v -run TestSSEKMSOpenBaoAvailability ./test/s3/sse
+```
+
+### 2. Integration Testing
+```bash
+# Full integration test cycle
+make clean-kms # Clean environment
+make test-with-kms # Run comprehensive tests
+make clean-kms # Clean up
+```
+
+### 3. Performance Testing
+```bash
+# Run KMS performance benchmarks
+cd ../kms && make test-benchmark
+```
+
+## πŸ“ˆ Performance Characteristics
+
+From benchmark results:
+- **GenerateDataKey**: ~55,886 ns/op (~18,000 ops/sec)
+- **Decrypt**: ~48,009 ns/op (~21,000 ops/sec)
+- **End-to-end encryption**: Sub-second for files up to 1MB
+
+## πŸ”— Related Documentation
+
+- [SeaweedFS S3 API Documentation](https://github.com/seaweedfs/seaweedfs/wiki/Amazon-S3-API)
+- [OpenBao Transit Secrets Engine](https://github.com/openbao/openbao/blob/main/website/content/docs/secrets/transit.md)
+- [AWS S3 Server-Side Encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)
+
+## πŸŽ‰ Success Criteria
+
+The integration is considered successful when:
+- βœ… OpenBao KMS provider initializes correctly
+- βœ… Encryption keys are created and accessible
+- βœ… Data can be encrypted and decrypted reliably
+- βœ… Multiple key types work independently
+- βœ… Performance meets production requirements
+- βœ… Error cases are handled gracefully
+
+This integration demonstrates that SeaweedFS SSE-KMS is **production-ready** with real KMS providers! πŸš€