Releases: fayrus/syncret
Releases · fayrus/syncret
Release list
v0.4.0
Added
SYNCRET_INSTANCE_NAME— optional human-readable label for the deployment, shown in notification headers (e.g.,*Syncret — Production*). Must be a single line of at most 64 characters.SYNCRET_TIMEZONE— optional IANA timezone for notification timestamps (e.g.,America/New_York). Defaults toUTC. Invalid zones fail at startup. Timezone data is embedded in the binary viatime/tzdatafor Lambda environments.- Enriched GChat notifications — messages now include AWS account ID, region, source and target secret names (extracted from ARNs), ECS cluster and services, Lambda request ID, and a localized timestamp. Each pipeline stage (target secret update, ECS force-deployment) is reported individually with its outcome (succeeded, failed, skipped, or not attempted). Errors shown in notifications are sanitized; raw details remain in CloudWatch Logs.
v0.3.0
Added
- Google Chat notifications — optional
SYNCRET_GCHAT_WEBHOOKvariable. When set, Syncret sends a notification after every execution (success and failure) with the event type, secret ARN, actions taken, status, and error message on failure. Notification failures are logged as warnings and do not affect the Lambda return value.
v0.2.0
Added
SYNCRET_PROVIDER— required variable that selects the cloud provider. Currently onlyawsis supported; unsupported values fail at startup.
Changed
- Breaking: environment variable renames — all provider-specific variables now carry an explicit cloud prefix to clearly separate provider namespaces:
SYNCRET_SECRET_ARN→SYNCRET_AWS_SECRET_ARNSYNCRET_TARGET_SECRET_ARN→SYNCRET_AWS_TARGET_SECRET_ARNSYNCRET_ECS_FORCE_DEPLOY→SYNCRET_AWS_ECS_FORCE_DEPLOYSYNCRET_ECS_CLUSTER→SYNCRET_AWS_ECS_CLUSTERSYNCRET_ECS_SERVICES→SYNCRET_AWS_ECS_SERVICESSYNCRET_TARGET_SECRET_KEYS,SYNCRET_AWS_REGION,SYNCRET_LOG_LEVEL,SYNCRET_LOG_FORMAT— unchanged
- Documentation restructure — docs are now cloud-agnostic at the top level; provider-specific content lives under
Deployment — AWS;Configurationpage renamed toReferencewith sections per provider
v0.1.0
Added
- Lambda handler triggered by EventBridge CloudTrail rules scoped to
aws.secretsmanagerevents - Event parsing for three event names, with ARN extraction per event type:
RotationSucceeded— ARN read fromdetail.additionalEventData.SecretIdPutSecretValue— ARN read fromdetail.requestParameters.secretIdRotationFailed— logs a warning and exits cleanly; no AWS calls are made
- Event source guard — rejects payloads with an unexpected
sourceoreventSourcebefore any AWS API call - ARN guard — rejects events whose secret ARN does not match
SYNCRET_SECRET_ARN - Target secret update — reads the source secret and merges selected fields into a target secret (
SYNCRET_TARGET_SECRET_ARN,SYNCRET_TARGET_SECRET_KEYS); key specs supportsrc:dstremapping (e.g.,password:DB_PASS); optional when ECS force deployment is configured - Idempotent secret writes —
ClientRequestTokenis a UUID derived via SHA-256 from the target secret's currentVersionId, so concurrent invocations processing the same rotation event produce the same token and the second write is a no-op - ECS force-new-deployment — calls
UpdateServicewithForceNewDeployment=truefor each service inSYNCRET_ECS_SERVICES;DescribeServicesis batched in groups of 10 to respect the AWS API limit; inactive services are skipped with a warning; services not found in the cluster return an error; optional when target secret update is configured - Startup validation — fails fast if
SYNCRET_SECRET_ARNorSYNCRET_AWS_REGIONare missing, ifSYNCRET_TARGET_SECRET_ARNis set withoutSYNCRET_TARGET_SECRET_KEYS, or if neither flow is configured - Structured logging via
log/slog;request_id(LambdaAwsRequestID) is attached to every log line; level and format are configurable viaSYNCRET_LOG_LEVEL(debug/info/warn/error, default: info) andSYNCRET_LOG_FORMAT(json/text, default: json); invalid values fail at startup - Chainguard static base image —
cgr.dev/chainguard/static; no shell, no package manager, minimal attack surface - Multi-arch container — supports
linux/amd64andlinux/arm64; ARM64 (Graviton) preferred for lower cost and better performance-per-watt - Build-time version embedding — version string injected via
-ldflagsand logged at startup