Skip to content

Repository files navigation

Syncret

Syncret reacts to secret rotation and change events and automates two follow-up actions: propagating selected fields into a dependent secret, and forcing running services to restart with the latest values.

It ships as a minimal container image and runs as a serverless function triggered by your cloud provider's event system.


The problem

When a secret rotates or changes, dependent secrets and running services need to react. Most teams solve this with untested, one-off glue code that never gets reused. Syncret standardizes that pattern into a single, configurable binary that covers the two most common follow-up actions.


How it works

flowchart LR
S["Secret store\n(secret rotates or changes)"]
E["Event system\n(change notification)"]
Sy[Syncret]
TS["Propagate to\ndependent secret\n— optional —"]
CS["Restart\ndependent services\n— optional —"]
S --> E --> Sy
Sy --> TS
Sy --> CS
Loading

At least one of the two actions must be configured — they can also run together.

See How it works for the full design.


Provider support

ProviderSecret storeEvent triggerCompute
AWSSecrets ManagerEventBridge (CloudTrail)ECS
AzureKey VaultEvent GridContainer Apps / ACI
GCPSecret ManagerPub/SubCloud Run

Azure and GCP support is planned. Contributions welcome.


Quickstart — AWS

Set environment variables on your Lambda function and deploy the container image.

SYNCRET_PROVIDER=aws
# Required — identifies which secret triggers Syncret
SYNCRET_AWS_SECRET_ARN=arn:aws:secretsmanager:us-east-1:123456789012:secret:my-secret-AbCdEf
SYNCRET_AWS_REGION=us-east-1
# Action 1 — propagate fields to a dependent secret (optional)
SYNCRET_AWS_TARGET_SECRET_ARN=arn:aws:secretsmanager:us-east-1:123456789012:secret:my-app-secret-XyZaBc
SYNCRET_TARGET_SECRET_KEYS=password # or: password:DB_PASS (src:dst remapping)# Action 2 — restart ECS services (optional)
SYNCRET_AWS_ECS_FORCE_DEPLOY=true
SYNCRET_AWS_ECS_CLUSTER=my-cluster
SYNCRET_AWS_ECS_SERVICES=backend,worker
# Notification context (optional)
SYNCRET_INSTANCE_NAME="V4 Production"
SYNCRET_TIMEZONE=America/Lima
SYNCRET_GCHAT_WEBHOOK="https://chat.googleapis.com/v1/spaces/SPACE/messages?key=KEY&token=TOKEN"

At least one action (SYNCRET_AWS_TARGET_SECRET_ARN or SYNCRET_AWS_ECS_FORCE_DEPLOY=true) must be set or Syncret will refuse to start.

Full reference
Step-by-step deployment guide


Building from source

make build # build binary (output: bin/syncret)
make test# run tests with race detector
make cover # run tests and show per-function coverage breakdown
make lint # run golangci-lint
make tidy # go mod tidy
make docker-build # build multi-arch image (linux/amd64 + linux/arm64)

Requires Go 1.27+.


License

Apache 2.0 — see LICENSE.

About

Lambda container that reacts to secret rotation and change events to propagate credentials and restart ECS services.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages