Skip to main content

Security

This page describes the infrastructure side of a GLYPH deployment as the chart ships it, so a security officer can review it and decide what to add. For GLYPH's cryptographic design, see the Security Model.

Statements here describe the current chart release. Where the chart leaves a decision to you, the page says so.

At a glance​

AreaWhat the chart doesWhat you decide
WorkloadsNon-root, no privilege escalation, all capabilities dropped, read-only root filesystem on the chart's own podsSeccomp profile, pod security level, admission policy
NetworkDefault deny for inbound traffic, TLS at the gateway, TLS between frontend and serverThe strict mesh mTLS policy (the reference setup enforces it), outbound rules, firewalling
SecretsHolds no secret values and references Secrets by nameHow Secrets are created, encrypted, and rotated
DataPersistent volumes, plus an object bucket with Object Lock and versioningVolume encryption, backups, retention
PermissionsNarrow chart permissions, plus the operators that automate the databasesReview and scoping of the operators
ImagesScanned by the maintainers with SBOMsMirroring, pinning, signature policy

Workload hardening​

WorkloadRuns asSettings
Serveruid 1000, fsGroup 2000runAsNonRoot, no privilege escalation, drop ALL capabilities, read-only root filesystem
Frontenduid 101, fsGroup 2000Same, with a writable /tmp as an emptyDir
Periodic jobsuid 1000, fsGroup 2000Same
wait-for-mongo init containeruid 1000Same

Access control​

PrincipalScopePermissions
glyph-app-server service account (chart)mongo.namespaceget, list, watch on mongodbcommunity resources, used by the wait-for-mongo init container
seaweedfs service account (subchart)ClusterClusterRole glyph-app-seaweedfs-rw-cr: get, list, watch, create, update, patch, delete on pods, used to restart SeaweedFS master pods after a migration
MongoDB Community OperatorApplication namespace, plus clusterRole: manage Services, Secrets, ConfigMaps, StatefulSets, Deployments, Jobs, and Pods (including deletecollection) in its namespace. ClusterRoles: validating webhook configurations, Services, and read access to node and version information for telemetry
RabbitMQ Cluster OperatorClusterClusterRole: create, get, list, update, and watch Secrets, ConfigMaps, PersistentVolumeClaims, ServiceAccounts, and Services; update pods and create on pods/exec; manage StatefulSets, Roles, and RoleBindings

The SeaweedFS ClusterRole can be turned off with seaweedfs.global.seaweedfs.createClusterRole: false. Running without it has not been validated, so test first.

Network​

Inbound​

networkPolicy.enabled (default true) creates three policies in the application namespace:

  1. Deny all inbound traffic to every pod.
  2. Allow inbound traffic from any pod in the same namespace.
  3. Allow inbound traffic to the frontend pods from outside the namespace, so the gateway can reach them.

The result is that nothing outside the namespace reaches MongoDB, RabbitMQ, the server, or object storage directly. NetworkPolicies only add permissions, so to limit the frontend policy further, for example to the gateway alone, set networkPolicy.enabled to false and supply your own policies.

Outbound​

The chart does not restrict outbound traffic. The namespace needs DNS, the Kubernetes API (for the operators), and several external services, and each missing exception is only discovered when something breaks. If your policy requires egress control, build it from this list:

DestinationUsed forWhen
Vonage Video APIMeetings and huddlesWhen video is used
Firebase and web push servicesPush notificationsWhen push is used
Amazon SESSystem emailAlways, unless arranged otherwise with SENTRIQS
SnowflakeAnalytics jobsOnly if analytics or dailyMetrics is enabled
AWS Secrets ManagerSecret retrievalOnly if server.skipAwsSecrets is false
Image registriesImage pullsAlways

Encryption in transit​

ConnectionProtection
Browser to gatewayTLS with your certificate. Port 80 redirects to HTTPS.
Gateway to frontendMesh mTLS.
Frontend to serverMesh mTLS.
Server to MongoDBMesh mTLS, plus SCRAM authentication.
Server to RabbitMQMesh mTLS.
Server to object storageMesh mTLS.
Server to external servicesHTTPS, outside the mesh.

With strict mTLS enforced, as in the reference setup, Istio encrypts and mutually authenticates every hop inside the mesh, whatever protocol the application speaks. The chart does not create that policy, so apply the PeerAuthentication shown in Installation and treat it as required. mTLS proves identity and encrypts, but it does not limit which workloads may connect, so add Istio AuthorizationPolicy resources if you need that.

Secrets​

  • No secret values in the chart. The chart and its values file hold only Secret names. You create the application Secret yourself.
  • Environment variables. The application Secret reaches the server and job pods as environment variables, so exec access to those pods is equivalent to access to the secrets.
  • Rotation. Ask SENTRIQS before rotating the token-signing and password-hashing secrets.

Data​

StoreWhat it holdsWhere
MongoDBApplication records20Gi volume per member
Object storageFiles and archive material, with Object Lock and versioningSeaweedFS volumes
RabbitMQBroker queues10Gi volume
  • Encryption at rest. The chart does not configure it. Use an encrypted StorageClass or encrypted volumes.
  • Backups. The chart configures none. Plan backups for MongoDB and object storage, and test restores. SENTRIQS cannot read or recover your content, as described in the Security Model.
  • Archiving keys. Archiving keys are shown once and cannot be recovered. See Archiving and Compliance.

Images and supply chain​

  • Scanning. SENTRIQS scans the GLYPH images and produces a CycloneDX SBOM for each. Ask SENTRIQS for the current report and SBOMs.
  • Third-party components. The operators, cert-manager, Istio, and SeaweedFS are third-party software. Scan them in your own pipeline and track their advisories.
  • Your controls. Mirror images into your own registry, pin them by digest, and enforce your signature and admission policy.
  • Minimal database image. glyph-mongodb carries only the mongod binary on a small base, to reduce attack surface.

Reporting a security concern​

Email support@sentriqs.com with "Security" in the subject line. Do not include secrets, keys, or customer data in the message. See Getting Support for what to include.