Non-root containers
All Flyte core components (FlyteAdmin, FlytePropeller, DataCatalog, FlyteConsole) run as non-root users. A dedicated system user and group are created in each component’s Dockerfile and specified via the KubernetessecurityContext.
Running as non-root is considered best practice because:
- It prevents malicious code from using root host permissions
- It is required on platforms such as OpenShift
- It reduces blast radius in the event of a container escape
Security context example (FlyteAdmin)
The Flyte Helm chart configures the following security context for FlyteAdmin:TLS and HTTPS
FlyteAdmin exposes both an HTTP and a gRPC endpoint. In production:- Terminate TLS at the Ingress layer (ALB, NGINX, or GKE Ingress)
- Use a CA-issued certificate (self-signed certificates are not supported by
flytectlfor OAuth flows) - Configure HTTPS redirect in your Ingress annotations
flytectl requires a CA-signed SSL certificate for OAuth to work. Using a self-signed certificate causes the error: certificate is not standards compliant.Authentication
Flyte supports OAuth 2.0 and OpenID Connect for authenticating both human users (via the browser) and service accounts (via client credentials). See the authentication guide for setup instructions. In summary:- UI access uses OIDC (browser redirect to your IdP)
flytectlandpyflyteuse PKCE or client credentials- FlytePropeller authenticates to FlyteAdmin using a shared client secret
Secrets management
Flyte provides a secrets injection framework that delivers secrets to task pods at runtime without exposing them in workflow code or task specs. See the secrets guide for details.RBAC and access control
Flyte’s access control model is based on projects and domains. See the RBAC guide for details on mapping OIDC claims to Flyte roles.Network policies
Flyte services communicate over the following ports:| Source | Destination | Port | Protocol |
|---|---|---|---|
| FlyteConsole browser | FlyteAdmin | 443 | HTTPS |
flytectl / pyflyte | FlyteAdmin | 443 | gRPC-TLS |
| FlytePropeller | FlyteAdmin | 81 | gRPC (in-cluster) |
| FlytePropeller | DataCatalog | 8081 | gRPC (in-cluster) |
| FlyteAdmin | PostgreSQL | 5432 | TCP |
| Task pods | Object store | 443 | HTTPS |
Cross-origin resource sharing (CORS)
When FlyteAdmin and FlyteConsole run on different domains, configure CORS:ADMIN_API_URL:
Audit logging
All FlyteAdmin API calls are logged. To increase verbosity and capture audit events, set the log level:Security checklist
Production security checklist
Production security checklist
- TLS certificate issued by a trusted CA is configured at the Ingress
- Authentication is enabled (
auth.enabled: true) - Database connection uses
sslmode=requireor stronger - MinIO (if used) is not publicly accessible
- Kubernetes NetworkPolicies restrict traffic between namespaces
- Task pods run as non-root
- Secrets are managed via the Flyte secrets injection framework, not environment variables
- RBAC is configured to restrict project access to appropriate teams
- Container images are scanned for vulnerabilities in CI