You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This change enables users to deploy Rekor v2 on AWS infrastructure.
The implementation uses AWS S3 for object storage and Aurora MySQL
(or RDS MySQL) for database operations.
The AWS backend includes:
- S3 storage with support for S3-compatible services (e.g., MinIO)
- Aurora MySQL/RDS MySQL for sequencing and deduplication
- Docker Compose configuration for local development
- Table-driven e2e tests supporting multiple backend configurations
- Updated freeze-checkpoint tool to work with S3
All existing GCP backend functionality remains unchanged.
Resolves: #572
Signed-off-by: James Carnegie <[email protected]>
-`AWS_S3_FORCE_PATH_STYLE`: Set to `true` to use path-style addressing instead of virtual-hosted-style
124
+
125
+
The `--aws-mysql-dsn` format is `user:password@tcp(host:port)/database?parseTime=true`. The `parseTime=true` parameter is required for proper timestamp handling.
126
+
127
+
Optional flags for both backends:
128
+
-`--persistent-antispam`: Enable persistent deduplication (requires Spanner or MySQL)
129
+
-`--checkpoint-interval`: Frequency of checkpoint publishing (default: 30s)
130
+
-`--batch-max-size`: Maximum entries per batch (default: 1024)
131
+
132
+
See `rekor-server serve --help` for all available options.
133
+
70
134
### Making a request
71
135
72
136
Follow the [client documentation](https://github.com/sigstore/rekor-tiles/blob/main/CLIENTS.md#rekor-v2-the-bash-way)
Long: `Add an extension line to the final checkpoint to indicate to consumers that no more checkpoints are going to be published. Only supported for GCP.`,
53
+
Long: `Add an extension line to the final checkpoint to indicate to consumers that no more checkpoints are going to be published. Supports both GCP (GCS) and AWS (S3) backends.`,
52
54
Run: func(cmd*cobra.Command, _ []string) {
53
55
ctx:=cmd.Context()
54
56
55
-
ifviper.GetString("gcp-bucket") =="" {
56
-
slog.Error("must provide --gcs-bucket")
57
+
gcpBucket:=viper.GetString("gcp-bucket")
58
+
awsBucket:=viper.GetString("aws-bucket")
59
+
60
+
ifgcpBucket==""&&awsBucket=="" {
61
+
slog.Error("must provide either --gcp-bucket or --aws-bucket")
62
+
os.Exit(1)
63
+
}
64
+
ifgcpBucket!=""&&awsBucket!="" {
65
+
slog.Error("cannot provide both --gcp-bucket and --aws-bucket")
serveCmd.Flags().String("aws-bucket", "", "S3 bucket for tile and checkpoint storage")
223
+
serveCmd.Flags().String("aws-mysql-dsn", "", "MySQL DSN for Aurora/RDS (e.g., user:pass@tcp(host:3306)/dbname)")
224
+
219
225
// checkpoint signing configs
220
226
serveCmd.Flags().String("signer-filepath", "", "path to the signing key")
221
227
serveCmd.Flags().String("signer-password", "", "password to decrypt the signing key")
@@ -234,7 +240,7 @@ func init() {
234
240
serveCmd.Flags().Duration("tlog-timeout", 30*time.Second, "timeout for terminating the tiles log queue")
235
241
236
242
// antispam configs
237
-
serveCmd.Flags().Bool("persistent-antispam", false, "whether to enable persistent antispam measures; only available for GCP storage backend and not supported by the Spanner storage emulator")
243
+
serveCmd.Flags().Bool("persistent-antispam", false, "whether to enable persistent antispam measures; available for GCP (Spanner) and AWS (MySQL) storage backends; not supported by the Spanner storage emulator")
238
244
serveCmd.Flags().Uint("antispam-max-batch-size", 0, "maximum batch size for deduplication operations; will default to Tessera recommendation if unset; for Spanner, recommend around 1500 with 300 or more PU, or around 64 for smaller (e.g. 100 PU) instances")
239
245
serveCmd.Flags().Uint("antispam-pushback-threshold", 0, "maximum number of 'in-flight' add requests the antispam operator will allow before pushing back; will default to Tessera recommendation if unset")
0 commit comments