Your LLM Isn’t the Problem. Your Data Governance Is.
Why this matters right now
Most AI teams are currently doing one of two things with privacy and governance:
- Pretending “we’ll clean this up before GA”
- Assuming “the vendor handles that”
Both are wrong.
The moment you put a large language model into a workflow that touches:
- customer support tickets
- source code
- contracts / HR data / internal docs
- logs and observability data
…you’ve created a new data exfiltration surface and a new compliance system of record, whether you like it or not.
The real shift: LLMs make data retention, access control, and policy drift observable only in the breach. When something goes wrong, it’s often unreproducible and hard to prove after the fact. That’s poison for SOC2, ISO 27001, HIPAA, and any half-decent security review.
If you’re responsible for production systems, this is not about “AI ethics.” It’s:
- How do we ensure the model never sees data it shouldn’t?
- How do we prove that to an auditor?
- How do we avoid latent vendor lock-in on data and policies?
- How do we limit model risk (hallucinations, leakage, jailbreaks) with real controls, not vibes?
You don’t need a ten-person “AI risk office” to do this. You do need to re-use patterns you already know—data minimization, policy-as-code, logging, and blast radius reduction—and apply them to LLMs with intent.
What’s actually changed (not the press release)
We already had:
- Data retention policies
- Role-based access control (RBAC)
- Change management
- Audit logs
- DLP rules
LLMs change where and how those need to be enforced.
Key differences:
-
LLMs are hungry aggregators
- A support agent previously saw one ticket at a time.
- An LLM chatbot can be given all tickets for this customer plus CRM, billing, and internal notes in one prompt.
- Retrieval-augmented generation (RAG) systems routinely query across many tenants / domains unless carefully partitioned.
- Impact: A single mis-scoped retrieval query is a cross-tenant data breach.
-
Prompt context is a new data surface
- Prompts often include logs, JSON payloads, or entire documents.
- That context may never have been modeled in your privacy inventory.
- It’s often stored in:
- LLM provider logs
- Your own tracing/observability
- Fine-tuning datasets
- Impact: “We don’t store production data in this vendor” is now probably false.
-
Policy is now behavior, not just access
Traditional auth: “Can user X read record Y?”
LLM layer: “Given that user X can read Y, what may the system say about Y?”You now care about:
- Redaction rules (“never reveal the full credit card number”)
- Derived data (“don’t infer medical conditions from free-text notes”)
- Answer shaping (“don’t speculate about legal compliance”)
-
Auditability expectations have risen
SOC2 and ISO 27001-style questions you’ll start getting:
- Can you show which LLM saw which customer’s data, when, and under what policy?
- Can you prove personal data isn’t retained beyond X days across all AI components?
- Can you explain your model risk assessment and control coverage?
“We trust the vendor” is not accepted as evidence.
-
Regulators now understand “shadow AI”
Shadow IT used to be people installing random SaaS.
Shadow AI is:- an engineer piping prod logs into ChatGPT
- a PM uploading real customer contracts to a summarization tool
Several regulators and security auditors now explicitly ask how you detect and govern this class.
How it works (simple mental model)
You can reason about privacy & governance in AI as four concentric rings:
- Data ring – What raw data exists and where
- Policy ring – What rules apply to that data
- Execution ring – What code and models handle it
- Evidence ring – What proof you can show after the fact
1. Data ring: classify, minimize, isolate
- Classify data into buckets that matter to you:
- Public / Internal / Confidential / Restricted (PII/PHI/PCI/etc.)
- For each bucket, decide:
- Can this data ever be sent to:
- third-party models?
- managed models in your VPC?
- only self-hosted models?
- Maximum retention:
- in logs
- in vector stores
- in fine-tuning / training sets
- Can this data ever be sent to:
This is your data policy matrix. LLM features must align to it, not the other way around.
2. Policy ring: encode rules as code
Take the matrix and turn it into policy-as-code:
- Use something like:
- OPA / Rego
- internal DSL
- structured JSON/YAML evaluated in middleware
Policy covers:
- Which tenant/user can query which corpus
- What fields must be redacted/hashed/truncated before going to:
- external models
- internal models
- What kinds of queries are disallowed regardless of permissions (e.g., “export all SSNs”)
The goal: no prompt or retrieval step bypasses this layer.
3. Execution ring: narrow, logged pathways
Treat LLM access as you would database access:
- A single thin gateway service handles:
- provider selection
- token counting / cost limits
- prompt construction
- enforcement of policy-as-code
- logging
- All apps call the gateway, not the vendor SDK directly.
This makes it possible to:
- centrally change retention
- swap providers
- apply new guardrails
- audit usage
4. Evidence ring: logs and tests
For auditability and SOC2/ISO alignment, you need:
- Logs with:
- user/tenant ID
- data classifications touched
- model/provider used
- policy decisions (allowed/blocked/redacted fields)
- high-level prompt/response fingerprints (not necessarily full text)
- Tests that:
- feed known-bad prompts and confirm blocking/redaction
- validate cross-tenant isolation in your RAG layer
- enforce max retention in stores and logs
Now you have something you can show an auditor and trust in an incident review.
Where teams get burned (failure modes + anti-patterns)
1. “The vector DB will handle multi-tenancy”
Pattern:
- Single vector index per environment
- tenant_id stored as a metadata field
- queries rely on filters like
WHERE tenant_id = :tenant
Failure modes:
- A single missing filter = silent cross-tenant leak
- Embeddings backfill or migration scripts run without filters
- Engineers build quick admin tools that bypass filtering
Mitigation:
- Hard partition indexes per tenant or per coarse grouping
- Policy-as-code that injects AND validates filters at the gateway
- Tests that attempt cross-tenant retrieval and must fail
2. “We don’t log prompts because of PII”
Pattern:
- Fear of storing sensitive prompts → turn off logging or only log metadata.
- Debuggability tanks; incidents are guesswork.
Failure modes:
- You can’t prove what the model actually saw or said.
- You can’t tune or improve guardrails based on real failures.
Mitigation:
- Log redacted prompts:
- Strip or hash sensitive fields based on classification
- Keep structural info (length, template name, doc IDs referenced)
- For high-risk operations, enable short-lived encrypted full-text logs with strict retention (e.g., 7 days), with access tied to incident workflow.
3. “The provider says they don’t train on our data, so we’re good”
Pattern:
- Treating “no training on your inputs” as equivalent to “no risk.”
Failure modes:
- Provider still logs:
- prompts
- responses
- error traces
- metadata
- Those logs may:
- live longer than your own retention policy
- be accessible to support staff
- be replicated across regions
Mitigation:
- Vendor review checklists that require:
- explicit retention windows for logs
- data residency guarantees if needed
- documentation of support access paths
- Map vendor guarantees to your own data matrix:
- Which categories are allowed with which vendors
4. “Rely on jailbreak detection as primary defense”
Pattern:
- Deploy general-purpose jailbreak classifiers or guardrail libraries.
- Assume they will catch sensitive queries.
Failure modes:
- Domain-specific leaks (e.g., inferring M&A info, internal code names) not recognized as “sensitive.”
- Clever prompts that encode secrets indirectly.
Mitigation:
- Guardrails are supplements, not primary controls.
- Primary control:
- never send high-impact secrets to models that don’t need them
- strong contextual access controls and query rewriting
- Use guardrails mostly for:
- reducing harmful content
- catching obvious exfiltration attempts
- adding defense-in-depth, not satisfying policy on their own
5. “Shadow AI isn’t my problem; that’s IT’s”
Pattern:
- Engineering focuses on official systems; ignores employees pasting data into generic chatbots.
Failure modes:
- Real leaks through personal or team-level tools.
- Inconsistent messaging to auditors and customers.
Mitigation:
- Publish a simple, enforceable AI use policy:
- Which tools are approved
- Which data categories are never allowed in public tools
- Where to request new tools
- Provide a safe internal alternative (even if minimal) so people don’t reach for public tools by default.
Practical playbook (what to do in the next 7 days)
You don’t need to solve everything. You do need to move from “hope” to “deliberate.”
Day 1–2: Inventory and classification
- List current and near-term LLM use cases:
- customer-facing chatbots
- internal copilots
- RAG search
- batch summarization / classification
- For each, identify:
- data sources touched (DBs, S3 buckets, indexes, logs)
- data categories (PII, financial, HR, code, etc.)
- current sinks (providers, vector DBs, logs, metrics, tracing)
Outcome: A rough data flow diagram with data classifications on each edge.
Day 3: Define your minimal data policy matrix
For each data category (columns) and each processing context (rows: public LLM, vendor in VPC, self-hosted, vector DB, logging):
- Decide:
- Allowed? (Y/N)
- Max retention
- Required transformations (redact, hash, truncate, tokenize)
- Get quick alignment with security/compliance; don’t aim for perfection.
Outcome: A v0 policy you can actually implement.
Day 4–5: Centralize the LLM gateway
If you don’t have one:
- Create a minimal service or library that:
- wraps all calls to external LLMs
- takes:
user_id,tenant_id,data_categories,purpose
- checks the policy matrix (hard-coded or policy-as-code)
- logs decisions + high-level usage
- Start migrating at least one production use case to it.
If you already have one:
- Ensure it:
- enforces tenant filters for retrieval
- redacts fields based on data category
- tags every call with purpose and classifications
Outcome: A single choke point for policy enforcement.
Day 6: Instrument evidence
- Configure logging to include:
- who/what called the gateway
- which policies were applied
- which data sources were touched (by ID/category)
- Add at least 2–3 governance-focused tests:
- cross-tenant retrieval attempts must fail
- prompts including disallowed categories to external models must be blocked or transformed
- retention tests (e.g., data older than 30 days not retrievable)
Outcome: First version of a privacy & governance test suite.
Day 7: Tame shadow AI
- Publish a concise internal AI usage guideline (1–2 pages):
- Approved tools and boundaries
- Concrete examples of do/don’t with production data
- Provide at least one sanctioned, logged internal LLM endpoint (through your gateway), even if limited.
Outcome: Reduced risk surface outside formal systems, plus a story you can tell auditors.
Bottom line
LLMs didn’t invalidate privacy, security, or compliance fundamentals; they made your sloppy edges extremely expensive.
If you:
- classify data and decide where it may go,
- encode that as policy-as-code in front of all models,
- log enough to replay and prove behavior,
…you’re 80% of the way to sane AI governance, SOC2/ISO alignment, and credible model risk management.
If you don’t, your real risk isn’t that “the AI goes rogue.”
It’s that your own systems quietly, faithfully route the wrong data to the wrong place—and you only find out when someone else shows you the transcript.
