ServiceNow Customer Self-Service Portal: Security and Access Design
Security and access design for a customer self-service portal limits customers to the actions they need: submitting requests, tracking progress and giving feedback. This page covers portal roles, segregation of duties, audit logging, periodic access reviews, and how portal users are added and removed.
The Principle of Least Privilege in Customer Portals
A customer portal should expose only the actions a customer needs to take: submit requests, track their progress, provide feedback. Do not expose system administration, configuration, or internal workflows. A customer’s portal experience should be narrower than an employee’s.
In ServiceNow terms, this means customer users should not have the ‘admin’ role, should not see internal tables or field values, and should not be able to submit requests on behalf of another customer. Each customer account sees only its own records and tickets.
Role-Based Access for Portal Customers
Create portal roles narrowly: a ‘customer’ role with permission to view own requests, an ‘approver’ role (if customers approve requests from their team), and optionally an ‘admin’ role (for customer administrators managing portal users). Do not reuse employee roles or give customers access to backend tables.
If your customer organization has multiple locations or departments, use role hierarchy: a customer can see their own tickets; a regional approver can approve tickets within their region; a customer administrator can manage portal users within their account. Map these to ServiceNow roles and use table ACLs to enforce the boundaries.
Segregation of Duties in Portal Operations
One person should not both submit a request and approve it. If a customer approver needs to reject their own request, require a second approver from a different location or department. This prevents a single insider from bypassing policy.
Similarly, a customer should not be able to modify their own request after submission (beyond optional fields like priority). If a customer needs to change a request, they should have to resubmit for re-approval if the change is material.
Audit Evidence and Logging
Every portal action should be logged: who accessed what, when, what they viewed, what they changed. Use ServiceNow’s audit log (sys_audit table) to track these events. For high-value or sensitive requests, enable detailed audit logging so you can answer questions like ‘Did customer X view customer Y’s ticket?’
Configure field-level audit logging on sensitive fields: customer account number, pricing, delivery address. If a customer changes their delivery address, the audit log should show the old value, the new value, when, and who changed it.
Design a Portal Access Review Cycle
Conduct quarterly access reviews: pull a report of all customer portal users, group by customer organization, and send each customer administrator a list of their portal users. Ask them to confirm: is this person still active, is their role correct, should they be disabled? Document their confirmation and keep it for compliance.
This is a required control in many regulated environments (finance, healthcare, public sector). Even if it is not required by law, it catches inactive accounts and prevents privilege creep.
Prevent Unauthorized Data Exposure
Customer portals often expose sensitive data: order history, contract terms, pricing, support history. Encrypt this data in transit (HTTPS) and at rest. Do not log sensitive values in activity logs or error messages. If a customer data breach occurs, log which records were accessed, not the values themselves.
Use ServiceNow’s data masking features: customer portals can show masked credit card numbers (****1234), but not full card data. Avoid exposing internal system names, error codes, or technical details that might help attackers reconnaissance your infrastructure.
Portal User Provisioning and Deprovisioning
Do not manually create portal accounts for customers. Use automated provisioning: when a customer contract is active in ServiceNow, create a portal user; when the contract ends, disable the user. Link user creation to a provisioning workflow that requires approval and documentation.
Deprovisioning is often overlooked. When a customer organization downsizes or ends their contract, remove their portal users. Leaving inactive accounts is a security risk and a compliance liability.
Monitor Portal Activity for Anomalies
Set up alerts for unusual portal activity: a customer account accessing requests from a different customer, a customer user logging in from an unusual location, repeated failed login attempts. Investigate and disable accounts involved in suspicious activity.
This is not about invasive surveillance, but about detecting compromised accounts or malicious users. A customer account from your Tokyo office logging in from Russia at 3 AM is worth investigating.
Testing access rules instead of only documenting them
Many portal security documents describe the intended access model in clear language and then stop. The model is never tested against the actual configuration, so the first real check is an incident or an audit question. A stronger approach treats each access rule as a claim that can fail, and writes a test for it with a named expected result and evidence that the test was run.
Build the test set from the customer’s point of view. An admin account that can see everything proves nothing about what a customer sees. Create at least one test customer for each customer organization type, with the roles it should have, and log in as that customer for every test. Testing as an administrator and then assuming customers are covered is a common gap in portal reviews.
| Access case | Expected result | How to test it | Evidence kept |
|---|---|---|---|
| Customer edits the record reference in the browser address bar to open someone else’s case | Page reports the record cannot be found, and says nothing that confirms it exists | Log in as customer A and request a record number that belongs to customer B | Screenshot and the access log entry |
| Customer sees an internal work note on their own case | Note is hidden; only customer-facing comments appear | Add an internal note and confirm the customer view | Before and after view of the case |
| Customer sub-account administrator adds a user from another organization | Action refused | Attempt the addition with an address outside the organization domain | Refusal message and audit record |
| Support agent impersonates a customer to reproduce a problem | Session recorded with the agent identity and a reason | Run the impersonation and read the audit trail | Audit entries for start and end |
| Customer exports a list of their cases | Only their own records appear in the export | Export as a test customer with several linked accounts | Export file checked row by row against the access list |
Running the access test set in order
- Create the test customers and their roles in a non-production copy, and record the role names exactly as the platform stores them.
- Run the record-level cases first, because they are the ones that expose customers to each other.
- Run the field-level cases next, checking every field that carries internal notes, priority or assignment detail.
- Run the administrative cases last, including sub-account changes and impersonation, and check each audit entry for the actor, time and reason.
- Re-run the whole set after every platform upgrade and after any change to an access control list, not only before launch.
Where access rules fail in practice
The access model is rarely wrong in its design. It fails at the seams: a reporting view built by an analyst who was not told about the customer restriction, a mobile view that caches a response the web page would not show, or a new field added to a form that inherits the default visibility of its table. Each of these is found by a deliberate question asked of every change, not by the original design review. Add a line to the change template asking whether the change alters what a customer can see, and route any yes answer into the test set above.
Keep the failures themselves as a register. A short record of each access defect, its cause and the test that now catches it turns a one-off fix into a control that the next reviewer can read.
Questions security reviewers ask
How do we test a customer who manages several sub-accounts?
Create one administrator who manages two organizations and one who manages one, and check that neither can see the other organization’s users through lists, search or exports. Leaks in this area often come from list views and search indexes rather than from the record page itself, so test those views directly.
Should a customer ever see an internal note?
Not in the default design. If the business wants customers to see some agent notes, make that a deliberate, field-by-field decision, with each note type classified and approved. Visibility should be an allow-list, so a new note type is hidden until someone decides to show it.
What evidence does an auditor ask for first?
The access test results with dates, the list of roles and who approved each, and the audit trail for one sample of administrative actions. Keep the test scripts with the results so that a later reviewer can repeat the test rather than take the summary on trust.
How do we handle a support request to impersonate a customer?
Limit impersonation to a named group, require a reason that is recorded, and make the customer’s own account show that a session was opened, where your policy allows. The control is the audit record, so test that it cannot be deleted by the same role that starts the session.
For the access model these tests should cover, the roles and RACI guide is where to check who approves exceptions. The access controls review article covers the wider control set, and audit trail evidence covers how to keep the records.
Frequently asked questions
Can we allow customers to delegate portal access to a colleague?
Yes, if you have a formal delegation workflow. The requesting customer must approve the delegation, and the delegation should expire after a defined period (e.g., 30 days). Document the delegation in the audit log so you can verify who accessed what on behalf of whom.
Should customers see other customers' request templates or FAQs?
You can expose generic request templates and FAQs to all customers, as long as they contain no confidential or customer-specific information. Use a separate 'knowledge' table for public content and restrict customer portal access to it.
How do we prevent a customer from opening thousands of requests to disrupt service?
Implement rate limiting: a customer can submit up to N requests per day or per hour. After that, they get a message to contact support. Also use a request quota or cost control if applicable (e.g., limit bulk requests to a predefined budget).
Related guides
Related Oblytech services
Where this topic turns into delivery work, these are the Oblytech services that cover it.
Planning, running or fixing a ServiceNow programme? Tell us where you are and we will suggest a sensible next step.
Contact us