agentsclimarketplace

Orca asset profile

Skill orcasecurity/orca-skills/skills/orca-asset-profile

Full 360° security profile of any cloud asset — alerts, attack paths, compliance, permissions, exposure, sensitive data, and CDR activity in one view. Use when user asks about an asset's security posture or profile (e.g., "asset profile for web-bastion-host", "tell me about WEB-PRD", "security posture of", "show me everything about").From its SKILL.md

Install
npx -y skills add orcasecurity/orca-skills --skill orca-asset-profile

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

19.7 KB, as published. Nobody here has run it

Orca Asset Profile Skill

Answers the question: "Tell me everything about this asset in one place."

Given an asset name, ID, or ARN, provides a complete 360° security profile: all open alerts (grouped by category), attack paths, compliance violations, permissions, network exposure, sensitive data, CDR activity summary, crown jewel status, and linked entities.

Usage

/orca-asset-profile web-bastion-host
/orca-asset-profile i-1234567890abcdef0
/orca-asset-profile arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0

Or natural language:

  • "tell me about web-bastion-host"
  • "profile CI-SERVER-01-PRD"
  • "asset risk for vm-chain3-1"
  • "what do we know about this instance?"

Processing Logic

Step 1: Find the Asset

Determine the input type and use the appropriate tool:

Input PatternToolParameter
orca-XXXX (alert ID)get_asset_by_alert_idalert_id
UUID formatget_asset_by_idasset_id
vm_XXXX, AwsXXX_XXXX (asset_unique_id)get_asset_by_idasset_id + model_type
ARN format arn:aws:...get_asset_by_id or discovery_searchvaries
Name (anything else)get_asset_by_nameasset_name

If get_asset_by_name returns multiple results, show the list and ask the user to pick.

Step 2: Gather All Data (run ALL in parallel)

Once the asset is identified, extract its UUID (Inventory.id or id), asset_unique_id, group_unique_id, and ARN, then run all queries simultaneously:

Query 1: Full asset details

get_asset_by_id:
  asset_id: <asset_unique_id or group_unique_id>
  model_type: <asset type e.g. "AwsEc2Instance">

Query 2: All alerts on asset

get_asset_related_alerts_summary:
  asset_id: <UUID>

Query 3: Alert count by severity

get_asset_alerts_count_grouped_by_risk_level:
  asset_id: <UUID>

Query 4: Attack paths

get_asset_related_attack_paths_summary:
  asset_id: <UUID>

Query 5: Crown jewel status

get_asset_crown_jewel_info:
  group_unique_id: <group_unique_id>

Query 6: Compliance frameworks

get_related_compliance_frameworks_for_asset:
  asset_id: <UUID or asset_unique_id>

Query 7: Linked entities

get_linked_entities_mapping:
  asset_id: <UUID or asset_unique_id>

Query 8: CDR events (last 30 days)

search_cdr_events:
  targets: [<asset ARN or identifier>]
  time_range: "last_30_days"
  limit: 50

Query 9: CDR event summary

get_cdr_events_grouped_by_event_name:
  targets: [<asset ARN or identifier>]
  time_range: "last_30_days"

Query 10: Effective permissions (AWS IAM assets only)

get_aws_effective_permissions_policy_on_asset:
  asset_arn: <ARN>

Only call this for IAM-related assets (AwsIamRole, AwsIamUser) or assets with IAM profiles.

Step 3: Synthesize the Profile

From the gathered data, extract and organize:

Asset Identity:

  • Name, type, account, region, state
  • Public/private IPs, DNS names
  • OS, kernel, AMI/image
  • Tags (all tags)
  • Creation date, age, uptime
  • CodeOrigins (if present — IaC source)

Risk Summary:

  • Orca Score, risk level
  • Crown jewel status and reason
  • Exposure (public_facing, internal)
  • Observations (sensitive_data, brute-force_attempts, etc.)

Alerts (from related_alerts_summary): Group by category:

  • Vulnerabilities — CVEs with CVSS, exploit status
  • Misconfigurations — CSPM findings
  • Malware / Threats — detected malware, suspicious files
  • Sensitive Data — exposed secrets, PII
  • Anomalies — behavioral detections
  • IAM — overprivileged, unused access

Sort each group by Orca Score descending.

Attack Paths:

  • Count of active attack paths
  • Top attack paths with stories
  • Role of this asset in each path (entry point, pivot, target)

Compliance:

  • Applicable frameworks and scores
  • Number of failing controls per framework

Permissions (IAM assets):

  • Effective permissions count
  • Used vs unused (from CDR correlation)
  • Overprivilege assessment

CDR Activity:

  • Total events in 30 days
  • Top actions by count
  • Unique actors interacting with this asset
  • Any suspicious patterns

Linked Entities:

  • Connected assets (roles, instances, buckets, databases, load balancers)
  • Network connections
  • IAM relationships

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:

  1. Suggest what to do next — based on the highest-risk finding, recommend a specific action
  2. Offer remediation format selection — always ask: "I can generate the fix. What format do you prefer?"
  3. Supported formats: Terraform, CloudFormation, Ansible, CLI commands (aws/az/gcloud), step-by-step instructions, Pulumi, ARM/Bicep
  4. Auto-suggest the most impactful fix — don't wait for the user to ask. Proactively say "The highest-impact fix is X. Want me to generate it?"

When the user selects a format:

  • Generate the remediation code immediately
  • Write it to a file: remediate-<alert-id>.<ext> (e.g., .tf, .yml, .sh)
  • Include verification commands
  • Suggest the next fix after the first one is done

Format mapping:

User saysExtensionTemplate
Terraform.tfHCL with provider + resource blocks
CloudFormation.cfn.yamlYAML template with Parameters/Resources
Ansible.ymlPlaybook with tasks
CLI.shShell script with cloud CLI commands
InstructionsinlineNumbered step-by-step console walkthrough
Pulumi.tsTypeScript Pulumi program
ARM/Bicep.bicepBicep template

Output Format

Layer 1: Dashboard (always shown)

═══════════════════════════════════════════════════════════════════
ASSET PROFILE — <asset name>
<asset type> | <account> | <region> | <state>
═══════════════════════════════════════════════════════════════════

RISK: <Orca Score X.X> (<risk level>) | Crown Jewel: YES/NO (<score>)

┌─────────────────────────────────────────────────────────────────┐
│  ALERTS        <N> total (<X> critical, <Y> high, <Z> medium)  │
│  ATTACK PATHS  <N> active kill chains                           │
│  COMPLIANCE    <N> frameworks, <X> failing controls             │
│  EXPOSURE      <public_facing / internal> | ports: <list>       │
│  SENSITIVE     <data types — PII, secrets, keys, or "none">     │
│  PERMISSIONS   <overprivileged / right-sized / N/A>             │
│  CDR ACTIVITY  <N> events in 30d (<assessment>)                 │
│  LINKED        <N> connected assets                             │
└─────────────────────────────────────────────────────────────────┘

ASSET DETAILS:
  ID:        <instance-id / ARN / unique-id>
  IP:        <public IP> (public) / <private IP>
  OS:        <distribution + version> | EOL: <date or "supported">
  AMI/Image: <image name>
  Tags:      <key=value, key=value, ...>
  Created:   <date> (<age>)
  IaC:       <Terraform / CloudFormation / None> (from CodeOrigins)

TOP ALERTS:
  [1] <alert-id> — <title> (score: <X.X>, <category>)
  [2] <alert-id> — <title> (score: <X.X>, <category>)
  [3] <alert-id> — <title> (score: <X.X>, <category>)

RECOMMENDED ACTION:
  The highest-impact fix is <top alert/issue>. I can generate
  remediation code right now.

  What format? terraform | cloudformation | ansible | cli |
  instructions | pulumi | arm/bicep

═══════════════════════════════════════════════════════════════════
Or drill down: alerts | attack paths | compliance | permissions |
exposure | activity | linked | code origin | full
═══════════════════════════════════════════════════════════════════

Layer 2: Drill-Down Sections

"alerts" — All Alerts by Category

───────────────────────────────────────────────────────────────────
ALERTS — <asset name>
───────────────────────────────────────────────────────────────────

VULNERABILITIES (<N>):
  <alert-id>  <score>  <CVE> — <title>
              CVSS: <X.X> | Exploit: YES/NO | Fix: <version>

MISCONFIGURATIONS (<N>):
  <alert-id>  <score>  <title>
              Rule: <rule-id> | Compliance: <frameworks>

MALWARE / THREATS (<N>):
  <alert-id>  <score>  <malware name> — <classification>
              Path: <file path>

SENSITIVE DATA (<N>):
  <alert-id>  <score>  <title>
              Data type: <PII / API key / credential>

ANOMALIES (<N>):
  <alert-id>  <score>  <title>

───────────────────────────────────────────────────────────────────
NEXT STEPS:
  Triage any alert:  /orca-alert-triage <alert-id>
  Fix impact:        /orca-impact-analysis <alert-id>
  Generate fix:      Tell me which alert + format (terraform,
                     cloudformation, ansible, cli, instructions,
                     pulumi, arm/bicep)
───────────────────────────────────────────────────────────────────

"attack paths" — Kill Chains

───────────────────────────────────────────────────────────────────
ATTACK PATHS — <asset name>
───────────────────────────────────────────────────────────────────

  [1] Score: <X.X> — <attack path story>
      Role: <entry point / pivot / target>
      Steps: <N> | Crown jewel target: YES/NO

  [2] ...

BREAK THE CHAIN:
  The easiest path to break is [path #N] by fixing <alert>.
  Want me to generate the fix? Choose format: terraform |
  cloudformation | ansible | cli | instructions | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────

"compliance" — Framework Violations

───────────────────────────────────────────────────────────────────
COMPLIANCE — <asset name>
───────────────────────────────────────────────────────────────────

  <Framework Name>: <X>% (<P> pass, <F> fail)
    Failing: <control 1>, <control 2>, ...

  <Framework Name>: <X>%
    Failing: ...

───────────────────────────────────────────────────────────────────

"permissions" — IAM Analysis

───────────────────────────────────────────────────────────────────
PERMISSIONS — <asset name>
───────────────────────────────────────────────────────────────────

  Effective permissions: <N> actions across <M> services
  Used (30d):           <N> actions
  Unused:               <N> actions (candidates for removal)

  DANGEROUS PERMISSIONS:
    <permission> — <why it's dangerous>
    ...

  Recommendation: /orca-identity-review <identity name>

FIX IT:
  I can generate a least-privilege policy to replace the current
  overprivileged one. Choose format: terraform | cloudformation |
  ansible | cli | instructions | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────

"activity" — CDR Events

───────────────────────────────────────────────────────────────────
CDR ACTIVITY — <asset name> (last 30 days)
───────────────────────────────────────────────────────────────────

  Total events: <N> | Unique actions: <M> | Unique actors: <P>

  TOP ACTIONS:
    <action>  <count>  <actors>
    ...

  RECENT EVENTS:
    <date>  <action>  <actor>  <source IP>
    ...

───────────────────────────────────────────────────────────────────

"linked" — Connected Assets

───────────────────────────────────────────────────────────────────
LINKED ENTITIES — <asset name>
───────────────────────────────────────────────────────────────────

  <entity type>: <count>
    <name> (<type>) — <relationship>
    ...

───────────────────────────────────────────────────────────────────

"code origin" — IaC Source

───────────────────────────────────────────────────────────────────
CODE ORIGIN — <asset name>
───────────────────────────────────────────────────────────────────

  IaC:    <Terraform / CloudFormation / None>
  Repo:   <repository>
  File:   <file>:<lines>
  Author: <git blame author>
  Commit: <hash> "<message>"

  <code snippet>

  Full trace: /orca-config-origin <alert-id>

FIX AT SOURCE:
  I can generate the corrected IaC code. Choose format:
  terraform | cloudformation | ansible | pulumi | arm/bicep
───────────────────────────────────────────────────────────────────

"full" — Everything Expanded

Show all sections in order.

Edge Cases

Asset Not Found

⚠️ No asset found matching "<input>"

Try:
  • Check spelling
  • Use instance ID (i-XXXX) or ARN
  • Search: discovery_search for "<input>"

Multiple Assets Match Name

Show a numbered list and ask the user to pick:

Multiple assets match "bastion":
  [1] web-bastion-host (AwsEc2Instance) in 123456789012
  [2] bastion-dev (AwsEc2Instance) in 506464807365
  [3] bastion-sg (AwsSecurityGroup) in 123456789012

Which one? (enter number or be more specific)

No Alerts

ALERTS: ✅ Clean — no open alerts on this asset

No CDR Events

Note CDR retention limits (30 days) and suggest checking cloud provider audit logs directly.

MCP Tools Used

Primary Tools (always called)

ToolPurposeParameter
get_asset_by_nameFind asset by nameasset_name (substring), optional model_type
get_asset_by_idFull asset details, tags, CodeOriginsasset_id, optional model_type
get_asset_by_alert_idFind asset from alertalert_id
get_asset_related_alerts_summaryAll alerts (top 50)asset_id (UUID)
get_asset_alerts_count_grouped_by_risk_levelAlert counts by severityasset_id (UUID)
get_asset_related_attack_paths_summaryAttack paths (top 50)asset_id (UUID)
get_asset_crown_jewel_infoCrown jewel statusgroup_unique_id
get_linked_entities_mappingLinked entity countsasset_id
search_cdr_eventsAudit log eventstargets (array), time_range, limit
get_cdr_events_grouped_by_event_nameEvent summarytargets (array), time_range

Secondary Tools (called when relevant)

ToolPurposeWhen
get_related_compliance_frameworks_for_assetCompliance frameworksAlways attempted
get_aws_effective_permissions_policy_on_assetIAM permissionsAWS IAM assets only
get_linked_entities_dataDetailed linked entities"linked" drill-down
get_compliance_framework_stats_for_assetPer-framework score"compliance" drill-down
discovery_searchFallback asset searchWhen name search fails

Parameter Notes

  • asset_id for most tools = UUID from Inventory.id (e.g., c46cb523-3db4-49b0-...)
  • group_unique_id for crown jewel = from alert/asset data (e.g., vm_123456789012_i-0caf...)
  • CDR targets must be an array: ["arn:aws:..."]
  • CDR time_range is an enum: "last_24_hours", "last_3_days", "last_7_days", "last_30_days"
  • get_aws_effective_permissions_policy_on_asset takes asset_arn as a string (NOT array)

Implementation Notes

  1. Parallelize aggressively — all 10 queries in Step 2 should run simultaneously.
  2. Handle missing data gracefully — not every asset has CDR events, compliance, or permissions data.
  3. Keep the dashboard under 30 lines — details go in drill-downs.
  4. Link to other skills — suggest /orca-alert-triage, /orca-impact-analysis, /orca-config-origin for individual alerts.
  5. CodeOrigins is in the get_asset_by_id response — check data.CodeOrigins for IaC source mapping.
  6. Crown jewel score is in DetectedCrownJewelScore / DetectedCrownJewelReason in asset data.
  7. Observations array (e.g., ["public_facing", "sensitive_data", "brute-force_attempts"]) is key for quick risk assessment.

Keep looking

Skills are one crate of 628,853. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.