Cipher โ€” distributed Secret Rotation Service

โš“ Rust    ๐Ÿ“… 2026-04-09    ๐Ÿ‘ค surdeus    ๐Ÿ‘๏ธ 5      

surdeus

Hi everyone,

I'd appreciate a code review of my project Cipher โ€” a distributed Secret Rotation Service built as a capstone project for RustCamp UA certification.

Repo: GitHub - misikdmytro/cipher ยท GitHub
PR with full implementation: cipher by misikdmytro ยท Pull Request #1 ยท misikdmytro/cipher ยท GitHub

What it does

Cipher automates rotation of secrets stored in AWS Secrets Manager. It's split into 4 services in a Cargo workspace:

  • API โ€” HTTP REST (Actix-web), owns secrets metadata & webhook CRUD
  • Scheduler โ€” orchestrates rotation schedules, publishes events via RabbitMQ
  • Rotator โ€” stateless worker, executes actual rotation against AWS (blue/green strategy), publishes status events
  • Notificator โ€” consumes rotation events, delivers webhook notifications

Services talk to each other over gRPC (sync) and RabbitMQ/AMQP (async events). PostgreSQL via sqlx for persistence.

Stack / crates

Actix-web, tonic (gRPC + protobuf), sqlx (Postgres), lapin (RabbitMQ), AWS SDK, tokio, tracing, utoipa (OpenAPI docs).

What I'm looking for feedback on

  1. Overall architecture โ€” does the service decomposition and communication pattern (gRPC + AMQP) make sense? Anything over-engineered or missing?
  2. Idiomatic Rust โ€” trait usage, error handling, module structure, anything that smells off
  3. Domain modeling โ€” the domain crate, how types and boundaries are defined
  4. Async patterns โ€” task spawning, graceful shutdown, RabbitMQ consumer lifecycle
  5. Testing approach โ€” integration test setup, mocking strategies

This is a learning project, so don't hold back โ€” blunt feedback is welcome.

Thanks!

1 post - 1 participant

Read full topic

๐Ÿท๏ธ Rust_feed