Software Engineer and Student
The controls that protect the systems I operate and the data they hold, including financial account data retrieved from third party providers.
Effective August 10, 2026. Review cadence: annually, and on any material change.
This policy covers all infrastructure operated by Kanishk Sachdev as a private individual: five self-hosted servers, the applications running on them, the source repositories that define them, and the third party accounts required to administer them. There are no employees, contractors, or other users. The operator, the administrator, and the sole data subject are the same person. Controls are sized accordingly, and this document does not claim organizational structures that do not exist.
This policy states how information is protected across the systems I run, so that a third party assessing them has a written reference rather than an inference from configuration. It is the parent document for the Access Control Policy and the Data Retention and Deletion Policy.
I am solely responsible for information security across all systems in scope. That includes designing controls, applying them, monitoring them, and responding to incidents. Security correspondence goes to security@kanishksachdev.com, an address on a domain I control and monitor.
Because responsibility is not delegated, the usual separation of duties is not achievable. The compensating control is that changes are made through version-controlled configuration rather than by hand, so every change to a production system is recorded, attributable, and reversible.
The systems in scope are enumerated in a single private repository that defines all of them. An asset that is not described there is not deployed. The inventory covers:
Access to production systems is governed by the Access Control Policy, which covers the zero trust network model, centralized identity, multi-factor authentication requirements, least privilege, periodic access reviews, and revocation. In summary: there is no implicitly trusted network, every administrative interface requires an authenticated identity with a second factor, and credentials are scoped to the narrowest function that works.
In transit. All external traffic is HTTPS only, with certificates issued by Let's Encrypt and renewed automatically. Plain HTTP is redirected at the edge. TLS 1.0 and TLS 1.1 are refused. Only TLS 1.2 and TLS 1.3 are accepted, using AEAD cipher suites with ephemeral key exchange. Administrative traffic additionally travels inside an encrypted WireGuard tunnel.
At rest. Financial account data retrieved from third party providers is encrypted at the application layer with AES-256-GCM before it is written to the database. Encryption keys are supplied at deploy time from the secrets manager and are never committed to source control. Databases are reachable only from the internal container network of their host and are not published to the internet. Backups are encrypted independently with their own passphrase.
Secrets. Application secrets live in a self-hosted secrets manager and are rendered onto hosts at deploy time. No secret is stored in source control. The identity used by automation to read them is read-only and scoped to that purpose.
Only one host exposes ports to the public internet, and only those required to serve web traffic and mail. All other services are reachable exclusively over a private WireGuard network that authenticates each device before it can route. Administrative interfaces are not published publicly. Inter-host management traffic uses read-only, purpose-scoped credentials rather than shared administrative accounts.
I do not operate an endpoint scanning program for personal machines. With no employees or contractors, the endpoint fleet is a single workstation under full disk encryption with automatic OS updates enabled.
Container logs from every host are shipped to a central log store and retained for query. Metrics are collected fleet-wide and evaluated against alerting rules, with alerts delivered to a push notification channel I receive directly. Backup jobs alert on failure rather than on success, so a silent backup is a detected condition rather than an assumed one.
The primary application host is backed up hourly to encrypted offsite storage using Borg, covering the full filesystem and the container volume tree. Repository integrity is verified on an automated weekly schedule. Retention follows the schedule set out in the Data Retention and Deletion Policy.
Known limitation, stated rather than omitted: database dumps are not currently quiesced before the snapshot is taken, so a restore of a running database is best effort. Secondary hosts are not yet backed up. Neither gap affects financial data, which is held on the primary host and is reconstructible from the upstream provider on reconnect.
An incident is any suspected unauthorized access, credential disclosure, or loss of data integrity. The response sequence is:
I rely on external providers for hosting, DNS and content delivery, source control, private networking, and financial data aggregation. Each is accessed through an account protected by multi-factor authentication. Credentials issued by these providers are treated as production secrets and handled under section 5. Financial data providers receive only the authorization required to read the accounts I link myself, and any connection can be revoked by me at any time.
This policy is reviewed annually and on any material change to the infrastructure, whichever comes first. A material change means adding a host, adding a service that processes financial data, or altering how access or encryption works. The effective date at the top of this page reflects the most recent review.
Questions about this policy can go to security@kanishksachdev.com.