β οΈ UNDER DEVELOPMENT - VERY UNSTABLEβ οΈ This extension is currently under active development and is very unstable. Many features are missing or incomplete. We welcome user recommendations and feedback to help shape the extension. Please report issues and suggest features via GitHub Issues.
This extension is not developed, maintained or supported by SailPoint. It is a community effort to help manage Identity Security Cloud from Visual Studio Code.
This extension is built on top of the work done by Yannick Beot and the original SailPoint Identity Security Cloud extension. I thank him for creating the foundation that made this enhanced version possible.
This fork adds additional features including:
- Enhanced search functionality (entity list search and global search page)
- Background tenant synchronization with state management
- Improved architecture with Sync Manager, State Engine, and Adapter Layer
- Contextual help and tooltips throughout the extension
- And many more improvements based on community feedback
The SailPoint ISC Dev Tools extension makes it easy to:
- Multi-tenant Management: Connect to and manage several tenants with background synchronization
- Search & Discovery:
- Search box in entity lists (identities, roles, access profiles, etc.) for quick filtering
- Dedicated global search page with SailPoint search queries, recent searches, and quick filters
- Configuration Management: Import and export config of a tenant
- Source Management: View, edit, aggregate, test, peek, ping, clone, or reset sources
- Transform Management: View, create, edit, delete, clone, and test transforms
- Provisioning: View, create, edit, delete provisioning policies of a source
- Schema Management: View, create, edit, delete schemas of a source
- Workflow Management: View, edit, enable, disable, export, import workflows and view execution history
- Rule Management: View, create, edit, delete connector rules and export/import the script of a rule
- Service Desk: View, edit, delete service desk integrations
- Identity Management: View, edit, delete identity profiles and lifecycle states, refresh identities, search identities, comprehensive Identity Editor Panel with details, events, access, accounts, and work reassignment views
- Data Import/Export: Import/Export Accounts (import for delimited files only), uncorrelated accounts, entitlement details
- Access Management: View, edit, create, delete, export, import access profiles
- Role Management: View, edit, create, delete, export, import roles, and dimensions
- Form Management: View, edit, create, delete, export, import forms
- Attribute Management: View, edit, create, delete search attribute config and identity attributes
- Application Management: View, edit, create, delete applications
- Certification Campaigns: View, report, escalate, send reminders, reassign to access item owners or reassign based on a file, approve in bulk
For contributors and developers, comprehensive documentation is available in the docs/ directory:
- Architecture Documentation - System architecture, core components, data flow, and design patterns
- Contributing Guide - How to contribute, coding standards, and submission guidelines
- Development Guide - Setup instructions, development workflow, and debugging
Go to the extension menu or press Ctrl+Shift+X and look for the extension "SailPoint ISC Dev Tools". Click on the button Install.
The VSIX can be installed from the extension menu. Press Ctrl+Shift+X and in the menu, click Install from VSIX....
To build the extension from source:
-
Clone the repository:
git clone https://github.com/asuka-405/sp-isc-devtools_vscode.git cd sp-isc-devtools_vscode -
Install dependencies:
npm install
-
Build the extension:
npm run esbuild
-
Package as VSIX (optional):
npm install -g @vscode/vsce vsce package
For detailed development setup, see the Development Guide.
The extension supports several tenants.
Open the Command Palette with Ctrl+Shift+P (Windows or Linux) or Cmd+Shift+P (macOS) to find the command "ISC: Add tenant...".
Alternatively, you can click on the + in the SailPoint view.
You can add a tenant by using a Personal Access Token (PAT) or by using a short-lived access token (like one you can get from https://yourtenant.identitynow.com/ui/session).
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β VS Code Command Palette β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β > ISC: Add tenant... β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Add Tenant Configuration β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β Tenant Name: [company-dev____________] β β
β β Authentication Method: [PAT βΌ] β β
β β Client ID: [________________] β β
β β Client Secret: [****************] β β
β β β β
β β [ Cancel ] [ Add Tenant ] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
It is also possible to add a tenant by using the following URIs:
vscode://ArchMedia.sp-isc-devtools/addtenant?tenantName=company&accessToken=eyJh...&authenticationMethod=AccessToken or
vscode://ArchMedia.sp-isc-devtools/addtenant?tenantName=company&clientId=806c451e057b442ba67b5d459716e97a&clientSecret=***&authenticationMethod=PersonalAccessToken.
All entity list views (identities, roles, access profiles, etc.) now include a search box at the top of the page. Simply type in the search box to filter entities by name in real-time. This works with pagination - the search filters the currently loaded page.
Example: When viewing identities, type "John" in the search box to quickly find all identities with "John" in their name.
ββ Identities ββββββββββββββββββββββββββββββββββββββββββββ
β β
β Identities β
β Showing 1-25 of 150 items (paginated) β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β π [John________________] [Clear] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Name β Type β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β John Doe β Identityβ β β β
β β John Smith β Identityβ β β β
β β Johnny Johnson β Identityβ β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β [ Previous ] Page 1 of 6 [ Next ] β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The extension includes a powerful global search feature that allows you to search across multiple SailPoint ISC resources using SailPoint's native search syntax.
Accessing Global Search:
- Click the "Global Search" button in the tenant view
- Use Command Palette:
ISC: Global Search... - Right-click on a tenant in the tree view and select "Global Search"
Features:
- Search Query Input: Enter SailPoint search queries (e.g.,
name:John OR email:*@example.com) - Recent Searches: Quick access to your last 5 search queries
- Quick Filters: Pre-built filters for common searches:
- Modified Today / This Week
- Active / Inactive Identities
- Privileged Access
- Requestable Roles
- Orphan Accounts
- Search Results: View results in a table with clickable items that open the resource directly
Search Query Examples:
name:John- Find resources with "John" in the nameemail:*@example.com- Find identities with email domainlifecycleState.name:active- Find active identitiesmodified:[now-7d TO now]- Find items modified in the last 7 days
ββ Global Search βββββββββββββββββββββββββββββββββββββββββ
β β
β Search β
β Search across SailPoint ISC resources β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β π [name:John OR email:*@example.com___] β β
β β [ Search ] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Recent Searches: β
β [ name:John ] [ email:*@example.com ] β
β β
β Quick Filters: β
β ββββββββββββββββ ββββββββββββββββ βββββββββββββββββ
β β π
Modified β β β
Active β β π Privilegedββ
β β Today β β Identities β β Access ββ
β ββββββββββββββββ ββββββββββββββββ βββββββββββββββββ
β β
β Search Results (12): β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Name β Type β ID β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ€ β
β β John Doe β identity β 12345 β β β β
β β John Smith β identity β 12346 β β β β
β β Admin Role β role β 78901 β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
In the SailPoint view, right-click on a tenant to import or export config.
ββ SailPoint ISC Dev Tools ββββββββββββββββββββββββββββββ
β β
β π company-dev β
β ββ π Sources β
β ββ π Transforms β
β ββ π Workflows β
β ββ π Identity Profiles β
β β
β Right-click on tenant β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Export sp-config... β β
β β Import sp-config... β β
β β βββββββββββββββββββββββββββββββββββββββββββββ β
β β Manage Tenant Sync β β
β β Global Search β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
You can also export a single source, rule, identity profile or transform by right-clicking it and choosing "Export sp-config...".
ββ SailPoint ISC Dev Tools ββββββββββββββββββββββββββββββ
β β
β π company-dev β
β π Sources β
β π Active Directory β
β Right-click β β
β ββββββββββββββββββββββββββββββββββββββββ β
β β Export sp-config... β β
β β View Source β β
β β Edit Source β β
β β βββββββββββββββββββββββββββββββββββββ β
β β Aggregate β β
β β Test Connection β β
β ββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Or, from the Command Palette, find the command "ISC: Import config..." or "ISC: Export config...".
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β VS Code Command Palette (Ctrl+Shift+P) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β > ISC: Export config... β
β ISC: Import config... β
β ISC: Add tenant... β
β ISC: Global Search... β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Export Process: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Exporting sp-config... β β
β β [ββββββββββββββββββββββββββββ] 100% β β
β β β β
β β β Sources (15) β β
β β β Transforms (42) β β
β β β Workflows (8) β β
β β β Identity Profiles (3) β β
β β β β
β β Saved to: exportedObjects/config.json β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Finally, you can right-click a JSON file in the explorer to import it.
ββ Explorer βββββββββββββββββββββββββββββββββββββββββββββ
β β
β π project β
β π exportedObjects β
β π config.json β Right-click β
β π source-ad.json β
β π transform-email.json β
β β
β Context Menu: β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Import sp-config... β β
β β βββββββββββββββββββββββββββββββββββββββββββββ β
β β Open β β
β β Open With... β β
β ββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The extension allows you to manage rules and upload the script to a new or existing rule:
ββ Rule Editor ββββββββββββββββββββββββββββββββββββββββββ
β β
β Rule: Account Aggregation β
β Tenant: company-dev β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Script Editor β β
β β ββββββββββββββββββββββββββββββββββββββββββββ β β
β β β // Connector Rule Script β β β
β β β import sailpoint.api.* β β β
β β β β β β
β β β def result = new HashMap() β β β
β β β result.put("displayName", ...) β β β
β β β return result β β β
β β ββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β [ Test Rule ] [ Save ] [ Cancel ] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Test Results: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β Rule executed successfully β β
β β Output: { displayName: "John Doe" } β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Export and Import workflows automatically:
- Remove the properties
created,creator,modified,modifiedBy, andowner - Nullify any value that starts with
$.secrets.
The extension allows you to test the workflow:
ββ Workflow Editor ββββββββββββββββββββββββββββββββββββββ
β β
β Workflow: Onboarding Process β
β Tenant: company-dev β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Workflow Steps β β
β β β β
β β [Start] β [Create Account] β [Send Email] β β
β β β β β
β β [End Success] β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Test Workflow: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Input JSON: β β
β β { β β
β β "identityId": "12345", β β
β β "sourceId": "67890" β β
β β } β β
β β β β
β β [ Run Test ] β β
β β β β
β β Execution Result: β β
β β β Step 1: Create Account - Success β β
β β β Step 2: Send Email - Success β β
β β Status: COMPLETED β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The extension provides code snippets for quick development:
ββ Transform Editor ββββββββββββββββββββββββββββββββββββ
β β
β Type: tr-concat β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β { β β
β β "type": "concat", β β
β β "attributes": { β β
β β "values": [ β β
β β { β β
β β "type": "identityAttribute", β β
β β "attributes": { β β
β β "name": "firstName" β β
β β } β β
β β }, β β
β β { β β
β β "type": "static", β β
β β "attributes": { β β
β β "value": " " β β
β β } β β
β β }, β β
β β { β β
β β "type": "identityAttribute", β β
β β "attributes": { β β
β β "name": "lastName" β β
β β } β β
β β } β β
β β ] β β
β β } β β
β β } β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Available Snippets: β
β β’ tr-acc - Account Attribute β
β β’ tr-concat - Concatenation β
β β’ tr-date-* - Date operations β
β β’ tr-lookup - Lookup β
β β’ tr-rule - Rule reference β
β β’ ... and many more β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
This extension includes the following snippets for transforms:
| Trigger | Content |
|---|---|
tr-acc |
Account Attribute |
tr-b64-dec |
Base64 Decode |
tr-b64-enc |
Base64 Encode |
tr-concat |
Concatenation |
tr-cond |
Conditional |
tr-date-comp |
Date Compare |
tr-date-format |
Date Format |
tr-date-math |
Date Math |
tr-diacritic |
Decompose Diacritial Marks |
tr-phone |
E164 Phone |
tr-first |
First Valid |
tr-rand-string |
Generate Random String |
tr-end |
Get End of String |
tr-refattr |
Get Reference Identity Attribute |
tr-id |
Identity Attribute |
tr-indexof |
Index Of |
tr-iso3166 |
ISO3166 |
tr-last-index |
Last Index Of |
tr-leftpad |
Left Pad |
tr-lookup |
Lookup |
tr-lower |
Lower |
tr-norm |
Name Normalizer |
tr-rand-alphanum |
Random Alphanumeric |
tr-rand-num |
Random Numeric |
tr-ref |
Reference |
tr-replace |
Replace |
tr-replace-all |
Replace All |
tr-rightpad |
Right Pad |
tr-rule |
Rule |
tr-split |
Split |
tr-static |
Static |
tr-sub |
Substring |
tr-trim |
Trim |
tr-upper |
Upper |
tr-uuid |
UUID Generator |
This extension includes the following snippets for schemas:
| Trigger | Content |
|---|---|
New schema |
Create a new schema |
New attribute |
Add new attribute |
This extension includes the following snippets for schemas:
| Trigger | Content |
|---|---|
New provisioning policy |
Create a new provisioning policy |
New field |
Create a new field |
This extension includes the following snippets for forms:
| Trigger | Content |
|---|---|
New Form Input |
Create a new form input |
This extension includes the following snippets for the Public Identities Configuration:
| Trigger | Content |
|---|---|
New identity attribute |
Create a new identity attribute mapping |
The following table provides the expected column for the CSV to import Access Profiles:
| Header | M* | Description | Default Value |
|---|---|---|---|
name |
Yes | Name of the access profile | |
owner |
Yes | Owner of the access profile | |
source |
Yes | Source associated with the access profile | |
description |
No | Description of the access profile | null |
enabled |
No | Is the access profile enabled? | false |
requestable |
No | Is the access profile requestable? | false |
commentsRequired |
No | Require comments when the user requests access | false |
denialCommentsRequired |
No | Require comments when a reviewer denies the request | false |
approvalSchemes |
No | List of reviewers among APP_OWNER, OWNER, SOURCE_OWNER, MANAGER, or the name of the governance group separated by ; |
[] (No approval) |
revokeApprovalSchemes |
No | List of reviewers among APP_OWNER, OWNER, SOURCE_OWNER, MANAGER, or the name of the governance group separated by ; |
[] (No approval) |
entitlements |
No | Entitlements of the access profile | [] |
metadata |
No | Metadata of the access profile (cf. below for format) | [] |
The following table provides the expected column for the CSV to import Roles:
| Header | M* | Description | Default Value |
|---|---|---|---|
name |
Yes | Name of the role | |
owner |
Yes | Owner of the role | |
description |
No | Description of the role | null |
enabled |
No | Is the role enabled? | false |
requestable |
No | Is the role requestable? | false |
commentsRequired |
No | Require comments when the user requests access | false |
denialCommentsRequired |
No | Require comments when a reviewer denies the request | false |
approvalSchemes |
No | List of reviewers among OWNER, MANAGER, or the name of the governance group separated by ; |
[] (No approval) |
revokeCommentsRequired |
No | Require comments when the user requests revocation | false |
revokeDenialCommentsRequired |
No | Require comments when a reviewer denies the revocation request | false |
revokeApprovalSchemes |
No | List of reviewers among OWNER, MANAGER, or the name of the governance group separated by ; |
[] (No approval) |
entitlements |
No | List of entitlements | [] |
entitlements |
No | List of entitlements | [] |
accessProfiles |
No | List of access profiles | [] |
membershipCriteria |
No | Membership criteria for automatic assignment (cf. below for format) | |
dimensional |
No | Is the role dynamic? Does it support dimensions? | false |
dimensionAttributes |
No | List of attributes used for dimension, separated by ; | [] |
metadata |
No | Metadata of the role (cf. below for format) | [] |
The following table provides the expected column for the CSV to import Roles:
| Header | M* | Description | Default Value |
|---|---|---|---|
name |
Yes | Name of the dimension | |
roleName |
Yes | Name of the role | |
description |
No | Description of the role | null |
entitlements |
No | List of entitlements | [] |
accessProfiles |
No | List of access profiles | [] |
membershipCriteria |
No | Membership criteria for automatic assignment (cf. below for format) |
membershipCriteria follows kind of SCIM filters
There are 3 kind of attributes:
- Identity Attribute: the format is
identity.{attribute name}. Ex:identity.cloudLifecycleState,identity.type, etc. - Account Attribute: the format is
{source name}.attribute.{attribute name}. If the source name contains space, the source name must be put between quotes or double-quotes - Entitlements: the format is
{source name}.entitlement.{attribute name}. If the source name contains space, the source name must be put between quotes or double-quotes
| Operator | Description |
|---|---|
| eq | equals |
| ne | not equals |
| co | contains |
| sw | starts with |
| ew | ends with |
| Operator | Description |
|---|---|
| and | Logical "and" |
| or | Logical "or" |
Values must be within " or '.
Expressions can be grouped by using parenthesis. Parenthesis are mandatory for 3-level expression but are optional otherwise.
Here are a few examples extracted from the unit tests:
identity.department eq 'Customer Service' and identity.cloudLifecycleState eq 'active'
'Active Directory'.entitlement.memberOf eq 'CN=Accounting,OU=Groups,OU=Demo,DC=seri,DC=sailpointdemo,DC=com' and 'Active Directory'.attribute.departmentNumber eq '1234'
(identity.department eq 'Customer Service' and identity.cloudLifecycleState eq 'active') or (identity.cloudLifecycleState eq 'active' and identity.jobTitle co 'Accounts Payable Analyst')
The metadata column will be exported as or will be imported as:
<technicalName1>:<value1>,<value2>;<technicalName2>:<value3>
NOTE: Only technical names and values are used.
For custom metadata attribute and values, it's just the Camel Case of the display name. e.g. Domain->
domain, Back Office->backOfficeDefault metadata starts with isc. For instance, "Access Type"'s technical name is
iscAccessType
The following table provides the expected column for the CSV to import Custom Reviewer logic:
| Header | M* | Description | Supported Values |
|---|---|---|---|
reviewerAttribute |
Yes | Identity attribute used to identify the defined reviewer | id|name|email |
reviewerValue |
Yes | The value of identity attribute for the defined reviewer (e.g. the email address of the reviewer) | |
itemType |
Yes | The type of object to scope the reviewer's review items | IDENTITY|ENTITLEMENT|ACCESS_PROFILE|ROLE|ALL |
itemSelectorType |
Yes, unless itemType=ALL | The type of selector used to define the reviewer's scope | id|name|query|all** |
itemSelectorValue |
Yes, unless itemType=ALL or itemSelectorType=all | The value of the selector used to define the reviewer's scope (e.g. a valid entitlement Search Query) |
Here are a few valid examples:
reviewerAttribute,reviewerValue,itemType,itemSelectorType,itemSelectorValue
id,8e5c35894e124e81859f59030f3c4d56,IDENTITY,id,8e5c358d7a124e81859f59030f3c67ae
name,Adam.Kennedy,IDENTITY,query,"attributes.department:""Asset Management"""
email,Alan.Bandero@sailpointdemo.com,ENTITLEMENT,query,"source.name:""Active Directory"" AND privileged:true"
name,Aaron.Nichols,ACCESS_PROFILE,name,"Accounts Payable Access"
email,Anne.Arnold@sailpointdemo.com,ROLE,query,*
email,Anne.Arnold@sailpointdemo.com,ENTITLEMENT,all,
email,Anne.Arnold@sailpointdemo.com,ALL,,
The report provides a detailed overview of user access rights, including roles, access profiles, and entitlements. Auditors gain a comprehensive understanding of who has access to critical systems and data, enabling them to assess compliance with regulatory requirements and internal policies.
below are the campaign report headers:
"Campaign Name","Reviewer Name","Reviewer Email","Identity Name","Review Completed","Review Item ID","Item Review Completed","New Access","Reviewer Decision","Reviewer Comments","Access Type","Role Name","Role Description","Access Profile Name","Access Profile Description","Access Profile Privileged","Entitlement Name","Entitlement Description","Entitlement Privileged","Entitlement Attribute Value","Entitlement Source Schema Object Type","Entitlement Source Name","Entitlement Account Native ID","Entitlement Account Name"
You need to configure the path where the report will be exported
Copy this below Workflow JSON to a file and save it as .json file like: SendReminderNotificationToReviewersWorkflow.json
{
"name": "Sends Reminder Notification To Reviewers",
"description": "Sends Reminder Notification To Reviewers With Pending Items",
"modified": "2024-11-20T13:05:27.631277905Z",
"definition": {
"start": "Send Email",
"steps": {
"End Step - Success": {
"displayName": "End",
"type": "success"
},
"Send Email": {
"actionId": "sp:send-email",
"attributes": {
"body": "<p>Dear {{$.trigger.input.reviewerName}},</p>\n<p>This is a reminder that you have pending certification items requiring your action in the <strong>{{$.trigger.input.campaignName}}</strong> certification campaign.</p>\n<p>Here are your current review progress details:</p>\n<ul>\n<li><strong>Pending Items: </strong>{{$.trigger.input.pendingItems<br>}}</li>\n<li><strong>Pending Identities</strong>: {{$.trigger.input.pendingIdentities}}</li>\n<li><strong>Completed Decisions</strong>: {{$.trigger.input.completedDecisions}} </li>\n<li><strong>Completed Identities</strong>: {{$.trigger.input.completedIdentities}}</li>\n</ul>\n<p>Please note that the due date for completing your reviews is <strong>{{$.trigger.input.dueDate}}</strong>.</p>\n<p>To avoid delays and escalations, Please complete your remaining reviews.</p>\n<p>If you have any questions or need assistance, feel free to contact us.</p>\n<p>Thank you,<br>The Certification Review Team</p>",
"context": null,
"from": "",
"fromEmail": "reviews@company.com",
"recipientEmailList.$": "$.trigger.input.reviewerEmail",
"recipientEmails": "$.trigger.reviewerEmail",
"subject": "Action Required: Pending Items in {{$.trigger.input.campaignName}} Certification"
},
"displayName": "Send Reminder Notification",
"nextStep": "End Step - Success",
"type": "action",
"versionNumber": 2
}
}
},
"trigger": {
"type": "EXTERNAL",
"attributes": {
"clientId": "948fca73-4169-45c5-bbe1-06fc1f2b0a43",
"url": "/beta/workflows/execute/external/d2062dca-14ac-461d-94bc-daaf25af799c"
}
}
}
- Login to your ISC tenant as an Admin
- Navigate to Admin -> Workflows -> New Workflow -> Upload File
- Upload the workflow JSON file, then click on "Continue to Build"
- In the builder click on External Trigger node -> + New Access Token
- Save the client ID, client secret as you will need them to later in the SailPoint ISC extension
- Click on the "Send Reminder Notification" node to update the notification template.
- Save the workflow and enable it
The external JSON trigger is:
{
input:
{
reviewerName: reviewerName,
reviewerId: reviewerId,
reviewerEmail: reviewerEmail,
campaignName: campaignName,
completedDecisions: completedDecisions,
totalDecisions: totalDecisions,
pendingItems: pendingItems,
completedIdentities: completedIdentities,
totalIdentities: totalIdentities,
pendingIdentities: pendingIdentities,
dueDate: certificationDueDate
}
}
The extension supports the following settings:
-
sp-isc-devtools.report.accessProfiles.filename: Define the pattern for the folder to export access profiles.- Default value:
%x/reports/%T-AccessProfiles-%y%M%d-%h%m%s.csv
- Default value:
-
sp-isc-devtools.report.accounts.filename: Define the pattern for the folder to export accounts.- Default value:
%x/reports/%T-%S-Accounts-%y%M%d-%h%m%s.csv
- Default value:
-
sp-isc-devtools.report.uncorrelatedAccounts.filename: Define the pattern for the folder to export uncorrelated accounts.- Default value:
%x/reports/%T-%S-Uncorrelated-Accounts-%y%M%d-%h%m%s.csv
- Default value:
-
sp-isc-devtools.report.entitlements.filename: Define the pattern for the folder to export entitlement details.- Default value:
%x/reports/%T-%S-Entitlements-%y%M%d-%h%m%s.csv
- Default value:
-
sp-isc-devtools.report.roles.filename: Define the pattern for the folder to export roles.- Default value:
%x/reports/%T-Roles-%y%M%d-%h%m%s.csv
- Default value:
-
sp-isc-devtools.sP-Config.singleResource.filename: Define the pattern for the SP-Config file of a single resource (Source, Identity Profile, Connector Rule, or Transform).- Default value:
%x/exportedObjects/identitynowconfig-%t-%S-%y%M%d-%h%m%s.json
- Default value:
-
sp-isc-devtools.sP-Config.singleFile.filename: Define the pattern for the SP-Config file as a single file for multiple resources- Default value:
%x/exportedObjects/identitynowconfig-%t-%y%M%d-%h%m%s.json
- Default value:
-
sp-isc-devtools.sP-Config.multipleFiles.folder: Define the pattern for the SP-Config folder as multiple files for multiple resources. This folder is proposed.- Default value:
%x/exportedObjects
- Default value:
-
sp-isc-devtools.sP-Config.multipleFiles.filename: Define the pattern for the SP-Config filename as multiple files for multiple resources. It will be concatenated to the export folder. These filenames are not confirmed.- Default value:
%o/%S.json
- Default value:
-
sp-isc-devtools.export.forms.filename: Define the pattern to export forms from a tenant- Default value:
%x/Forms/Forms-%t-%y%M%d-%h%m%s.json
- Default value:
-
sp-isc-devtools.export.form.filename: Define the pattern to export a single form from a tenant- Default value:
%x/Forms/Form-%t-%S-%y%M%d-%h%m%s.json
- Default value:
-
sp-isc-devtools.export.workflow.filename: Define the pattern to export a single workflow from a tenant- Default value:
%x/Workflows/Workflow-%t-%S-%y%M%d-%h%m%s.json
- Default value:
-
sp-isc-devtools.treeView.pagination: Define the number of roles and access profiles that are displayed in the tree view- Default value: 100
-
sp-isc-devtools.report.campaigns.filename: Define the pattern for the folder to export access profiles.- Default value:
%x/reports/%T-Campaign-%S-%y%M%d-%h%m%s.csvThe patterns defined above use the following tokens:
- Default value:
-
%u: User Home Dir -
%w: Workspace folder -
%x: Either workspace folder if defined, or home dir -
%d: Day -
%M: Month -
%y: Year -
%h: Hour -
%m: Minute -
%s: Second -
%t: Tenant name -
%T: Tenant display name -
%o: Object type -
%S: Source name for source-based report or object name
- Version bump only. No functional or user-facing changes in this release; just trivial updates in
package.jsonandREADME.md.
- Identity Editor Panel: New comprehensive identity view with multiple tabs:
- Details Tab: View all identity attributes with pinning functionality, basic information display
- Events Tab: View all SailPoint events related to the identity
- Access Tab: View all assigned access items (roles, access profiles, entitlements)
- Accounts Tab: View all source accounts linked to the identity
- Work Reassignment Tab: View active or scheduled reassignments for the identity
- Identity Action Buttons: Added action buttons for identity management (coming soon in next version):
- Process Identity
- Set User Level
- Sync Attributes
- Set Lifecycle State
- Disable Identity
- Reset Identity
- Reset Password
- Delete Identity
- Documentation Updates: Added logo to README for better visual branding
- Website Migration: Website moved to separate repository for independent deployment
- Workflow Fixes: Fixed GitHub Actions workflow syntax errors for marketplace publishing
- Packaging Improvements: Enhanced VSIX packaging with proper file exclusions
- Testing Tools: Added local workflow testing script for development
First alpha release of SailPoint ISC Dev Tools - A comprehensive development environment for SailPoint Identity Security Cloud.
This extension provides a complete set of tools for managing, developing, and maintaining SailPoint ISC configurations, built on top of the excellent foundation by Yannick Beot's original extension.
- Entity List Search: Real-time search box in all entity list views (identities, roles, access profiles, etc.) for instant filtering
- Global Search Page: Dedicated search interface with full SailPoint search query syntax support
- Recent Searches: Quick access to your last 5 search queries
- Quick Filters: Pre-built filters for common scenarios (Modified Today/Week, Active/Inactive Identities, Privileged Access, Requestable Roles, Orphan Accounts)
- Clickable Results: Search results are directly clickable and open resources instantly
- Background Synchronization: Automatic data refresh for up to 4 active tenants simultaneously (60-second refresh interval)
- Sync Manager: Centralized sync state management with health monitoring and error tracking
- State Engine: In-memory caching of tenant data for lightning-fast access
- Sync Management UI: Visual interface to activate/pause tenant synchronization with one click
- Sync Status Indicators: Real-time sync status in tree view with health indicators (π’ Active, βΈοΈ Paused, π΄ Error)
- Adapter Layer: API-agnostic data access layer with intelligent caching and fallback mechanisms
- Command Bus: Centralized command handling with validation and event-driven architecture
- Pagination Support: Enforced 250-item limit per page for optimal performance and API compliance
- Non-blocking UI: Fully asynchronous operations ensuring responsive user experience
- Efficient Caching: Smart caching strategy reduces API calls and improves performance
- Help Service: Comprehensive contextual help system throughout the extension
- Tooltips: Helpful tooltips on all buttons, inputs, and UI elements
- Help Icons: Clickable help icons (βΉοΈ) with detailed information and documentation links
- Enhanced Tree Tooltips: Rich tooltips with sync status, health, and contextual guidance
- Documentation Links: Direct links to official SailPoint documentation where applicable
- Categorized Navigation: Organized resource hierarchy with logical categories:
- Identity Management (Identity Profiles, Identities, Identity Attributes, Search Attributes)
- Access Model (Access Profiles, Roles)
- Source Management (Sources, Transforms, Workflows, Connector Rules)
- And more...
- Improved Tree View: Enhanced tree structure with sync status indicators and icons
- Breadcrumb Navigation: Clear navigation path throughout the extension
- Quick Actions: Fast access to common operations from the home page
- SP-Config Import/Export: Full support for SailPoint configuration import/export (single file or multiple files)
- CSV Import/Export: Bulk operations for access profiles, roles, identities, accounts, and entitlements
- Account Management: Import/export accounts, uncorrelated accounts, entitlement details
- Selective Export: Choose specific resources to export
- Configuration Templates: Save and reuse common configurations
- Source Configuration: Complete source lifecycle management:
- View, edit, aggregate, test, peek, ping, clone, or reset sources
- Schema discovery and management
- Provisioning policy management
- Account and entitlement management
- Transform Editor: Full-featured transform management:
- Create, edit, delete, clone, and test transforms
- Transform evaluation with sample data
- Visual transform editor
- Transform Snippets: 30+ code snippets for quick creation of common transform patterns (tr-concat, tr-date-format, tr-lookup, etc.)
- Schema Management: View, create, edit, delete source schemas with attribute mapping
- Access Profiles: Complete access profile lifecycle:
- View, edit, create, delete, export, import access profiles
- Entitlement management
- Approval scheme configuration
- Metadata support
- Roles: Comprehensive role management:
- View, edit, create, delete, export, import roles
- Dimension support for dynamic roles
- Membership criteria with SCIM filter syntax
- Approval schemes and metadata
- Identity Profiles: View, edit, delete identity profiles and lifecycle states
- Identity Refresh: Trigger identity refresh for identity profiles
- Workflow Management: Complete workflow lifecycle:
- View, edit, enable, disable, export, import workflows
- Visual workflow editor
- Workflow testing with sample data
- Workflow Execution History: Track and monitor workflow executions
- Rule Management: View, create, edit, delete connector rules with script editing
- Cloud Rules: Support for cloud connector rules
- Forms Management: View, edit, create, delete, export, import forms
- Applications: View, edit, create, delete applications
- Application Configuration: Manage access profiles and settings for applications
- Identity Viewing: Search and view identities with detailed information
- Identity Attributes: View, edit, create, delete identity attributes
- Search Attributes: View, edit, create, delete search attribute configurations
- Attribute Sync: Trigger attribute sync and processing
- Identity Processing: Process identities and apply changes
- Campaign Management: View, report, escalate, send reminders for certification campaigns
- Bulk Operations: Reassign to access item owners or based on file
- Bulk Approval: Approve certification items in bulk
- Campaign Reports: Generate detailed campaign reports with CSV export
- Service Desk Integrations: View, edit, delete service desk integrations
- Time Check Configuration: Update time check configuration for service desk
- Governance Groups: Manage governance groups
- Transform Snippets: 30+ snippets for common transform patterns
- Schema Snippets: Quick-create schemas and attributes
- Provisioning Policy Snippets: Templates for provisioning policies
- Form Snippets: Templates for form inputs
- JSON Schemas: Full IntelliSense support with JSON schemas for:
- Access Profiles, Roles, Forms
- Identity Profiles, Lifecycle States
- Provisioning Policies, Source Schemas
- And more...
- URI Handler: Add tenants via URI scheme
- Command Palette Integration: All features accessible via VS Code command palette
- Tree View Integration: Visual tree view of all resources
- Webview Panels: Rich webview interfaces for editing and viewing resources
- Modern Webview UI: Beautiful, responsive webview interfaces
- Dark Mode Support: Full dark mode support throughout
- Keyboard Shortcuts: Comprehensive keyboard shortcuts
- Status Indicators: Visual status indicators for sync, health, and states
- Progress Tracking: Visual progress indicators for long-running operations
Built on top of the excellent work by Yannick Beot's SailPoint Identity Security Cloud extension. We extend our gratitude to Yannick for creating the foundation that made this enhanced version possible.
