AWS outbound identity federation — sign outbound HTTP requests with short-lived JWTs from AWS STS.
1.5K
aws-outbound-jwt-proxy is published as a multi-architecture container image on every GitHub Release.
The proxy implements AWS outbound identity federation. Instead of applications managing long-term API keys or passwords for third-party services, the proxy obtains a short-lived JSON Web Token from AWS STS on the workload's behalf and injects it into outgoing requests. The external service verifies the JWT against AWS's public OIDC discovery keys (signature, expiration, audience, and subject) before granting access. Token acquisition, caching, and renewal are transparent to the application.
See the project overview for the full picture.
The same image is pushed to two registries under identical tags:
docker.io/gp42/aws-outbound-jwt-proxyghcr.io/gp42/aws-outbound-jwt-proxyEither works. GHCR has no anonymous pull rate limits; Docker Hub is the default for most tooling.
docker pull gp42/aws-outbound-jwt-proxy:latest
docker run --rm \
-p 8080:8080 \
-e UPSTREAM_HOST=api.example.com \
-e UPSTREAM_SCHEME=https \
-e TOKEN_AUDIENCE=https://api.example.com \
gp42/aws-outbound-jwt-proxy:latest
All proxy flags can also be set via environment variables - see the Configuration reference.
Each tag resolves to a multi-arch manifest list covering:
linux/amd64linux/arm64darwin images are not published - use the binary release for macOS.
Tags pushed for each release are derived from the release kind:
| Release kind | Tags pushed |
|---|---|
Stable release vX.Y.Z | vX.Y.Z, vX.Y, vX, latest |
Prerelease vX.Y.Z-rc.N | vX.Y.Z-rc.N only |
Prereleases never move floating tags (latest, vX, vX.Y). Pin to vX.Y.Z for reproducible deployments; pin to vX.Y to track patch updates only; latest always points at the most recent stable release on both registries.
gcr.io/distroless/static-debian13:nonroot (pinned by digest in the Dockerfile). No shell, no package manager, minimal attack surface.65532 (nonroot). The container does not require root and cannot escalate./usr/local/bin/aws-outbound-jwt-proxy.LISTEN_ADDR / --listen-addr. Map the host port accordingly.Each image carries the following org.opencontainers.image.* labels:
| Label | Value |
|---|---|
org.opencontainers.image.title | aws-outbound-jwt-proxy |
org.opencontainers.image.version | the release tag, e.g. v1.4.2 |
org.opencontainers.image.revision | the git commit SHA the image was built from |
org.opencontainers.image.source | https://github.com/gp42/aws-outbound-jwt-proxy |
org.opencontainers.image.licenses | MIT |
Inspect with:
docker inspect --format '{{json .Config.Labels}}' gp42/aws-outbound-jwt-proxy:vX.Y.Z | jq
docker job builds and pushes images using the same binaries that are attached to the GitHub Release.Content type
Image
Digest
sha256:bd57cc84c…
Size
6.7 MB
Last updated
2 months ago
docker pull gp42/aws-outbound-jwt-proxy