Access Controls Policy

Effective Date: April 16, 2026  ·  Version 1.0

This Access Controls Policy describes the technical and organizational measures Emmber, Inc. (“Emmber,” “Pluse”) implements to restrict access to production systems, consumer data, and sensitive assets. Emmber, Inc. is a Delaware corporation qualified to do business in the State of Florida, which operates the Pluse platform at pluse.to. This policy supplements Section 4 (Authentication & Access Control) and Section 5 (Personnel Security) of our Information Security Policy.

Table of Contents

  1. Access Control Principles
  2. Unique User Accounts
  3. Production Server Access
  4. Database Access Controls
  5. Deployment Pipeline
  6. Environment Separation
  7. Third-Party Integration Access
  8. Consumer Authentication
  9. Access Review & Revocation
  10. Contact

1. Access Control Principles

All access controls at Pluse are governed by the following principles:

2. Unique User Accounts

All personnel with access to Pluse systems are assigned unique, individually identifiable accounts. This applies to:

SystemAccount TypeAuthentication
Production server (Ubuntu) Individual SSH user or key-based root access SSH public key (Ed25519)
GitHub (source code) Individual GitHub account GitHub authentication + MFA
Stripe Dashboard Individual Stripe team member account Email/password + MFA
DigitalOcean (infrastructure) Individual DigitalOcean account Email/password + MFA
Plaid Dashboard Individual Plaid team member account Email/password + MFA
QuickBooks Developer Individual Intuit developer account Intuit authentication + MFA
Sentry (error monitoring) Individual Sentry account Email/password + MFA
Apple Developer (iOS) Individual Apple ID Apple ID + MFA (required by Apple)

Shared, generic, or group accounts are not used for any system that stores, processes, or provides access to consumer data or production infrastructure.

3. Production Server Access

3.1 SSH Key Authentication Only

Production server access is restricted to SSH public key authentication. Password-based SSH authentication is disabled at the operating system level (PasswordAuthentication no in sshd_config). This eliminates the risk of brute-force password attacks against the production server.

3.2 Key Requirements

3.3 Access Scope

Production server access is limited to deployment operations (executing git pull to deploy reviewed code) and essential maintenance tasks. Direct modification of production files on the server is prohibited — all changes flow through the git-based deployment pipeline described in Section 5.

No Password Authentication Password-based SSH login is disabled on the production server. Only cryptographic key-based authentication is accepted, providing phishing-resistant access control for the production environment.

4. Database Access Controls

4.1 Role-Based Database Credentials

Database access uses dedicated application credentials scoped to the minimum necessary privileges:

RolePermissionsPurpose
Application service account SELECT, INSERT, UPDATE, DELETE on application tables Normal application operations (read/write business data)
Administrative account Full database privileges (used only for migrations and maintenance) Schema changes, maintenance operations (not used by the application at runtime)

4.2 Connection Restrictions

4.3 Query Security

All database queries throughout the application use parameterized prepared statements, preventing SQL injection. String concatenation into SQL queries is prohibited. Strict SQL mode is enabled to prevent silent data truncation.

5. Deployment Pipeline

5.1 Git-Based Deployment

All code changes to the production environment follow a controlled, auditable deployment pipeline:

  1. Local development. Code is written and tested in a local development environment, isolated from production.
  2. Code review. Changes are reviewed before being committed to the main branch of the private GitHub repository.
  3. Syntax validation. PHP files are validated with php -l and JavaScript files with node -c before deployment to prevent application-breaking errors.
  4. Git commit and push. Reviewed changes are committed with descriptive messages and pushed to the private GitHub repository, creating a complete audit trail.
  5. SSH deployment. An authorized individual connects to the production server via SSH (key-based auth) and executes git pull to deploy the reviewed code.
  6. Post-deployment verification. Critical functionality is verified after deployment.

5.2 No Direct File Uploads

Direct file uploads to the production server (via SCP, SFTP, FTP, or any other file transfer method) are prohibited. All production file changes must flow through the git-based deployment pipeline, ensuring:

5.3 Private Repository

The source code repository is hosted as a private repository on GitHub. Access to the repository is restricted to authorized personnel. Repository access is managed through GitHub’s team permissions and requires MFA on the GitHub account.

6. Environment Separation

6.1 Dual Configuration Architecture

Pluse uses an environment-separated configuration architecture to isolate credentials and settings:

Configuration FileLocationUsed By
Primary .env Application directory CLI scripts, cron jobs, background processes
Web .env Separate directory outside the web root Web requests (Apache/PHP)

This dual-file architecture ensures that web-accessible processes and CLI processes load configuration independently, preventing configuration leakage between contexts.

6.2 Environment File Protections

6.3 Development vs. Production Isolation

Development environments use separate credentials, API keys, and database instances from production. Production credentials are never used in development, and development credentials cannot access production systems.

7. Third-Party Integration Access

7.1 Principle of Least Privilege

All third-party API integrations are configured with the minimum necessary scopes and permissions:

IntegrationScoping MechanismPermissions Granted
Stripe Connect OAuth 2.0 with restricted API keys Payment processing, payout management, webhook events (no access to Stripe account-level settings)
Plaid OAuth 2.0 token exchange; per-item access tokens Transaction read, account balances, identity verification (scoped per bank connection, not global)
QuickBooks Online OAuth 2.0 with PKCE; scoped refresh tokens Accounting data sync (customers, invoices, chart of accounts) — read and write only for authorized entities
Google OAuth OAuth 2.0 with limited scope Profile information (name, email) for authentication only — no access to Gmail, Drive, Calendar, or other Google services
Apple Sign In OAuth 2.0 / OpenID Connect Profile information (name, email) for authentication only

7.2 Token Security

All third-party OAuth tokens (access tokens and refresh tokens) are encrypted at rest using AES-256-GCM before storage in the database. Tokens are decrypted only at the moment of use for API requests and are never logged, cached in plaintext, or exposed to client-side code.

7.3 Token Lifecycle

8. Consumer Authentication

8.1 Authentication Methods

Pluse consumers (end users of the platform) authenticate using one of the following methods before accessing any application features, including financial integrations:

MethodPlatformSecurity Properties
Email + Password Web and Mobile Bcrypt-hashed passwords (cost factor 12), minimum 8 characters, complexity requirements, rate-limited login
Sign in with Apple Web and iOS Apple-verified identity, ECDSA JWT verification, phishing-resistant (delegated to Apple)
Google Sign-In Web and Mobile Google-verified identity, OAuth 2.0 token verification, phishing-resistant (delegated to Google)
Face ID / Touch ID iOS only Hardware-backed biometric verification, BIOMETRY_CURRENT_SET policy, device-bound (not transferable), Keychain-stored credentials

8.2 Session Protection

After authentication, sessions are protected with:

8.3 Financial Features Gated by Authentication

All financial integration endpoints (bank account linking, transaction sync, payment processing) require a valid authenticated session. Unauthenticated requests receive a 401 Unauthorized response. Additionally, certain financial features are gated by subscription tier authorization, requiring both authentication and an active subscription.

9. Access Review & Revocation

9.1 Periodic Review

Access privileges across all systems are reviewed:

9.2 Revocation Procedures

When access must be revoked, the following steps are taken:

  1. SSH keys: The individual’s public key is removed from ~/.ssh/authorized_keys on the production server.
  2. GitHub: The individual is removed from the repository and organization.
  3. Third-party platforms: The individual’s account is removed or downgraded on Stripe, DigitalOcean, Plaid, Sentry, and any other platforms they had access to.
  4. Database credentials: If the individual had direct database access, the associated credentials are rotated.
  5. Verification: Revocation is verified by confirming the individual can no longer authenticate to any previously accessible system.

9.3 Audit Trail

Access changes are documented. Git commit history provides an immutable audit trail of who deployed what code and when. Third-party platforms maintain their own access logs. SSH access is logged by the operating system.

10. Contact

For questions about this Access Controls Policy:

This policy is reviewed and updated at least annually, or upon any material change to access control procedures. For the complete security program, see our Information Security Policy.

Emmber, Inc. is a Delaware corporation qualified to do business in the State of Florida. The “Pluse” name and the Pluse platform are operated by Emmber, Inc.

© 2024–2026 Emmber, Inc. All rights reserved. Pluse™ and Lux™ are trademarks of Emmber, Inc.