Security and isolation
How alawadi.cloud isolates every project and runs every app unprivileged, enforced at admission, so a root or privileged image cannot run.
Tenant isolation
Each project runs in its own isolated namespace with a private network. By default nothing outside the project can reach your services, and your services cannot reach another tenant. Every project is created with a default-deny network policy, resource quotas, and scoped access already applied. You do not configure any of this.
Unprivileged by default
Every container app runs locked down. You do not opt in, and you cannot opt out:
- Non-root only. A container that tries to run as root will not start. Add a
non-root
USERto your Dockerfile (see Container image requirements). - No privileged mode and no privilege escalation.
- No host access. No host network, host PID, host filesystem, or
hostPathmounts, and no Docker socket. - All Linux capabilities dropped, with the
RuntimeDefaultseccomp profile. - Read-only root filesystem. Write temporary files to
/tmp.
These are the controls of the Kubernetes restricted Pod Security Standard. It is enforced at admission on every tenant namespace, and an independent policy layer continuously re-checks the same standard against every running workload. A root or privileged image is rejected before it can run, on more than one layer.
Defense in depth
Enforcement does not rely on a single setting. The restricted standard is applied per namespace and verified again, independently, across all tenant workloads, so a misconfiguration in one layer cannot quietly let a privileged container through.
Image supply chain
- Images are pulled from your private registry on the platform.
- Deploys reference an immutable tag (never
:latest) and are authorized by short-lived GitHub OIDC tokens, so there are no long-lived secrets in your pipeline. See Deploy from GitHub via OIDC. - Image source is governed at admission, so only images you own and pushed through your own pipeline run in your project.
Secrets and connections
- Managed database credentials are injected into your app as environment variables backed by Kubernetes secret references. The password is never shown in the dashboard or in logs.
- Public apps receive managed TLS automatically on their
*.alawadi.cloudhostname and on any custom domain you add.
What this means for your image
Build a small, non-root image that listens on 8080 and writes only to /tmp.
The portal generates a production-ready Dockerfile and CI workflow that already
satisfy every rule above, so you rarely set these by hand. See
Container image requirements for
the full checklist.
Secrets
Store API keys and passwords encrypted, and inject them into your apps as environment variables.
Deploy from GitHub via OIDC
Configure trust in the portal, copy the generated GitHub Actions workflow, and push. It builds an image, pushes it to your registry, and rolls it out to a container with no long-lived secrets.