Skip to main content

CISO Assistant

CISO Assistant is an open source GRC (Governance, Risk, Compliance) platform.

Creating a superuser

Find your backend pod, then run createsuperuser inside it directly with kubectl exec:

kubectl exec -it <backend-pod-name> -n <namespace> -- poetry run python manage.py createsuperuser

It'll prompt you for email and password.

If you ever lose the password later, run changepassword the same way:

kubectl exec -it <backend-pod-name> -n <namespace> -- poetry run python manage.py changepassword <email>

Checking if a superuser already exists

Useful if you're not sure whether someone already set one up, or you're debugging why login isn't working. Open a Django shell the same way, via kubectl exec:

kubectl exec -it <backend-pod-name> -n <namespace> -- poetry run python manage.py shell

Then:

from iam.models import User
for u in User.objects.filter(is_superuser=True):
print(u.email, u.is_active, u.date_joined)

This prints out every superuser account, whether it's active, and when it was created.

Email validation

CISO Assistant sends emails for user invitations and password resets. Without SMTP configured, the app defaults to smtp.server.local:25 which won't resolve in most clusters, causing invitation emails to silently fail.

To enable email, add the following under the ciso-assistant: key in your values file:

ciso-assistant:
backend:
config:
smtp:
host: <smtp-host> # e.g. mail.system for an in-cluster relay
port: 587
useTls: false # set to true if your relay requires STARTTLS
defaultFrom: no-reply@your-domain.com
# Optional — only needed if your relay requires authentication:
# username: myuser
# password: mypassword
# existingSecret: my-smtp-secret # alternative: pull creds from a K8s secret

If you're running the mail chart in the same cluster as a postfix relay, the host is typically mail.<namespace> (e.g. mail.system), port 587, with no authentication required.

To verify email is working after applying the config, add a user via the UI (Organization → Users → Add user) and confirm the invitation email arrives. You can also check backend pod logs for SMTP errors:

kubectl logs -n <namespace> <backend-pod-name> | grep -i smtp

Adding users

Once you're logged in as admin, you don't need the CLI for this - there's a normal UI flow.

In the app: Organization → Users → Add user. Enter their email, assign a role (regular user, admin, etc., depending on what's configured under access control), and save.

The admin "add user" form doesn't ask you to set a password. It creates the account and fires off an invitation email with a link for the user to set their own password.

Adding admin users

Same flow as adding a normal user, just assign the admin role/group when creating them (or edit an existing user and change their group afterward: Organization → Users → select user → update their role).

Storing evidence

Evidence in CISO Assistant is what justifies a compliance requirement's status, or proves a control was actually applied. It's attached at the requirement level inside a compliance assessment/audit.

Each piece of evidence supports:

  • A description - what it shows
  • A file - upload something directly
  • A link - point to wherever the actual artifact already lives

If your controls already live somewhere else - a git repo, a wiki, a ticketing system - you don't need to duplicate that content into CISO Assistant. You just link to it and add a short description of what it proves. Keeps a single source of truth instead of two copies that can drift out of sync.