Known Entity Classes

Entity classes are a closed set defined by Parallax. An entity submitted with an unknown class is rejected at ingest time.

The class is the broad category that enables cross-type queries: FIND Host matches EC2 instances, Azure VMs, containers, and any other entity whose class is Host.

Full Class List (41 classes)

ClassDescriptionExample Types
HostCompute hosts — servers, VMs, containersaws_ec2_instance, azure_vm, host
UserHuman or service user accountsokta_user, aws_iam_user, user
DataStoreStorage systemsaws_s3_bucket, database, datastore
CodeRepoSource code repositoriesgithub_repo, gitlab_project
FirewallNetwork access controlaws_security_group, firewall
AccessPolicyAuthorization policiesaws_iam_policy, access_policy
NetworkSegmentNetwork segments/subnetsaws_vpc, aws_subnet, network
ServiceRunning services or processesservice, microservice
CertificateTLS/SSL certificatescertificate, tls_cert
SecretSecrets and tokenssecret, aws_secret, vault_secret
CredentialCredentials and API keyscredential, api_key
KeyEncryption keysaws_kms_key, key
ContainerContainer instancesdocker_container, container
PodKubernetes podsk8s_pod, pod
ClusterKubernetes clustersk8s_cluster, eks_cluster
NamespaceKubernetes namespacesk8s_namespace, namespace
FunctionServerless functionsaws_lambda, function
QueueMessage queuesaws_sqs_queue, queue
TopicMessage topicsaws_sns_topic, topic
DatabaseDatabase instancesaws_rds_instance, postgres_db
ApplicationApplications or servicesapplication, web_app
PackageSoftware packagesnpm_package, python_package
VulnerabilitySecurity vulnerabilitiescve, vulnerability
IdentityIdentity providers/identitiesidentity, saml_identity
ProcessRunning processesprocess, daemon
FileFiles and filesystemsfile, s3_object
RegistryContainer/package registriesecr_repo, docker_registry
PolicyGeneric policiespolicy, network_policy
AccountCloud or service accountsaws_account, gcp_project
OrganizationOrganizations or tenantsorganization, company
TeamTeams or groupsteam, department
RoleRoles or job functionsaws_iam_role, okta_group
GroupGroups of entitiesgroup, ad_group
DevicePhysical or virtual devicesdevice, workstation
EndpointNetwork endpointsendpoint, api_endpoint
ScannerSecurity scannersscanner, qualys_scanner
AgentSecurity agentsagent, edr_agent
SensorTelemetry sensorssensor, network_tap
TicketTickets and issuesjira_issue, ticket
EventSecurity eventsevent, alert
GenericCatch-all for unlisted typesgeneric

Using Classes in PQL

-- All hosts (regardless of type: EC2, Azure VM, container, etc.)
FIND Host

-- All datastores not accessible publicly
FIND DataStore WITH public = false

-- All users without MFA
FIND User WITH mfa_enabled = false

-- Hosts with no EDR agent protecting them
FIND Host THAT !PROTECTS Agent

Requesting a New Class

The class list is curated and intentionally kept small (~40 values). Before requesting a new class, consider:

  1. Can it be modeled with an existing class? (e.g., use Generic for truly novel entity types)
  2. Is it used by multiple connectors, or just one? (connector-specific types should use an entity type, not a class)
  3. Would it enable useful cross-type queries that aren't possible today?

Open an issue on GitHub to propose new classes. New classes require a spec update and a minor version bump.

In Code

#![allow(unused)]
fn main() {
use parallax_core::entity::KNOWN_CLASSES;

// Validate a class string
if KNOWN_CLASSES.contains(&"Host") {
    let class = EntityClass::new("Host").unwrap();
}

// Get a &[&str] of all known classes
println!("Known classes: {:?}", KNOWN_CLASSES);
}