fayrus/syncret

Sponsored OSS

By Fayrus

Updated 15 days ago

Reacts to secret rotation events to sync credentials and force ECS service redeployments.

Image
Networking
Security
0

591

fayrus/syncret repository overview

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

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.26+.


License

Apache 2.0 — see LICENSE.

Tag summary

Content type

Image

Digest

sha256:82ab36b49

Size

6.1 MB

Last updated

15 days ago

docker pull fayrus/syncret:v0

This week's pulls

Pulls:

128

Last week