<?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/docs/trust/</link><description>Recent content in Security &amp; Trust on psLens</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pslens.com/docs/trust/index.xml" rel="self" type="application/rss+xml"/><item><title>What SWS Installs in PeopleSoft</title><link>https://pslens.com/docs/trust/what-sws-installs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/what-sws-installs/</guid><description>&lt;p&gt;The psLens application connects to your PeopleSoft environments through a scoped, read-only subset of the SWS (Secure Web Services) framework delivered in the &lt;code&gt;CHG_PSLENS&lt;/code&gt; Application Designer project. This page lists what installing the project changes in your environment, giving the administrator, DBA, or security reviewer the full footprint before anything is migrated. The step-by-step setup guide is at &lt;a href="https://pslens.com/docs/getting-started/installation/"&gt;Installation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-install-in-one-paragraph"&gt;The Install in One Paragraph&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;CHG_PSLENS&lt;/code&gt; project is delivered as a standard Application Designer project. You import it into a development environment first, build the single whitelist table, test connectivity, and migrate it to TEST and PROD through your normal change-management path, the same way you move any other project. There is no installer, no agent, and no software on the database server. Plan for under an hour of PeopleSoft admin time for the first environment.&lt;/p&gt;</description></item><item><title>Code &amp; Supply Chain</title><link>https://pslens.com/docs/trust/code-and-supply-chain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/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/docs/trust/"&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>Software Bill of Materials (SBOM)</title><link>https://pslens.com/docs/trust/sbom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/sbom/</guid><description>&lt;p&gt;This page documents all third-party software components compiled into the psLens binary or embedded as client assets.&lt;/p&gt;
&lt;p&gt;A machine-readable Software Bill of Materials in standard CycloneDX v1.6 format is generated automatically during the build process and is publicly accessible:&lt;/p&gt;
&lt;div class="my-4"&gt;
 &lt;a class="btn btn-primary" href="https://pslens.com/sbom.json" download="pslens-sbom.json"&gt;
 Download CycloneDX SBOM (JSON)
 &lt;/a&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="licensing-posture"&gt;Licensing Posture&lt;/h2&gt;
&lt;p&gt;psLens uses only standard, permissively licensed open-source libraries.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero copyleft.&lt;/strong&gt; There are no GPL, LGPL, AGPL, SSPL, or reciprocal licenses in the application.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissive licenses only.&lt;/strong&gt; All runtime dependencies are licensed under Apache 2.0, MIT, BSD-2-Clause, BSD-3-Clause, or SIL Open Font License (OFL).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe for enterprise and on-premises deployment.&lt;/strong&gt; Deploying or self-hosting psLens does not impose any requirement to disclose proprietary configuration, code, or schema.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="compiled-runtime-dependencies"&gt;Compiled Runtime Dependencies&lt;/h2&gt;
&lt;p&gt;The following external Go modules are compiled directly into the psLens server binary (&lt;code&gt;cmd/server&lt;/code&gt;):&lt;/p&gt;</description></item><item><title>Authentication &amp; Access</title><link>https://pslens.com/docs/trust/authentication-and-access/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/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/docs/trust/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/docs/trust/data-and-logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/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/docs/trust/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/docs/trust/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/docs/trust/deployment-and-operations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/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/docs/trust/compliance-and-vendor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/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/docs/trust/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><item><title>HECVAT &amp; Higher Education</title><link>https://pslens.com/docs/trust/hecvat/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pslens.com/docs/trust/hecvat/</guid><description>&lt;p&gt;This page documents how psLens aligns with the Higher Education Community Vendor Assessment Tool (HECVAT v4), FERPA compliance requirements, and university information security evaluations.&lt;/p&gt;
&lt;p&gt;Institutions evaluating psLens can request our pre-populated &lt;strong&gt;HECVAT Lite&lt;/strong&gt; or &lt;strong&gt;HECVAT On-Premises&lt;/strong&gt; assessment workbook by contacting &lt;code&gt;security@cedarhillsgroup.com&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-ferpa-and-student-data-boundaries"&gt;1. FERPA and Student Data Boundaries&lt;/h2&gt;
&lt;p&gt;psLens is designed exclusively for PeopleTools system administration, security auditing, and operational monitoring.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Student or Financial Data:&lt;/strong&gt; psLens does not query, replicate, or store student education records, financial aid data, payment information, or course grades.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enforced Table Whitelist:&lt;/strong&gt; All queries execute against an institution-managed table whitelist (&lt;code&gt;PS_CHG_PSLENS_WL&lt;/code&gt;) on the PeopleSoft application server. Queries targeting non-whitelisted records (e.g., student tables like &lt;code&gt;PS_STDNT_ENRL&lt;/code&gt; or &lt;code&gt;PS_ACAD_PROG&lt;/code&gt;) are rejected before execution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In-Memory Operator Auditing:&lt;/strong&gt; While PeopleTools security tables contain administrative operator IDs (&lt;code&gt;PSOPRDEFN&lt;/code&gt;) and operator email addresses (&lt;code&gt;PSUSEREMAIL&lt;/code&gt;) for access auditing, this data is processed in memory during active user requests and is not permanently synced to external databases.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-authentication-and-access-control-aaai"&gt;2. Authentication and Access Control (AAAI)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single Sign-On (SSO):&lt;/strong&gt; psLens supports native OpenID Connect (OIDC) Single Sign-On against campus identity providers, including Microsoft Entra ID, Okta, Google Workspace, and Keycloak.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email One-Time Passcode (OTP):&lt;/strong&gt; For deployments without SSO, authentication uses 6-digit email passcodes restricted to a verified institution email domain allowlist.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Credential Storage:&lt;/strong&gt; PeopleSoft service account credentials used by psLens are encrypted at rest using AES-256-GCM. Decryption keys are loaded from environment variables or enterprise secret vaults (e.g., 1Password) at boot time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session Management:&lt;/strong&gt; Web sessions are stored in HTTP-only, secure cookies with configurable inactivity timeouts.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-data-residency-and-hosting-models-data--dctr"&gt;3. Data Residency and Hosting Models (DATA &amp;amp; DCTR)&lt;/h2&gt;
&lt;p&gt;Institutions can choose between two deployment models based on risk tolerance and data residency policies:&lt;/p&gt;</description></item></channel></rss>