Explore Access Control Lists
Summarize
Summary of Explore Access Control Lists
Access Control Lists (ACLs) in ServiceNow define security rules that control user access to various objects such as tables, fields, records, and REST endpoints. Each ACL specifies a decision type (Allow-If or Deny-Unless), the object to secure, the operation permitted (create, read, write, delete, execute, etc.), and the conditions that must be met for access.
Show less
Key Features
- Decision Types:
- Deny-Unless: Denies access unless conditions are met.
- Allow-If: Allows access only if conditions are met.
- Objects and Operations: ACLs target specific objects identified by type and name, such as tables, fields, or scripted REST APIs. Operations define the permissible actions, like creating or reading records.
- Conditions: Access depends on multiple condition types:
- Requires Role: User must have specified roles.
- Security Attributes: Conditions like user authentication status.
- Data Conditions: Field values or record state conditions.
- Scripts: Custom logic evaluating to true or false.
- Applies-to Field: Enables fine-grained control by specifying which records an ACL applies to. It acts as a filter before conditions are evaluated.
- Deny by Default: If an ACL is empty or invalid (missing roles, security attributes, or with improper scripts), access is denied by default.
- ACL Evaluation Process: When access is requested, ServiceNow evaluates matching ACLs in order. The user must pass all conditions in an ACL to gain access. If access is denied by one ACL, the system checks subsequent ACLs for access until all are exhausted.
- Pre- and Post-query Checks:
- Pre-query checks evaluate field-level ACLs based solely on user roles before data retrieval.
- Post-query checks evaluate full ACL conditions, including scripts, on returned records.
- Effects of Denied Access: Depending on the operation, denial can hide fields, prevent record creation or updates, block script execution, and restrict report creation or viewing.
- ACL Matching Requirements: Different object types require matching against specific ACLs, including wild-card ACLs for broad application. For example, record access requires passing both table- and field-level ACLs.
- Multiple ACLs at Same Processing Point: If multiple ACLs match, passing any one grants access to that object and operation.
- Role Requirements for ACL Management: Administrators need the securityadmin role to create or update ACLs; others can view and debug existing ACLs.
- Scoped Applications: ACLs can be created for objects within the same application scope. For cross-scope ACLs, scripting conditions are limited or not allowed. Wild-card ACLs can only be created in the global scope or within the same scope for fields.
What This Enables You to Do
ServiceNow ACLs allow you to precisely control who can access or modify data and resources, ensuring security compliance and data integrity. By using ACLs, you can:
- Restrict access by user roles, record attributes, and custom scripts.
- Apply granular security to specific records, fields, or entire tables.
- Control access to UI components, REST APIs, and scripting endpoints.
- Manage security policies across scoped applications while respecting scope boundaries.
Key Outcomes
- Improved data security by enforcing role-based and condition-based access control.
- Prevention of unauthorized record viewing, editing, creation, or deletion.
- Enhanced compliance through explicit deny-by-default behavior on incomplete or invalid ACLs.
- Optimized system performance and security by pre- and post-query ACL checks.
- Clear administrative control over ACL creation and modification with role-based privileges.
Explore access control lists (ACLs).
- The decision type, rule type and operation which defines the ACL
- The object being secured
- The conditions required to access the object
Components of an ACL
The decision type defines whether users are allowed to access the object if conditions are met, or denies access to the object unless conditions are met.
| Decision type | Description |
|---|---|
| Deny-Unless | Restrict access to resource by explicitly denying access unless conditions are passed. See Deny-Unless ACL for more information. |
| Allow-If | Allow access to resource if conditions are passed. |
The object is the target to which access needs to be controlled. Each object consists of a type and name that uniquely identifies a particular table, field, or record. With the Applies-to field users have granular control over which specific records this ACL will apply to.
For example, all these entries specify an object:
| Type | Name | Object secured |
|---|---|---|
| record | [incident].[--None--] | The Incident table. |
| record | [incident].[active] | The Active field in the Incident table. |
| record | [incident] Applies-To: Priority = P1 |
Only Priority 1 incidents in the incident table. |
| REST_Endpoint | user_role_inheritance | The record for the user_role_inheritance Scripted REST API. |
Each operation describes a valid action the system can take on the specified object. Some objects, such as records, support multiple operations, while other objects, such as a REST_Endpoint, only support one operation.
For example, all these entries specify an operation:
| Type | Name | Operation | Operation secured |
|---|---|---|---|
| record | [incident].[-- None --] | create | Creating records in the Incident table. |
| record | [incident].[active] | write | Updating the Active field in the Incident table. |
| REST_Endpoint | user_role_inheritance | execute | Running the user_role_inheritance scripted REST API. |
- One or more user roles to the Requires role list.
- One or more security attributes must be evaluated to be true.
- One or more data conditions.
- A script that evaluates to true or false or sets the
answervariable to true or false.
To gain access to an object and operation, a user must pass all conditions listed in an access control. For example, this access control restricts access to view operations on the incident table.
To update a record in the incident table, a user must have the listed roles and the record must meet the condition.
| Condition type | Requirement | Description |
|---|---|---|
| Requires role | Requires role:itil | Only allow users with the itil role to update incidents. |
| Security Attributes | UserIsAuthenticated | Only authenticated users to update incidents. |
| Data Condition | [Incident state] [is not] [Closed] | Only allow updates to active incident records. |
Applies-to behavior
The Applies-to field determines whether an ACL applies to records, whereas data condition evaluates an ACL that's already applied. Applies-to specifies whether the ACL affects a specific record; if it's empty, the ACL applies to all records. Applies-to can be used for granular ACL enforcement whereas "Data Condition" is an evaluation criteria.
Deny by default behavior
- Defined role
- Security attribute
- Data condition
- Script
- ACLs with roles that do not exist (e.g. have no row in the database)
- ACLs with Security Attributes that do not exist (e.g. have no row in the database)
- ACLs with a script that contains "answer=true" or "true"
If the system detects the user creating an ACL it will prompt the user to select a role or an existing security attribute.
ACL evaluation process
An ACL only grants a user access to an object if the user meets all conditions required by the matching ACL.
- The condition must evaluate to true.
- The script must evaluate to true or return an answer variable with the value of true.
- The user must have one of the roles in the required roles list. If the list is empty, this condition evaluates to true.
- [Record ACLs only] The matching table-level and field-level ACLs must both evaluate to true.
Whenever a session requests data, the system searches for access control lists that match the requested object and operation. If there’s a matching access control list, then the system evaluates if the user has the conditions required to access the object and operation. If an access control list specifies more than one condition, then the user must meet all conditions to gain access to the object and operation. Failing any one condition check prevents the user from accessing the matching object and operation.
The effects of being denied access to an object depend on the ACL that the user failed. For example, failing a read operation ACL prevents the user from seeing the object. Depending on the object secured, the ACL hides a field on a form, hides rows from a list, or prevents a user from accessing a UI page. The following table contains a complete list of results of failing an ACL for a given operation and object type.
Pre and post query ACL checks
- Pre-query ACL check
-
Before your instance runs a database query, it checks the ACLs for each field in the queried table to determine which fields a user may access. This check only looks at the user's roles, and checks to see if these roles allow access to fields. Because this check runs before the query, the ACL doesn't have access to the records on the table, so it can’t take that data into account. Scripts and conditions that rely on knowing the contents of a record aren’t evaluated.
If the user doesn't have read access at this point, the value for the field isn’t shown to the user.
- Post-query ACL check
-
After the query, your instance checks each record returned by the query. During this check, there’s context for the ACL, so the role, condition, and script portions of the ACL are evaluated. If the user doesn't have read access at this point, the value for the field isn’t shown to the user, however the user sees the field label if their roles allow access to the field.
| Operation | Results of failing an ACL on object |
|---|---|
| execute | User can’t execute scripts on a record or UI page. |
| create | User can’t see the New UI action from forms. The user also cannot insert records into a table using API protocols such as web services. A create ACL with a condition requiring that a field contain a specific value may evaluate as false. Fields on new records are considered empty until the record is saved. |
| read | User can’t see the object in forms or lists. The user also can’t retrieve records using API protocols such as web services. |
| write | User sees a read-only field in forms and lists, and the user can’t update records using API protocols such as web services. |
| delete | User cannot see the Delete UI action from forms. The user also can’t remove records from a table using API protocols such as web services. |
| edit_task_relations | User cannot define relationships between task tables. |
| edit_ci_relations | User cannot define relationships between Configuration Item [cmdb_ci] tables. |
| save_as_template | Used to control the fields that should be saved when a template is created. |
| add_to_list | User can’t view or personalize specific columns in the list mechanic. |
| list_edit | User can’t update records (rows) from a list. |
| report_on | User can’t create a report on the ACL table. For more information, see Restrict report creation with an ACL rule. |
| report_view | User can’t view the content of a report on the ACL table or on the ACL field. For more information, see Reporting. |
| personalize_choices | User can’t right-click a list field and select Configure Choices. |
ACL matching requirements for objects
| Object Type | Matching ACLs Required to Access Object | Existing wild-card ACLs |
|---|---|---|
| Client-callable script includes | Users must meet the conditions of two ACLs:
|
By default, there are no wild-card (*) rules for these object types. If you create a wild-card ACL for one of these objects, then the ACL applies to all objects of this type. |
| Processors | ||
| UI pages | Users must meet the conditions of two ACLs:
|
By default, there are wild-card table rules (*) for the create, read, write, and delete operations and wild-card field rules (*.*) for the personalize_choices, create, and save_as_template operations. When you create a table, create ACLs for the table unless you want to use the provided wild-card ACLs. |
| Record |
Multiple ACLs at the same point in the processing order
If two or more ACLs match at the same point in the processing order, the user must pass any one of the ACL conditions to access the object. For example, if you create two field ACLs for incident.number, then a user who passes one ACL has access to the number field regardless of whether the user failed any other field ACL at the same point in the processing order.
Required role
Normal admin users can view and debug access control lists. However, to create or update existing access control lists, administrators must elevate privileges to the security_admin role. See Elevate to a privileged role for instructions.
ACLs in scoped applications
You can create ACLs for objects in the same scope as the ACL. You can also create ACLs for tables with at least one field that is in the same scope as the ACL.
- You can create an ACL for any table, UI page, or other object that is in the same scope as the ACL.
- You can create an ACL for a field that is in the same scope as the ACL.
- If the table is in the same scope, you can use a script to evaluate conditions.
- If the table is in a different scope, you can’t use a script to evaluate conditions.
- You can’t create or modify ACLs for objects that are in a different scope than the application you’ve selected in the application picker, including adding a role to an ACL in a different scope.
- You can create wild-card table rules (*) only in the global scope.
- You can create wild-card field rules (*) only for tables in the same scope as the ACL.