Caution
Not an Official Okta Product - This is an independent community project and is not an official Okta product. Use at your own risk and always test in a non-production environment first.
Small Debian-based container images with Okta Privileged Access ScaleFT packages preinstalled.
This repository publishes reusable images for automation and lab use. OPA Workloads is one useful example for the client image, but the images are generic and can support other CI/CD, scripting, and operational workflows.
No OPA credentials, API keys, enrollment tokens, team configuration, or workload tokens are baked into these images.
| Image | Dockerfile | Package | Use case |
|---|---|---|---|
ghcr.io/fabiograsso/opa-scaleft-client |
Dockerfile.client |
scaleft-client-tools |
CI/CD automation, Workloads, sft CLI operations, SSH smoke tests |
ghcr.io/fabiograsso/opa-scaleft-gateway |
Dockerfile.gateway |
scaleft-gateway |
Lab or automation base image for OPA gateway package experiments |
Each image is published with:
latest
<package-version>
Example tags:
ghcr.io/fabiograsso/opa-scaleft-client:latest
ghcr.io/fabiograsso/opa-scaleft-client:1.108.0
ghcr.io/fabiograsso/opa-scaleft-gateway:latest
ghcr.io/fabiograsso/opa-scaleft-gateway:1.108.0
Both images use debian:12-slim and the stable Okta PAM apt repository for Debian 12 bookworm.
The client image includes:
- Okta Privileged Access
scaleft-client-tools bashcurljq- OpenSSH client
scriptfromutil-linux, useful when a non-interactive runner needs a pseudo-terminal
The gateway image includes:
- Okta Privileged Access
scaleft-gateway bashcurljqscriptfromutil-linux
The gateway image is intentionally unconfigured. It does not include enrollment tokens, labels, tenant settings, or runtime secrets.
Mount /etc/sft/ when you need to provide client-side configuration to the sft CLI:
docker run --rm \
-v "$PWD/sft-config:/etc/sft" \
ghcr.io/fabiograsso/opa-scaleft-client:latest \
sft --versionFor gateway experiments, mount /etc/sft/ so the container can read the gateway configuration file:
/etc/sft/sft-gatewayd.yaml
For the setup token, use one of these options:
- mount the setup token file read-only at
/var/lib/sft-gatewayd/setup.token - or set
SetupTokendirectly in/etc/sft/sft-gatewayd.yaml
Example volume layout:
docker run --rm \
-v "$PWD/sft-config:/etc/sft" \
-v "$PWD/setup.token:/var/lib/sft-gatewayd/setup.token:ro" \
ghcr.io/fabiograsso/opa-scaleft-gateway:latest \
bashOkta documents SetupTokenFile as the recommended method, with /var/lib/sft-gatewayd/setup.token as the Linux default. If SetupToken is also configured in the YAML file, the gateway uses the token specified there.
The repository includes one GitHub Actions workflow:
.github/workflows/publish.yml
It runs on:
- manual dispatch
- push to
mainwhenDockerfile.client,Dockerfile.gateway, or the publish workflow changes - a weekly schedule, every Monday at 06:00 UTC
The workflow uses the built-in GITHUB_TOKEN, so no personal access token is required for publishing from this repository.
Required workflow permissions:
permissions:
contents: read
packages: writeFor each image, scheduled runs read the Debian Packages metadata from the Okta PAM apt repository before building. The workflow extracts all versions for the target package, selects the latest with version-aware sorting, and checks GHCR for the matching tag. If the tag already exists, that image is skipped. If the tag is new, the workflow builds the image, runs a smoke test, and publishes both latest and the version tag.
The first push creates GitHub Container Registry packages. GHCR packages are private by default when first published. You can later change visibility or grant repository access from the package settings.
For workflows in a repository that can read the package:
jobs:
automation:
runs-on: ubuntu-24.04
container:
image: ghcr.io/fabiograsso/opa-scaleft-client:latest
permissions:
contents: read
packages: read
steps:
- name: Check sft
run: sft --versionIf the package is private and used from another repository, grant that repository access in:
Package settings -> Manage Actions access
The client image can be used by a GitHub Actions workflow that obtains a GitHub OIDC token, exchanges it with OPA Workloads using sft wl authenticate, and then performs automation such as:
sft secrets reveal --path production_server_secrets --name MySql_rootor:
script -q -e -c "sft ssh 'opa-linux-target' --command 'hostname && uname -a && whoami'" /dev/nullKeep workload tokens short-lived and avoid printing raw tokens in production logs.
For a complete GitHub Actions lab that demonstrates OPA Workloads with secret reveal and SSH smoke tests, see:
https://github.com/fabiograsso/okta-lab-workloads
docker build -f Dockerfile.client -t opa-scaleft-client:local .
docker run --rm opa-scaleft-client:local sft --version
docker build -f Dockerfile.gateway -t opa-scaleft-gateway:local .
docker run --rm opa-scaleft-gateway:local dpkg -l scaleft-gateway