The Pattern: Small FinTech, Big Compliance Surface
There is a recurring pattern across the Indian financial services landscape that does not get enough attention in cloud security conversations.
Not the 50-account enterprise with a dedicated security team. Not the payments processor with NPCI mandates and 60 developers. Something smaller, earlier, and far more common: the lean fintech with 10-20 engineers, a single AWS account, Docker images deployed directly to EC2, a handful of RDS Postgres databases, and an RBI compliance obligation that demands formal access governance they do not yet have.
This article examines that exact pattern. A fintech running regulated workloads on AWS, using Bitbucket for source control, building Docker images without CI/CD pipelines, deploying directly to EC2 instances, and managing database access informally — because the team is small enough that everyone knows everyone, and until now, that was enough.
It is no longer enough. RBI guidelines, upcoming DPDPA enforcement, and cyber-insurance questionnaires have changed the calculus. The question is no longer “do we need access governance?” — it is “how do we get JIT and DAM without overhauling our entire stack, hiring a security team, or blocking the velocity of 15 engineers?”
The Scenario: What This FinTech Looks Like
| Attribute | Details |
|---|---|
| Industry | Financial Services / FinTech |
| Cloud | AWS (single account) |
| Workloads | EC2 instances running Docker containers |
| Databases | RDS Postgres (primary), MongoDB (legacy, being sunset) |
| Total DB instances | Under 10 |
| SCM | Bitbucket |
| CI/CD | None — Docker images built and deployed directly |
| Console access | 10-15 people with AWS console access |
| JIT & DAM users | 15-20 |
| Compliance | RBI |
| Infrastructure roadmap | Planning Kubernetes migration |
| Current security posture | No PAM, no DAM, no formal access governance |
This is a company that got the engineering right. The product works. The customers are real. The revenue is growing. The team is lean by design — they ship fast, debug fast, and deploy fast.
What they have not formalised is who has access to what, for how long, and why. And in the RBI-regulated financial services world, that informality has a shelf life.
Why This Moment Forces the Conversation
Three converging pressures make “we’ll get to it later” no longer viable for lean fintechs in India:
1. RBI Compliance Is Not Optional for Financial Data
The Reserve Bank of India’s IT framework for regulated entities mandates specific controls around:
- Privileged access management: Who has elevated access, how is it granted, how is it revoked, and where is the evidence?
- Logical access controls: Segregation of duties, principle of least privilege, periodic access reviews.
- Audit trails: Demonstrable logs of who accessed what systems, when, and for what purpose.
- Data protection: Controls over who can access customer financial data and in what context.
When you have 10-15 people with AWS console access and no formal governance, every one of these controls is answered with “we trust our team” — which is true, but not auditable.
2. DPDPA Enforcement Creates Financial Exposure
India’s Digital Personal Data Protection Act introduces penalties up to INR 250 crore for data protection failures. For a fintech handling customer financial data in RDS Postgres databases, the relevant question becomes: who accessed customer PII, when, what query did they run, and was it within the scope of their role?
Without Database Activity Monitoring, you cannot answer this. Without JIT access, you cannot demonstrate that access was time-bound and purpose-limited. The penalty framework turns “we should probably do this” into “we cannot afford not to.”
3. Kubernetes Migration Requires Access Foundations
Planning a move from Docker-on-EC2 to Kubernetes changes the access surface dramatically. Instead of SSH-to-EC2, engineers will need kubectl access to namespaces, pods, and services. Instead of one access model (console + database), you now have three: cloud console, database, and Kubernetes.
If you implement access governance after the Kubernetes migration, you are building on a broken foundation. If you implement it before, the same JIT model extends naturally to Kubernetes JIT when you are ready — one policy engine, one approval flow, one audit trail across cloud, database, and K8s.
The Access Reality: Small Team, No Governance
Here is what “informal access management” actually looks like in a lean fintech deploying Docker on EC2:
AWS Console Access
10-15 people have console access. Some are engineers who deploy. Some are leads who debug production. Some have access because they needed it once, six months ago, and nobody revoked it.
There is no record of why each person has access. There is no record of when they last used it. There is no mechanism to grant access for a task and revoke it when the task completes. The IAM policies are probably AdministratorAccess or broad custom policies that were copied from Stack Overflow early on.
For a team of 15, this works operationally. It fails the moment an RBI auditor asks: “Show me your access review process. Show me the evidence of least privilege. Show me who accessed your production environment in the last 90 days and demonstrate that each access was appropriate.”
Database Access
The RDS Postgres instances hold customer financial data. Access patterns look like this:
- A handful of shared database credentials (one read-write, maybe one read-only).
- Credentials stored in environment variables,
.envfiles, or hardcoded in application config. - No separation between “engineer debugging a customer issue” and “engineer running a schema migration.”
- No audit trail of which human ran which query — only that
db_writerconnected at a given time. - No data masking — an engineer querying a customer record sees all PII in plaintext.
- No protection against destructive queries — a mistyped
DELETEorDROP TABLEhas no safety net.
When the team is 5 people and everyone is a co-founder, this is manageable. At 15-20 people, with contractors, with team members joining and leaving, with RBI requiring demonstrable controls — it breaks.
Docker-on-EC2: The Deployment Gap
Without CI/CD, the deployment model is manual: build a Docker image locally, push it to a registry (or scp it to the EC2 instance), and restart the container. This means:
- Engineers need SSH or console access to EC2 to deploy.
- Deployment access and debugging access are the same permission — there is no separation.
- There is no automated gate where security controls can be enforced.
- Every deployment is a privileged operation with no audit trail beyond what CloudTrail captures at the API level.
This is not a security failing — it is a maturity stage. The team has been moving fast. But RBI compliance requires that the access to perform deployments is controlled, time-bound, and auditable.
The Solution: JIT + DAM as the First Security Investment
For a lean fintech at this stage, the right approach is not “buy a CNAPP and deploy everything.” It is: start with the two modules that directly close the RBI compliance gap, require zero infrastructure change, and deliver value the same day.
Those two modules are Cloud JIT (for AWS console access governance) and Database Activity Monitoring combined with Database JIT (for database access governance, query auditing, masking, and prevention).
Why JIT + DAM First?
- Direct RBI compliance closure. These two capabilities address the exact controls auditors ask for: privileged access governance, least privilege, audit trails, data protection.
- Zero infrastructure disruption. Cloud JIT integrates with your existing AWS IAM. Database JIT deploys as a proxy — no changes to your RDS instances, no changes to your EC2 workloads, no changes to your Docker deployment process.
- Immediate value. 30 minutes to onboard. Same-day governance. Not a 6-month implementation project.
- Foundation for growth. When you add Kubernetes, the same JIT engine extends to K8s namespaces. When you adopt AI coding agents, the same engine extends to Agentic JIT. You build the governance layer once and expand it.
Layer 1: Cloud JIT — Governing AWS Console Access for 10-15 Users
Cloud JIT replaces standing AWS console access with time-bound, approved, audited access grants.
Before: Standing Access
- 10-15 people have permanent AWS console access via IAM users or SSO assignments.
- No record of when access was last used or why it was originally granted.
- No mechanism to grant access for a specific task and revoke it when done.
- Quarterly access reviews are manual — someone opens a spreadsheet, asks “does this person still need access?”, and the answer is always “probably yes.”
After: Zero Standing Privilege
- All standing console access is removed. No engineer has permanent AdministratorAccess or PowerUserAccess.
- When access is needed, the engineer requests it — in the Cloudanix console or via Slack. They specify: which role, which duration, and why (a Jira ticket, a deployment task, a customer escalation).
- Approval happens in Slack. The Head of IT or the designated approver sees the request with full context. One click to approve. For low-risk access (ReadOnly), auto-approval policies eliminate friction.
- Access is granted for the specified window. Cloudanix assigns the permission set in AWS IAM Identity Center. The engineer SSOs into the same console they have always used — same portal, same bookmarks, zero new tooling.
- When the timer expires, access is automatically revoked. No manual cleanup. No “forgot to remove the permission.” The role assignment disappears.
- Every API call during the session is identity-stamped. CloudTrail shows exactly which human performed which actions, not just that
AdministratorAccesswas used.
What This Means for a 15-Person Team
- For the engineer: The workflow is one Slack command and a 30-second wait. Then the same console they have always used. The cognitive overhead is minimal.
- For the Head of IT: Full visibility into who has access to what, right now, at any moment. No more spreadsheets. No more quarterly reviews that are already outdated the day they are completed.
- For the RBI auditor: One-click evidence export showing every access grant, every approval, every duration, every auto-revocation. The privileged access section of the audit is answered definitively.
Deployment Access: A Specific Workflow
For a team deploying Docker images directly to EC2, the deployment flow becomes:
- Engineer finishes building and testing the Docker image.
- Engineer requests EC2 access via Slack — specifies the deployment task, attaches the relevant ticket.
- Approval is granted (or auto-approved if the team has defined deployment as a standard operation with appropriate guardrails).
- Engineer SSHs into the EC2 instance (or uses VM JIT for an even cleaner flow), deploys the container, confirms health.
- Session expires. Access revoked. Full audit trail exists for when the deployment happened, who did it, and what the justification was.
This adds governance without adding friction. The deployment still takes five minutes. It just produces an audit trail now.

Layer 2: Database JIT — Keyless, Audited Postgres Access
Database JIT replaces shared database passwords with identity-stamped, time-bound, auditable database sessions.
Before: Shared Credentials
- One or two shared database passwords (
db_reader,db_writer) that 15-20 people know. - Passwords stored in
.envfiles, local configs, maybe a shared password vault. - No way to know which human ran which query — all activity logs show the shared username.
- No separation of access levels — everyone who connects can read everything, and most can write.
- Password rotation is painful because it breaks application connections, so it rarely happens.
After: One Request, One Identity, One Session
- Engineer needs to query production Postgres — perhaps to debug a customer-reported issue.
- They request database access in Cloudanix or Slack. They specify: which database, which access level (read-only vs. write), and how long they need.
- Approval in Slack — or auto-approved for read-only access per team policy.
- They run
cdx db connect. A tunnel opens outbound from their laptop to a proxy running in the customer’s own VPC. The database stays in its private subnet. - Short-lived credentials are minted. The engineer points DBeaver, DataGrip, TablePlus, pgAdmin, or
psqlatlocalhost— it looks like a normal database. They work the way they always have. - Every query is stamped to the real human. Even though the DB sees the shared connection, Cloudanix tags each query with the engineer’s identity. The audit trail shows: “Engineer X ran
SELECT * FROM customers WHERE id = 42at 14:32:07.” - Session expires. Credentials revoked. Tunnel closed.
No Shared Passwords on Laptops
The most immediate risk-reduction: no database credential ever lives on an engineer’s machine. They authenticate with their own identity. Short-lived credentials are generated per session and discarded when the session ends.
For a fintech handling customer financial data under RBI regulation, this is the difference between “one stolen laptop exposes every customer record” and “one stolen laptop has zero database credentials on it.”
Works with Tools Engineers Already Use
Database JIT is not a browser-based SQL console. It exposes a standard database endpoint on localhost. Any tool that speaks PostgreSQL’s wire protocol connects normally:
- DBeaver — point it at
localhost:40342and query. - DataGrip — same connection string, same workflow.
- TablePlus — same.
- pgAdmin — same.
- psql CLI — same.
Zero learning curve. Zero tool migration. The only change is where the connection comes from — and that it expires.

Layer 3: Database Activity Monitoring — Query-Level Security for RBI
Database Activity Monitoring adds the preventive and detective controls that RBI compliance requires over financial data.
Dynamic Data Masking
Not every engineer who queries the database needs to see customer PII in plaintext. With DAM:
- PII masking rules are defined per role. A support engineer querying a customer record sees the account ID and status but the PAN, Aadhaar, phone number, and address are masked.
- Financial data masking ensures that transaction amounts, account balances, and routing details are visible only to roles that explicitly require them.
- Masking happens at the query layer — no changes to the database, no application modifications. The same query returns different levels of visibility depending on who is running it.
For a fintech with RBI obligations, this is the answer to: “How do you ensure that customer financial data is visible only to authorised personnel with a legitimate business need?”
Destructive Query Prevention
A mistyped DELETE FROM transactions without a WHERE clause — or a DROP TABLE during what was supposed to be a read-only debugging session — is a production incident waiting to happen.
DAM’s query prevention engine analyses queries before execution:
- Block destructive operations (DELETE, DROP, TRUNCATE) based on role, time of day, or database.
- Require explicit approval for write operations on production databases.
- Prevent mass data export — a
SELECT *on a million-row table can be flagged or blocked based on policy.
This is not monitoring after the fact. It is prevention before execution. The query that would have deleted production data never reaches the database.
Complete Audit Trail in Your Own S3
Every database interaction — every query, every connection, every row returned — is logged with:
- Identity: Which human ran this query (not which shared DB user).
- Timestamp: Exact time of execution.
- Query content: The full SQL statement.
- Result metadata: Rows returned, execution time.
- Session context: How long was the session, what was the stated purpose, who approved the access.
All audit data stays in the customer’s own S3 bucket. Data never leaves your AWS account. This is critical for RBI compliance — the audit trail itself must be protected and sovereign.
RBI Compliance Evidence: One Export
When the RBI auditor asks:
- “Who accessed customer financial data in the last 90 days?” → One query against the audit trail. Every access, every identity, every purpose.
- “How do you enforce least privilege for database access?” → JIT logs showing time-bound grants with specific access levels, auto-revocation records.
- “What controls prevent unauthorised data modification?” → Query prevention policies, with blocked-query logs as evidence they are enforced.
- “How do you protect customer PII from internal exposure?” → Dynamic masking policies, with evidence showing masked vs. unmasked access per role.
This is not a quarterly fire drill. It is continuous, systematic, always-current evidence that exists as a byproduct of the platform operating.

The Deployment: 30 Minutes, Zero Infrastructure Change
What Does Not Change
- Your EC2 instances stay exactly as they are. No agents installed.
- Your RDS Postgres stays in its private subnet. No configuration changes.
- Your Docker deployment process stays the same. No pipeline required.
- Your Bitbucket repositories are untouched.
- Your team keeps using the same IDEs, the same CLI tools, the same AWS console portal.
What Gets Added
- A Cloudanix connection to your AWS account via a read-only IAM role (for Cloud JIT).
- A containerised proxy deployed in your VPC (for Database JIT and DAM). This runs on ECS or a small EC2 instance — your choice. It handles the tunnelling between engineer laptops and your databases.
- Policy configuration: who can request what access, who approves, what auto-approves, what gets masked, what gets blocked.
Total deployment time: under 30 minutes. No scheduled maintenance window. No downtime. No migration.
Preparing for Kubernetes: Why Doing This Now Matters
A team planning to migrate from Docker-on-EC2 to Kubernetes is about to dramatically expand their access surface. Today’s access model is relatively simple:
- AWS console access (10-15 people).
- SSH to EC2 (for deployments and debugging).
- Database access (for queries and operations).
Post-Kubernetes, the access surface becomes:
- AWS console access (same).
kubectlaccess to namespaces, pods, services, config maps, secrets.- Database access (same, but now possibly from within-cluster services).
- Potentially: service mesh access, Helm/ArgoCD deployment access, container registry access.
If you implement JIT before the Kubernetes migration, adding Kubernetes JIT is a configuration change — same policy engine, same Slack approval flow, same audit trail. The foundation is already in place.
If you wait until after the migration, you are retrofitting governance onto a more complex system while simultaneously learning Kubernetes operations. That is two transformations happening at once — and the access governance one will always lose priority to “make the cluster work.”
The Architecture: Before and After
| Dimension | Before | After (JIT + DAM) |
|---|---|---|
| Console access | Standing, permanent, no record of purpose | Time-bound, approved, identity-stamped, auto-revoking |
| Database access | Shared passwords, no identity attribution | Per-session credentials, human-stamped queries, auto-expiry |
| PII protection | None — all data visible to all users | Dynamic masking based on role and purpose |
| Destructive query risk | No safety net | Prevention engine blocks risky queries before execution |
| Audit trail | CloudTrail API logs only | Full query-level audit with identity, purpose, and approvals |
| Access review | Manual spreadsheet, quarterly | Continuous, real-time, always current |
| RBI evidence | Days of manual compilation | One-click export, always audit-ready |
| Infrastructure changes | — | Zero. Same EC2, same RDS, same Docker workflow |
| Kubernetes readiness | — | Same JIT extends to K8s namespaces when ready |
Why This Is the Right Starting Point
For a lean fintech that has never purchased a security platform, the temptation is to either (a) buy everything at once (CNAPP + CSPM + CIEM + Code + JIT + DAM + workload protection) or (b) keep deferring because the decision is too big.
Neither is right. The correct answer for this stage is:
Start with the two modules that close the immediate compliance gap, require zero disruption, and establish the governance foundation that everything else builds on.
JIT + DAM is that foundation because:
- JIT answers “who has access to what, right now?” — the most fundamental security question.
- DAM answers “who touched our data, and what did they do?” — the most fundamental data protection question.
- Together they produce the evidence that RBI auditors, DPDPA compliance, and cyber-insurers require.
- They require zero infrastructure change — no agents, no pipeline modifications, no re-architecture.
- They scale naturally — from 15 users on EC2 today to 50 users on Kubernetes tomorrow.
The rest of the CNAPP+ platform — CSPM for posture management, code security for Bitbucket scanning, workload protection for container images, CIEM for identity analysis — layers on top of this foundation when the team is ready. Each module activates independently. Nothing is all-or-nothing.
Key Takeaways for Lean Indian FinTechs
-
You do not need a security team to have access governance. JIT + DAM is designed for teams of 10-20, not teams of 200. The overhead is one Slack approval per access request — not a security operations centre.
-
“Small team, high trust” is not a compliance answer. RBI auditors do not accept “we trust our engineers” as evidence of access control. They accept logs, policies, approvals, and revocation records. JIT produces all of these automatically.
-
Shared database passwords are your biggest unreported risk. A single leaked credential — on a stolen laptop, in a compromised Bitbucket repository, in an engineer’s clipboard history — exposes every customer record in your Postgres database. Database JIT eliminates this entire category of risk.
-
Starting before Kubernetes is a strategic advantage. The governance model you build now extends to K8s namespaces, cloud resources, databases, VMs, and AI agents. Build the foundation on your current simple architecture, then carry it forward.
-
The cost of not doing this is not zero. RBI non-compliance, DPDPA penalties (up to INR 250 crore), cyber-insurance rejections, failed enterprise customer security questionnaires, and the reputational cost of a data incident. For a fintech whose business is financial data, access governance is not overhead — it is infrastructure.
-
30 minutes, not 30 days. This is not a 6-month implementation project with consultants and change management. It is a 30-minute onboarding with a dedicated Slack channel where the engineers who built the product answer your questions directly.