Orca Data Exposure Skill
Answers the question: "Where is our sensitive data, is it protected, and what's at risk right now?"
Provides a DSPM (Data Security Posture Management) view: discovers sensitive data across the environment (secrets, PII, credentials, API keys, financial data), identifies unprotected or exposed data stores, ranks data risks by exposure level, and generates a remediation plan to secure the most critical data first.
Usage
/orca-data-exposure
/orca-data-exposure secrets
/orca-data-exposure account 123456789012
Or natural language:
- "where's our sensitive data?"
- "find exposed API keys"
- "what PII is at risk?"
- "data exposure report"
- "show me unprotected data stores"
- "DSPM summary"
Processing Logic
Step 1: Determine Scope
Parse user input:
- All data types: no argument → full DSPM view
- Specific type: "secrets" / "PII" / "credentials" / "API keys" → filter
- Account-specific: "account 123456789012" → filter by account
- Asset-specific: "data on bastion-admin" → filter by asset
Step 2: Gather Data (run ALL in parallel)
Run 6 discovery_search queries covering different data exposure categories:
Query 1: Exposed secrets and credentials
discovery_search:
search_phrase: "exposed secrets credentials API keys passwords"
limit: 10
Query 2: PII exposure
discovery_search:
search_phrase: "sensitive data PII personally identifiable information exposed"
limit: 10
Query 3: Unencrypted data stores
discovery_search:
search_phrase: "unencrypted S3 buckets databases storage with sensitive data"
limit: 10
Query 4: Public data stores with sensitive content
discovery_search:
search_phrase: "publicly accessible storage buckets with sensitive data or secrets"
limit: 10
Query 5: Sensitive data on internet-facing assets
discovery_search:
search_phrase: "internet facing assets with sensitive data or secrets"
limit: 10
Query 6: Certificate and key exposure
discovery_search:
search_phrase: "exposed private keys certificates TLS SSL"
limit: 10
Step 3: Enrich Critical Findings
For the top 5 most critical data exposure findings, run in parallel:
Per asset:
get_asset_related_alerts_summary:
asset_id: <UUID>
get_asset_crown_jewel_info:
group_unique_id: <group_unique_id>
Step 4: Compliance Context
Check data protection compliance:
get_enabled_compliance_frameworks:
(no filters)
Extract data-relevant frameworks and scores:
- PCI DSS (payment card data)
- HIPAA (health data)
- GDPR (EU personal data)
- SOC 2 (security controls)
- CIS Benchmarks (encryption, access controls)
Step 5: Classify and Rank
Data Risk Classification
CRITICAL — Immediate data breach risk:
• Secrets/credentials on public-facing assets
• PII in publicly accessible storage
• Unencrypted database with sensitive data exposed to internet
• API keys/tokens in container images or public repos
HIGH — Significant exposure:
• Secrets on internal assets with other vulnerabilities
• Unencrypted data stores with sensitive content
• PII without encryption at rest
• Credentials in environment variables or config files
MEDIUM — Suboptimal protection:
• Encrypted but overly permissive access to sensitive data
• Secrets in private storage but without rotation
• PII with encryption but weak access controls
LOW — Minor gaps:
• Internal data stores with proper encryption but missing audit logging
• Secrets managed properly but rotation overdue
Data Type Classification
Group findings by data type:
- Secrets & Credentials: API keys, passwords, tokens, connection strings
- PII (Personally Identifiable Information): names, emails, SSNs, addresses, phone numbers
- Financial Data: credit card numbers, bank accounts, payment tokens
- Health Data (PHI): medical records, insurance IDs, health information
- Private Keys & Certificates: TLS/SSL private keys, SSH keys, signing certificates
- Infrastructure Secrets: cloud access keys, database passwords, service account keys
Proactive Remediation Behavior
CRITICAL: Never leave the user with just data. After EVERY output layer, suggest the next action and offer to generate remediation code.
After the dashboard and after every drill-down section:
- Suggest what to do next — based on the data risk, recommend the most urgent fix
- Offer remediation format selection — always ask: "I can generate the fix. What format do you prefer?"
- Supported formats: Terraform, CloudFormation, Ansible, CLI commands (aws/az/gcloud), step-by-step instructions, Pulumi, ARM/Bicep
- Auto-suggest the most critical fix — proactively say "The #1 priority is rotating the exposed API key on X. Want me to generate the rotation script?"
When the user selects a format:
- Generate the remediation code immediately (secret rotation, bucket policies, encryption configs, access controls)
- Write it to a file:
secure-data-<asset-name>.<ext>(e.g.,.tf,.yml,.sh) - Include verification commands
- Suggest the next data exposure to fix after the first one is done
Format mapping:
| User says | Extension | Template |
|---|---|---|
| Terraform | .tf |
HCL with bucket policy / encryption / KMS resources |
| CloudFormation | .cfn.yaml |
YAML template with security resources |
| Ansible | .yml |
Playbook with data protection tasks |
| CLI | .sh |
Shell script with aws/az/gcloud CLI commands |
| Instructions | inline | Numbered step-by-step console walkthrough |
| Pulumi | .ts |
TypeScript Pulumi program |
| ARM/Bicep | .bicep |
Bicep template |
Output Format
Layer 1: Dashboard
═══════════════════════════════════════════════════════════════════
DATA EXPOSURE REPORT — <scope>
<date> | <account scope>
═══════════════════════════════════════════════════════════════════
DATA POSTURE: <assessment — 1 line>
┌─────────────────────────────────────────────────────────────────┐
│ TOTAL FINDINGS <N> data exposure alerts │
│ CRITICAL <N> — immediate breach risk │
│ HIGH <N> — significant exposure │
│ SECRETS <N> exposed credentials/API keys/tokens │
│ PII <N> assets with personally identifiable data │
│ PUBLIC DATA <N> publicly accessible data stores │
│ UNENCRYPTED <N> data stores without encryption │
│ CROWN JEWELS <N> data findings on critical assets │
│ COMPLIANCE <frameworks with data requirements> │
└─────────────────────────────────────────────────────────────────┘
TOP DATA RISKS:
[1] <alert-id> — <title> (score: <X.X>)
<asset> | <data type> | <exposure: public/internal>
[2] <alert-id> — <title> (score: <X.X>)
<asset> | <data type> | <exposure>
[3] <alert-id> — <title> (score: <X.X>)
<asset> | <data type> | <exposure>
[4] <alert-id> — <title> (score: <X.X>)
[5] <alert-id> — <title> (score: <X.X>)
RECOMMENDED ACTION:
Priority #1: <top data risk — e.g., "Rotate the exposed API
key on <asset> and move to Secrets Manager.">
I can generate the fix right now.
What format? terraform | cloudformation | ansible | cli |
instructions | pulumi | arm/bicep
═══════════════════════════════════════════════════════════════════
Or drill down: secrets | pii | public data | unencrypted |
compliance | accounts | remediation plan | full
═══════════════════════════════════════════════════════════════════
Layer 2: Drill-Down Sections
"secrets" — Exposed Secrets & Credentials
───────────────────────────────────────────────────────────────────
SECRETS & CREDENTIALS — Exposed
───────────────────────────────────────────────────────────────────
CRITICAL (rotate immediately):
<alert-id> <score> <title>
Asset: <asset> (<type>) in <account>
Secret type: <API key / password / token / connection string>
Location: <file path / env var / config>
Exposure: <public / internal>
Fix: Rotate secret, move to secrets manager
...
HIGH (rotate soon):
...
SUMMARY:
Total exposed secrets: <N>
Public-facing: <N> (CRITICAL)
Internal only: <N> (HIGH)
Types: <breakdown by secret type>
RECOMMENDED ACTIONS:
1. Rotate all publicly exposed secrets NOW
2. Move secrets to AWS Secrets Manager / Azure Key Vault / GCP Secret Manager
3. Scan code repos for committed secrets
4. Implement secret detection in CI/CD pipeline
FIX NOW:
I'll generate rotation scripts and Secrets Manager configs.
Choose format: terraform | cloudformation | ansible | cli |
instructions | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────
"pii" — PII Exposure
───────────────────────────────────────────────────────────────────
PII EXPOSURE — Personally Identifiable Information
───────────────────────────────────────────────────────────────────
<alert-id> <score> <title>
Asset: <asset> in <account>
PII types: <names / emails / SSNs / addresses / phone>
Records: <estimated count if available>
Encrypted: YES/NO
Access: <public / internal / restricted>
Compliance: <GDPR / HIPAA / PCI affected>
...
COMPLIANCE IMPACT:
GDPR: <N> findings with EU personal data
HIPAA: <N> findings with health data
PCI DSS: <N> findings with payment data
───────────────────────────────────────────────────────────────────
"public data" — Publicly Accessible Data Stores
───────────────────────────────────────────────────────────────────
PUBLIC DATA STORES — Internet Accessible
───────────────────────────────────────────────────────────────────
⚠ <storage name> (<type>) in <account>
Access: PUBLIC READ / PUBLIC WRITE / PUBLIC LIST
Content: <data types detected>
Sensitive: YES — <what sensitive data>
Encryption: <encrypted / NOT encrypted>
Fix: <specific action — remove public access, add auth>
⚠ <database name> (<type>) in <account>
Access: Internet-facing on port <port>
Auth: <strong / weak / default / none>
Content: <data types>
Fix: <action>
LOCK IT DOWN:
I can generate bucket policies, access controls, and
encryption configs. Choose format: terraform | cloudformation |
ansible | cli | instructions | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────
"unencrypted" — Unencrypted Data Stores
───────────────────────────────────────────────────────────────────
UNENCRYPTED DATA STORES
───────────────────────────────────────────────────────────────────
<storage/database name> (<type>) in <account>
Contains: <data types>
Sensitive data: YES/NO
Encryption at rest: MISSING
Encryption in transit: <YES/NO>
Fix: Enable <SSE-S3/SSE-KMS/AES-256/TDE>
...
SUMMARY:
Total unencrypted: <N>
With sensitive data: <N> (PRIORITY)
Without sensitive data: <N> (still fix)
ENABLE ENCRYPTION:
I'll generate encryption configs for all unencrypted stores.
Choose format: terraform | cloudformation | ansible | cli |
instructions | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────
"compliance" — Data Protection Compliance
───────────────────────────────────────────────────────────────────
DATA PROTECTION COMPLIANCE
───────────────────────────────────────────────────────────────────
Framework Score Data Controls Status
─────────────────────────────────────────────────────
PCI DSS v4.0 <X>% <N> failing ⚠ GAPS
HIPAA <X>% <N> failing ⚠ GAPS
GDPR <X>% <N> failing ⚠ GAPS
SOC 2 <X>% <N> failing ✓ OK
...
DATA-SPECIFIC CONTROL FAILURES:
<control> — <description> (<N> assets)
<control> — <description> (<N> assets)
...
───────────────────────────────────────────────────────────────────
"accounts" — Data Risk by Account
───────────────────────────────────────────────────────────────────
DATA RISK BY ACCOUNT
───────────────────────────────────────────────────────────────────
Account Secrets PII Public Unencrypted
────────────────────────────────────────────────────────────
<account-1> <N> <N> <N> <N>
<account-2> <N> <N> <N> <N>
...
WORST ACCOUNT: <account> — <why>
───────────────────────────────────────────────────────────────────
"remediation plan" — Prioritized Data Protection Plan
───────────────────────────────────────────────────────────────────
DATA PROTECTION REMEDIATION PLAN
───────────────────────────────────────────────────────────────────
PHASE 1: STOP THE BLEEDING (immediate)
[ ] Rotate <N> publicly exposed secrets
[ ] Remove public access from <N> data stores with sensitive data
[ ] Add authentication to <N> exposed databases
PHASE 2: ENCRYPT EVERYTHING (this week)
[ ] Enable encryption at rest on <N> data stores
[ ] Enable encryption in transit where missing
[ ] Move <N> secrets to managed secrets service
PHASE 3: ACCESS CONTROLS (this month)
[ ] Implement least-privilege access to data stores
[ ] Enable audit logging on all sensitive data stores
[ ] Set up automated secret rotation
PHASE 4: GOVERNANCE (ongoing)
[ ] Implement data classification policy
[ ] Deploy DLP controls
[ ] Set up continuous monitoring for new data exposure
[ ] Regular compliance audits
ESTIMATED IMPACT:
Phase 1: Eliminates <N> critical data exposure alerts
Phase 2: Resolves <N> encryption compliance failures
Phase 3: Reduces unauthorized access risk by ~<X>%
START NOW:
Tell me which phase to begin and your preferred format.
I'll generate implementation code for each fix.
Format: terraform | cloudformation | ansible | cli |
instructions | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────
"full" — Everything Expanded
Show all sections in order.
Edge Cases
No Sensitive Data Found
✅ No exposed sensitive data detected.
Your data protection posture appears clean. Consider:
• Verify Orca DSPM scanning is enabled for all accounts
• Check data classification settings
• This scan covers known patterns — custom sensitive data may need custom rules
Massive Data Exposure (> 50 findings)
⚠ Significant data exposure: <N> findings detected.
Showing top 10 by risk. This indicates a systemic data protection gap.
Recommendations:
1. Prioritize: Fix publicly exposed data stores first
2. Automate: Deploy encryption-by-default policies
3. Prevent: Add pre-commit hooks for secret detection
4. Monitor: Set up real-time alerts for new public data stores
Secret Already Rotated
Some secrets may already be rotated but the alert remains open. Note:
Note: Verify if this secret has already been rotated.
If rotated, the alert may close on next Orca scan.
If not rotated, treat as active exposure.
MCP Tools Used
Primary Tools
| Tool | Purpose | Parameter |
|---|---|---|
discovery_search |
Find data exposure findings | search_phrase, limit |
get_asset_related_alerts_summary |
All alerts on data-holding assets | asset_id (UUID) |
get_asset_crown_jewel_info |
Crown jewel status of data stores | group_unique_id |
get_enabled_compliance_frameworks |
Data protection compliance scores | optional filters |
Secondary Tools
| Tool | Purpose | When |
|---|---|---|
get_asset_by_id |
Full asset details | Drill-down on specific data store |
get_compliance_framework_control_tests |
Failing data controls | "compliance" drill-down |
search_cdr_events |
Who accessed the data store | Investigation |
get_linked_entities_mapping |
What connects to the data store | Access analysis |
Parameter Notes
discovery_searchmax 10 results per query — use multiple queries with different search phrases to cover all data types- Crown jewel check is important for data stores — databases and storage with critical data are often crown jewels
- Compliance frameworks with data protection requirements: PCI DSS, HIPAA, GDPR, SOC 2
Implementation Notes
- 6 parallel discovery_search queries cover secrets, PII, public data, unencrypted stores, internet-facing data, and certificates.
- Data type classification is key — different data types have different compliance implications.
- Public + sensitive is always CRITICAL — publicly accessible data with sensitive content is the highest priority.
- Secrets should be rotated, not just hidden — always recommend rotation for exposed credentials.
- Compliance mapping adds business context — "this violates PCI DSS" gets more traction than "this is exposed".
- Link to other skills — suggest
/orca-alert-triage <alert-id>for individual findings,/orca-exposure-mapfor full attack surface,/orca-asset-profilefor data store details. - Remediation plan should be phased — don't overwhelm with 50 things to fix at once.