<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security &amp; Trust on psLens</title><link>https://pslens.com/security/</link><description>Recent content in Security &amp; Trust on psLens</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pslens.com/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Code &amp; Supply Chain</title><link>https://pslens.com/security/code-and-supply-chain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/security/code-and-supply-chain/</guid><description>&lt;p&gt;This page is for security reviewers who need to understand what is running inside psLens before approving its deployment. It covers four questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;What code is actually running?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Can we audit it?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How is it built and shipped?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How are vulnerabilities found, disclosed, and fixed?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you&amp;rsquo;re looking for the higher-level read-only / whitelist story, start with &lt;a href="https://pslens.com/security/"&gt;Security &amp;amp; Trust&lt;/a&gt; and come back here for the detail.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-whats-inside-the-image"&gt;1. What&amp;rsquo;s Inside the Image&lt;/h2&gt;
&lt;p&gt;psLens is a single Go binary plus an embedded NATS server, packaged as a multi-stage Docker image distributed from &lt;code&gt;ghcr.io/cedarhillsgroup/pslens&lt;/code&gt;. There is no separate database, message broker, or external worker process; one container is the whole application.&lt;/p&gt;</description></item><item><title>Authentication &amp; Access</title><link>https://pslens.com/security/authentication-and-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/security/authentication-and-access/</guid><description>&lt;p&gt;This page covers how end users authenticate to psLens, what access controls exist (and which deliberately don&amp;rsquo;t), and how to front psLens with your existing identity provider today.&lt;/p&gt;
&lt;p&gt;For SSO, see &lt;a href="https://pslens.com/security/authentication-and-access/#sso-today-reverse-proxy"&gt;SSO Today&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-how-users-log-in-today"&gt;1. How Users Log In Today&lt;/h2&gt;
&lt;p&gt;psLens ships with &lt;strong&gt;optional email magic-link authentication&lt;/strong&gt;. It is off by default in the shipped &lt;code&gt;config.yaml&lt;/code&gt; and &lt;strong&gt;must be turned on for production deployments&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;auth.enabled: true&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User visits any psLens URL → redirected to &lt;code&gt;/login&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;User enters their email address.&lt;/li&gt;
&lt;li&gt;psLens emails a one-time verification code to that address (only if the address is on the configured &lt;code&gt;AuthorizedUsers&lt;/code&gt; allowlist).&lt;/li&gt;
&lt;li&gt;User enters the code at &lt;code&gt;/verify-code&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Session created in NATS KV, identified by an HTTP-only &lt;code&gt;psLens_auth&lt;/code&gt; cookie.&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Property&lt;/th&gt;
 &lt;th&gt;Value&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Mechanism&lt;/td&gt;
 &lt;td&gt;Email one-time code (no passwords)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Session storage&lt;/td&gt;
 &lt;td&gt;NATS KV bucket &lt;code&gt;auth-sessions&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Session TTL&lt;/td&gt;
 &lt;td&gt;1 year (configurable)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cookie&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;psLens_auth&lt;/code&gt;, HTTP-only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;User allowlist&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;AuthorizedUsers&lt;/code&gt; in &lt;code&gt;config.yaml&lt;/code&gt;, case-insensitive&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Public endpoints (no auth required)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/healthz&lt;/code&gt;, &lt;code&gt;/static/*&lt;/code&gt;, the auth flow itself&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There are no end-user passwords for psLens to store, leak, hash, or rotate.&lt;/p&gt;</description></item><item><title>Data Handling &amp; Logging</title><link>https://pslens.com/security/data-and-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/security/data-and-logging/</guid><description>&lt;p&gt;This page is for compliance reviewers and DPOs who need a precise answer to &amp;ldquo;what data does psLens hold, where, and for how long?&amp;rdquo;, and for security teams checking encryption and audit-trail posture.&lt;/p&gt;
&lt;p&gt;For PII handling, jump to &lt;a href="https://pslens.com/security/data-and-logging/#pii-reality-check"&gt;Personal Data (PII)&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-what-pslens-stores"&gt;1. What psLens Stores&lt;/h2&gt;
&lt;p&gt;psLens persists three categories of data, all inside the customer&amp;rsquo;s own dedicated instance. There is no shared multi-tenant backend.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Where&lt;/th&gt;
 &lt;th&gt;What&lt;/th&gt;
 &lt;th&gt;Retention&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/data/nats&lt;/code&gt; (NATS JetStream KV)&lt;/td&gt;
 &lt;td&gt;Alert history&lt;/td&gt;
 &lt;td&gt;Rolling window (configurable; short by default)&lt;/td&gt;
 &lt;td&gt;Alerts are about &lt;em&gt;current&lt;/em&gt; problems. History is for trend review, not long-term audit.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/data/nats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Report output (Markdown)&lt;/td&gt;
 &lt;td&gt;90 days&lt;/td&gt;
 &lt;td&gt;So you can revisit past audit findings; configurable&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/data/nats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Recently-viewed objects per user&lt;/td&gt;
 &lt;td&gt;Session-scoped&lt;/td&gt;
 &lt;td&gt;Navigation convenience; not an audit log&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/data/nats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Encrypted DB / SWS credentials&lt;/td&gt;
 &lt;td&gt;Until deleted&lt;/td&gt;
 &lt;td&gt;AES-256-GCM, key from &lt;code&gt;PSLENS_MASTER_KEY&lt;/code&gt; env var&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/data/nats&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Auth sessions (if &lt;code&gt;auth.enabled&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Up to 1 year TTL&lt;/td&gt;
 &lt;td&gt;See &lt;a href="https://pslens.com/security/authentication-and-access/"&gt;Authentication &amp;amp; Access&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/data/projects&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Uploaded PS project archives (&lt;code&gt;.zip&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;Until deleted&lt;/td&gt;
 &lt;td&gt;Used by Project Compare; you control the upload set&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/app/config.yaml&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Configuration (DB names, SWS endpoints, optional credentials)&lt;/td&gt;
 &lt;td&gt;Until you change it&lt;/td&gt;
 &lt;td&gt;Bind-mounted from your filesystem; secrets preferably via env vars&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That is the complete persistent footprint. Everything else (query results, page renders, search hits) is generated on demand and not written to disk.&lt;/p&gt;</description></item><item><title>Deployment &amp; Operations</title><link>https://pslens.com/security/deployment-and-operations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/security/deployment-and-operations/</guid><description>&lt;p&gt;This page consolidates the operational story that an IT or DBA reviewer needs in one place. It overlaps with &lt;a href="https://pslens.com/docs/getting-started/installation/"&gt;Installation&lt;/a&gt; and &lt;a href="https://pslens.com/docs/getting-started/deployment-options/"&gt;Deployment Options&lt;/a&gt;; those are the &lt;em&gt;how-to&lt;/em&gt; references, and this page is the &lt;em&gt;what-to-expect&lt;/em&gt; security-review companion.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-deployment-model"&gt;1. Deployment Model&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One container per customer.&lt;/strong&gt; Each customer gets a dedicated psLens deployment: separate process, separate NATS instance, separate &lt;code&gt;/data&lt;/code&gt; volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No shared multi-tenant backend.&lt;/strong&gt; There is no Cedar Hills Group SaaS plane that customer instances talk to. Your psLens instance talks to your PeopleSoft and (optionally) your SMTP, and that is it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Two hosting options:&lt;/strong&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;th&gt;Operated by&lt;/th&gt;
 &lt;th&gt;Where it runs&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Managed&lt;/td&gt;
 &lt;td&gt;Cedar Hills Group&lt;/td&gt;
 &lt;td&gt;fly.io, in the region you choose at provisioning&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Self-hosted&lt;/td&gt;
 &lt;td&gt;You&lt;/td&gt;
 &lt;td&gt;Docker, docker-compose, Kubernetes, or systemd on a Linux VM. Your cloud, on-prem, or air-gapped.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The choice is reversible. You can start managed and migrate to self-hosted (or vice versa). The data volume is portable and the configuration travels.&lt;/p&gt;</description></item><item><title>Compliance &amp; Vendor</title><link>https://pslens.com/security/compliance-and-vendor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/security/compliance-and-vendor/</guid><description>&lt;p&gt;This page is for procurement, legal, and vendor-risk reviewers. It states current posture plainly, including where certifications do not yet exist.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re filling out a vendor questionnaire (SIG, CAIQ, custom), the &lt;a href="https://pslens.com/security/compliance-and-vendor/#security-questionnaires"&gt;Security Questionnaires&lt;/a&gt; section is the right place to start.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-soc-2--current-posture"&gt;1. SOC 2 — Current Posture&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cedar Hills Group is not SOC 2 certified today.&lt;/strong&gt; Certification is on the roadmap. No committed date.&lt;/p&gt;
&lt;p&gt;In the interim, this site documents the controls a SOC 2 Type II report would cover, so a reviewer can map them to their own framework. The relevant Trust Service Criteria and where they&amp;rsquo;re addressed:&lt;/p&gt;</description></item></channel></rss>