> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seekr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Security considerations for SeekrFlow Self-Managed

> What SeekrFlow secures by default, what it connects to, and what you are responsible for.

Security for a self-managed deployment is a shared responsibility. Seekr ships hardened SeekrFlow container images with secure default settings. You secure your environment end to end and keep SeekrFlow up to date.

## Shared responsibility

| Area | Seekr | You |
| - | - | - |
| Container images | Distroless images with a hardened security context. Seekr scans SeekrFlow container images for vulnerabilities before release. Each release pins its images by digest, which lets you confirm that a mirror matches the release. | Scan third-party images, such as MLflow, Argo Workflows, and OpenSearch, which their own projects maintain. Keep SeekrFlow up to date. See [Upgrade a SeekrFlow deployment](/self-managed/flow/operate/upgrade). |
| Cloud identity | Support for your cloud provider's workload identity, which keeps long-lived credentials out of the cluster. A service account and role for each workload. | Create the cloud roles and grant their permissions. See [Set up cloud identity](/self-managed/flow/provision/cloud-identity). |
| User access | Local accounts with multi-factor authentication, and optional single sign-on through Keycloak. An endpoint for creating the first administrator, reachable only from inside the cluster. | Create the administrator and manage users. Sign-in rate limiting and account lockout are off by default. Enable both for any deployment reachable by untrusted users. See [Create the first SeekrFlow administrator](/self-managed/flow/deploy/admin). |
| Secrets | Secrets consumed by reference, never written into your values file. | Choose where to store secrets, and keep a copy of the token signing key pair and root key outside the cluster. See [Set up secret management](/self-managed/flow/provision/secret-management). |
| Network | An ingress route for each service, compatibility with an Istio service mesh with mutual Transport Layer Security (TLS), and support for a private certificate authority bundle. | Provide TLS certificates for the ingress, and write network policies. Traffic inside the cluster is unencrypted by default. If you require encryption, run a service mesh. See [Set up networking and cluster policies](/self-managed/flow/provision/networking). |
| Storage | Data stored only in the database and object storage you provision. | Encrypt the database and object storage at rest, enable TLS on database connections, and run backups and disaster recovery. |
| Cluster | An operator with documented cluster permissions. | Harden the cluster itself, including the control plane, audit logging, and encryption of etcd, the database where Kubernetes stores cluster data and secrets. |
| Compliance | Federal Information Processing Standard (FIPS) enabled images for Amazon Web Services (AWS) GovCloud (US), and a FIPS mode for the Auth service that works in any environment. | Enable FIPS mode at install time, and meet your own compliance requirements. SeekrFlow doesn't require FIPS mode on the nodes. If your requirements call for it, SeekrFlow runs on FIPS-enabled nodes, including GPU nodes with NVIDIA drivers. See [Create SeekrFlow secrets](/self-managed/flow/prepare/secrets-and-tokens). |

## Outbound connections

A self-managed deployment makes these outbound connections:

| Connection | When | Control |
| - | - | - |
| Seekr's artifact registry | Pulling container images and the chart during install and upgrade. | Mirror the images into your own registry. See [Set up the sfe CLI](/self-managed/flow/prepare/sfe-cli#mirror-container-images). |
| Hugging Face | Downloading model weights. | Stage weights in your object storage and turn on offline mode. See [Stage weights for an offline install](/self-managed/flow/prepare/models#stage-weights-for-an-offline-install). |
| Amazon Bedrock | Inference on externally hosted models. | Off by default. See [Configure models](/self-managed/flow/prepare/models). |
| Brave Search API | Agents running web searches. | Used only when you provide a Brave Search API key. See [Request credentials](/self-managed/flow/provision/checklist#request-credentials). |
| Model Context Protocol (MCP) servers and tool endpoints you configure | Agents calling tools that reach external services. | Reaches only the endpoints you configure. See [MCP connector](/flow/sdk/agents/mcp-connector). |
| AWS License Manager | License validation on AWS. | Runs in your own AWS account. Your Seekr account team can issue a license that skips this check. |

Every self-managed deployment turns off usage metering, error reporting, and product analytics.

## Operator permissions

The operator creates and manages workloads across the cluster, which requires a broad cluster role. It can:

* Read secrets in every namespace, because workloads reference secrets by name.
* Create cluster roles and bindings, including the `escalate` and `bind` permissions Kubernetes requires for that.
* Manage SeekrFlow's own custom resource definitions.

Installing SeekrFlow requires Kubernetes cluster-admin permissions. Kubernetes allows only an installer with the same permissions to grant the operator's cluster role.

## AWS IAM roles

An AWS deployment uses five AWS Identity and Access Management (IAM) roles. AWS maintains the managed policies, and SeekrFlow's own role grants only the permissions in its permissions table.

| Role | Used by | Permissions | Created in |
| - | - | - | - |
| Cluster IAM role | Amazon Elastic Kubernetes Service (Amazon EKS) | `AmazonEKSClusterPolicy` managed policy | [Provision the cluster](/self-managed/flow/provision/cluster) |
| Node IAM role | The worker and GPU nodes | `AmazonEKSWorkerNodePolicy`, `AmazonEC2ContainerRegistryReadOnly`, and `AmazonEKS_CNI_Policy` managed policies | [Provision the cluster](/self-managed/flow/provision/cluster) |
| AWS Load Balancer Controller role | The ingress controller | The controller's IAM policy, published by AWS | [Set up networking and cluster policies](/self-managed/flow/provision/networking) |
| File storage driver role | The Amazon Elastic File System (Amazon EFS) Container Storage Interface (CSI) driver | `AmazonEFSCSIDriverPolicy` managed policy | [Provision storage](/self-managed/flow/provision/storage) |
| SeekrFlow role | SeekrFlow's pods | The permissions table, scoped to your resources | [Set up cloud identity](/self-managed/flow/provision/cloud-identity) |

For the actions each AWS service supports, see the [Service Authorization Reference](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html).

## Workload hardening

SeekrFlow container images are distroless, with no shell or package manager. The operator and the workloads it creates run with this security context:

* A non-root user.
* A read-only root filesystem, with writable scratch space mounted where services need it.
* All Linux capabilities dropped, and privilege escalation disallowed.
* The default secure computing mode (seccomp) profile from your container runtime.

A few supporting workloads, such as the Argo server, are exceptions.

Supporting components use their upstream images. MLflow uses a Chainguard image, and Argo Workflows and OpenSearch use the images their projects publish.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.