ServiceNow
Visualize ServiceNow resources and monitor them through queries and alerts.
- Installation
- Data Model
- Types
Installation
Before configuring this integration in JupiterOne, you need to create a dedicated service account with appropriate permissions in ServiceNow:
Required in ServiceNow:
- A dedicated user account (e.g.,
JupiterOne) - A custom role with read-only access (e.g.,
jupiterone_reader) - Access Control Lists (ACLs) configured for the required tables
- Your ServiceNow instance hostname (e.g.,
yourcompany.service-now.com)
Authentication: This integration uses HTTP Basic authentication with username and password.
Required Table Access: The service account must have read access to these tables:
sys_user- for user datasys_user_group- for group datasys_user_grmember- for group membership dataincident- for incident datasys_db_object- for database object information- CMDB tables (if ingesting CMDB data) - requires the
cmdb_readerrole
Optional Permissions: If you want JupiterOne to create ServiceNow incidents from alert rules, create an additional jupiterone_incident_creator role with write access to the incident table.
Detailed setup instructions are provided in the Configuration in ServiceNow section below.
In order to allow JupiterOne to fetch data from your ServiceNow account, we recommend creating a new ServiceNow role with read-only access to your account and assigning that read-only role to a dedicated ServiceNow user.
Configuration in ServiceNow
-
Follow the ServiceNow documentation to create a new ServiceNow role called
jupiterone_reader. -
Create a new access control rule (ACL) to allow access to the
jupiterone_readerrole withType: Record,Operation: Read, andRole: jupiterone_reader. This should be enabled for the following tables (Namefield):sys_usersys_user_groupsys_user_grmemberincidentsys_db_object
-
Create a new ServiceNow User called
JupiterOne. Make a note of the new username/password; you'll need it when configuring your integration in JupiterOne. -
Open the
JupiterOneuser and assign thejupiterone_readerrole to your newly created user. Note: if ingesting any part of the cmdb, also add thecmdb_readerrole. See this link for more information. -
(OPTIONAL) For JupiterOne users who wish to create ServiceNow incidents based on JupiterOne alert rules, we suggest creating a
jupiterone_incident_creatorrole. Repeat steps 1, 2, and 4 above with the following parameters:1. ServiceNow Role:
name: jupiterone_incident_creator2. Access Control Rule (ACL) :
Type: Record,Operation: Create,Name(table): incident,Name(fields): *,Role: jupiterone_incident_creator4. Role Assignment: Assign
jupiterone_incident_creatorrole toJupiterOneuser
Configuration in JupiterOne
To install the ServiceNow integration in JupiterOne, navigate to the Integrations tab in JupiterOne and select ServiceNow. Click New Instance to begin configuring your integration.
Creating an instance requires the following:
-
The Account Name used to identify the ServiceNow account in JupiterOne. Ingested entities will have this value stored in
tag.AccountNamewhen theAccountNametoggle is enabled. -
Description to assist in identifying the integration instance, if desired.
-
Polling Interval that you feel is sufficient for your monitoring needs. You may leave this as
DISABLEDand manually execute the integration. -
Your ServiceNow Hostname (e.g.,
j1.service-now.com), Username, and Password. -
Your ServiceNow CMDB Classes to ingest, a comma separated value of classes.
Click Create once all values are provided to finalize the integration.
Advanced Options
Additional configuration can be set to customize the ingested data:
- User Configuration: Custom Fields allows for custom fields to be added to the user entity.
- User Configuration: Excluded User Classes allows for some users to be excluded based on their sysClassName.
- Host Configuration: Host Classes allows for specific sysClassNames to be mapped to the JupiterOne Device data model.
Excluded User Classes configuration option:
This J1QL Query can be executed to determine which system class names (sysClassName) of users exist within ServiceNow, after a successful job run without any User Class Exclusions:
FIND service_now_user RETURN count(service_now_user), service_now_user.sysClassName
Next steps
Now that your integration instance has been configured, it will begin running on the polling interval you provided, populating data within JupiterOne. Continue on to our Instance management guide to learn more about working with and editing integration instances.
Entities
The following entities are created:
| Resources | Entity _type | Entity _class |
|---|---|---|
| Account | service_now_account | Account |
| CMDB Host Object | service_now_cmdb_host | Host |
| CMDB Object | service_now_cmdb_object | Configuration |
| Incident | service_now_incident | Incident |
| User | service_now_user | User |
| User Group | service_now_group | UserGroup |
Relationships
The following relationships are created:
Source Entity _type | Relationship _class | Target Entity _type |
|---|---|---|
service_now_account | HAS | service_now_user |
service_now_account | HAS | service_now_group |
service_now_cmdb_object | ASSIGNED | service_now_user |
service_now_cmdb_object | CONNECTS | service_now_cmdb_object |
service_now_group | HAS | service_now_group |
service_now_group | HAS | service_now_user |
service_now_group | MANAGES | service_now_cmdb_object |
service_now_incident | ASSIGNED | service_now_user |
service_now_user | MANAGES | service_now_user |
service_now_user | MANAGES | service_now_cmdb_object |
service_now_user | OWNS | service_now_cmdb_object |
Mapped Relationships
The following mapped relationships are created:
Source Entity _type | Relationship _class | Target Entity _type | Direction |
|---|---|---|---|
service_now_cmdb_object | CONNECTS | service_now_cmdb_object | FORWARD |
Service Now Cmdb Host
service_now_cmdb_host inherits from Host
| Property | Type | Description | Specifications |
|---|---|---|---|
assetFunction | string | Derived from the property named: "asset_function" | |
assetTag | string | Derived from the property named: "asset_tag" | |
assignedTo | string | Derived from the property named: "assigned_to.value" | |
attributes | string | Derived from the property named: "attributes" | |
businessUnit | string | Derived from the property named: "business_unit.value" | |
comments | string | Derived from the property named: "comments" | |
correlationId | string | Derived from the property named: "correlation_id" | |
department | string | Derived from the property named: "department.value" | |
discoverySource | string | Derived from the property named: "discovery_source" | |
dnsDomain | string | Derived from the property named: "dns_domain" | |
environment | string | Derived from the property named: "environment" | |
hardwareStatus | string | Derived from the property named: "hardware_status" | |
hardwareSubStatus | string | Derived from the property named: "hardware_substatus" | |
installDate | number | Derived from the property named: "install_date" | |
installStatus | string | Derived from the property named: "install_status". This property shows the recovered label. | |
location | string | Derived from the property named: "location.value" | |
managedBy | string | Derived from the property named: "managed_by.value" | |
managedByGroup | string | Derived from the property named: "managed_by_group.value" | |
mode | string | Derived from the property named: "mode" | |
numericInstallStatus | string | Derived from the property named: "install_status". This property shows the raw value. | |
numericOperationalStatus | string | Derived from the property named: "operational_status". This property shows the raw value. | |
operationalStatus | string | Derived from the property named: "operational_status". This property shows the recovered label. | |
orderDate | number | Derived from the property named: "order_date" | |
ownedBy | string | Derived from the property named: "owned_by.value" | |
subcategory | string | Derived from the property named: "subcategory" | |
substatus | string | Derived from the property named: "substatus" | |
sysClassNames * | array of strings | ||
warrantyExpiration | number | Derived from the property named: "warranty_expiration" |
Service Now User
service_now_user inherits from User
| Property | Type | Description | Specifications |
|---|---|---|---|
employeeNumber | string | ||
sysClassName | string | ||
title | string |