Skip to main content

Documentation Index

Fetch the complete documentation index at: https://conductorone-docs-ad-account-provisioning-setup.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Capabilities

ResourceSyncProvision
Accounts
Groups
Group Managed Service Accounts (gMSAs)
The Active Directory connector supports automatic account provisioning and deprovisioning. When a new account is created by C1, the account’s password is sent to a vault. Notes:
  • The connector syncs each user’s primary group membership (for example, Domain Users) via the primaryGroupID attribute. AD does not include primary groups in memberOf, so the connector resolves these automatically.
  • The connector supports syncing across multiple AD domains and forests in a single run via additional-domains configuration.
  • gMSA sync is opt-in and requires the enable-gmsa-sync flag. gMSA provisioning modifies the msDS-GroupMSAMembership security descriptor ACL.
  • The connector supports two connection modes: LDAP (default on Linux) and WinLDAP (default on Windows, uses wldap32.dll for Kerberos/GSSAPI).
  • Account provisioning (create/delete) requires LDAPS (ldaps: true).
  • When sync-scope is set to GlobalCatalog, provisioning is not supported and some profile fields may be unavailable.

Connector actions

Connector actions are custom capabilities that extend C1 automations with app-specific operations. You can use connector actions in the Perform connector action automation step. Global actions (connector-level):
Action nameAdditional fieldsDescription
enable_userresource_id (resource ID, required)Enable a disabled AD account (clears ACCOUNTDISABLE flag)
disable_userresource_id (resource ID, required)Disable an active AD account (sets ACCOUNTDISABLE flag)
lock_accountresource_id (resource ID, required)Lock an AD account — alias for disable_user, sets the ACCOUNTDISABLE UAC flag. AD has no separate lock state.
unlock_accountresource_id (resource ID, required)Unlock an AD account — alias for enable_user, clears the ACCOUNTDISABLE UAC flag.
update_user_attrsresource_type (string, required), resource_id (string, required), attrs (map, required), attrs_update_mask (string list, required)Update user attributes. Known names (for example, first_name) are mapped to AD attributes; unknown names are passed through as raw AD attribute names. Empty values clear the attribute. Uses StringField for resource_id (not ResourceIdField) because it is invoked by the SDK profile push pipeline.
lookup_userAt least one of: upn (string), sam_account_name (string), employee_id (string)Look up a user by UPN, SAM Account Name, or Employee ID and return their DN, SAM Account Name, UPN, display name, employee ID, and objectGUID
set_managerresource_id (resource ID, required), plus exactly one of: manager_resource_id (resource ID) or clear_manager (bool)Set or clear the manager attribute on a user. The handler returns the resulting manager_dn as an output for observability; manager_dn is not an input.
Resource actions (on user resources):
Action nameAdditional fieldsDescription
update_profileuser_id (resource ID, required), plus optional string fields (see Profile push attributes below), and custom_attributes (map of raw AD attribute names to values)Update a user’s profile attributes. Empty values clear the attribute in AD.
move_ouuser_id (resource ID, required), target_ou (string, required)Move a user to a different Organizational Unit. Automatically handles CN collisions by appending a numeric suffix.
Resource actions (on group resources):
Action nameAdditional fieldsDescription
createname (string, required), organizationalUnit (string, required), plus optional: sAMAccountName, description, groupScope (global/domain_local/universal), groupType (security/distribution), managedByUser (resource ID), managedByGroup (resource ID), mailEnabled (bool), primaryEmailAddress, emailAliases (string list), hideFromGAL (bool), gidNumber (int), userMembers (resource ID list), groupMembers (resource ID list)Create a new AD group with optional initial members, mail settings, and POSIX attributes
Custom PowerShell actions: You can define additional actions backed by PowerShell scripts in the config file. See Custom PowerShell Actions below.

Resources

Gather Active Directory credentials

To configure the Active Directory connector, you need an Active Directory service account with appropriate permissions. The specific permissions depend on your intended use:
  • Sync only: Read access to AD objects
  • Entitlement provisioning: Delegated rights to modify group membership
  • Account provisioning: Delegated rights to create, delete, and manage user accounts, plus LDAPS enabled
  • gMSA provisioning: Permission to modify msDS-GroupMSAMembership on gMSA objects
The service account also needs Log on as a service permission and Modify access to C:\ProgramData\ConductorOne.

Create a service account

1
Create a dedicated AD service account for the connector (for example, svc-baton). A standard domain user account with read access is sufficient for sync-only operation.
2
Grant the service account Log on as a service permission via local or domain Group Policy, depending on your environment.

Entitlement provisioning permissions

For entitlement provisioning support, the service account needs delegated rights to manage group membership.
1
Open Active Directory Users and Computers (ADUC) or run dsa.msc from the command line.
2
Right-click on your forest root (or a specific OU if you only want to provision into groups in that OU) and select Delegate Control.
3
Add the service account running the baton-active-directory service.
4
From the tasks to delegate, check the box for Modify the membership of a group.
5
Click Next, then Finish.
This delegation grants the service account the ability to provision and deprovision access from Active Directory groups, but it excludes special built-in groups like Administrators, Domain Admins, Enterprise Admins, and Schema Admins. To manage those protected groups, you must grant explicit Write Members permission on each group and update AdminSDHolder to prevent the permission from being removed:
1
For each protected group: right-click the group, click the Security tab, click Advanced, click Add, select the service account as the principal, and grant Write Members permission.
2
Run the following PowerShell script from a domain controller with domain admin credentials to ensure AdminSDHolder does not remove the permission after 60 minutes:
$domain = "REPLACE_WITH_YOUR_DOMAIN"
$samAccountName = "REPLACE_WITH_YOUR_SERVICE_ACCOUNT"
$adminSDHolderPath = "CN=AdminSDHolder,CN=System," + (Get-ADDomain).DistinguishedName

$acl = Get-Acl "AD:\$adminSDHolderPath"
$identity = New-Object System.Security.Principal.NTAccount("$domain\$samAccountName")

$rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $identity,
    [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty,
    [System.Security.AccessControl.AccessControlType]::Allow,
    [Guid]"bf967a9c-0de6-11d0-a285-00aa003049e2",  # GUID for 'member' attribute
    [System.DirectoryServices.ActiveDirectorySecurityInheritance]::None
)

$acl.AddAccessRule($rule)
Set-Acl -Path "AD:\$adminSDHolderPath" -AclObject $acl

Account provisioning permissions

User account provisioning requires ldaps: true in your config.
1
Open ADUC or run dsa.msc from the command line.
2
Right-click on your forest root (or a specific OU) and select Delegate Control.
3
Add the service account running the baton-active-directory service.
4
From the tasks to delegate, check the box for Create, delete, and manage user accounts.
5
Click Next, then Finish.
Done. Next, move on to the connector configuration instructions.

Configure the Active Directory connector

To complete this task, you’ll need:
  • The Connector Administrator or Super Administrator role in C1
  • An Active Directory service account with the appropriate permissions (see above)
The Active Directory connector is self-hosted only. It runs on a Windows or Linux server in your environment with direct network access to your domain controllers.To get started, follow the Self-hosted tab instructions.

What’s next?

Once your Active Directory connector is synced, you can use C1 to run user access reviews on AD group memberships, enable just-in-time access requests for AD groups and gMSAs, and automate provisioning workflows using connector actions.

Set up account provisioning

The Active Directory connector supports automatic account provisioning and deprovisioning. When C1 creates a new AD user account, the generated password is automatically sent to a vault. Before you begin, confirm:
  • The connector config has ldaps: true and provisioning: true
  • A vault is configured in C1 to receive the generated password
  • The service account has delegated rights to create, delete, and manage user accounts (see Account provisioning permissions above)

Configure provisioning mappings

1
In C1, navigate to Apps > Managed apps and click the name of your Active Directory application.
2
Under Accounts management, click Edit next to Provisioning.
3
From the Connector dropdown, select your Active Directory connector.The mapping fields defined by the connector’s schema appear below the dropdown.
4
Enter a CEL expression for each field. See Provisioning field reference below for guidance.Click Test next to any field to validate the expression against an existing C1 user.
5
Under Password storage, select the vault where generated passwords should be stored.
6
Click Save.

Provisioning field reference

The fields below are defined by the AD connector’s account creation schema. CEL expressions reference profile attributes accumulated from connected directory and HR apps using the pattern subject.attributes.<attribute_name>. To see which attributes are available for a given user, navigate to that user’s profile page in C1. The DN of the new account is assembled by the connector as: CN=<commonName>,<organizationalUnit>,<domain>

Required fields

UI fieldDescriptionExample expression
Common NameThe CN component of the user’s Distinguished Name. Typically the user’s full name or display name.subject.attributes.display_name
Organizational UnitThe OU path where the account will be created, without DC components. The OU must already exist in AD."OU=Users,OU=Corp"
DomainThe domain as DC components. Must match an existing domain in your AD forest."DC=example,DC=com"
Object Class(es)One or more LDAP object classes for the new user object.["user"]
Organizational Unit and Domain are almost always static strings — they don’t vary per user. Enter them as quoted literals unless your organization places users in different OUs based on a profile attribute such as department.

Optional fields

UI fieldDescriptionExample expression
Sam Account NameThe pre-Windows 2000 login name, used for DOMAIN\username authentication. Maximum 20 characters.subject.attributes.sam_account_name
User Principal NameThe UPN login name in user@domain.com format, used for modern authentication.subject.attributes.user_principal_name
EnabledWhether to enable the account immediately at creation. Defaults to false.false
Additional AttributesA map of any other LDAP attributes to set at creation time.See below.

Additional attributes

The Additional Attributes field accepts a map of raw LDAP attribute names to CEL expressions. Use this to set user attributes beyond what the named fields cover. Common examples:
LDAP attributeDescriptionExample
givenNameFirst namesubject.attributes.first_name
snLast name (surname)subject.attributes.last_name
displayNameDisplay namesubject.attributes.display_name
mailEmail addresssubject.attributes.email
departmentDepartmentsubject.attributes.department
titleJob titlesubject.attributes.job_title
companyCompany namesubject.attributes.company
managerManager (must be full DN)(see note below)
The manager attribute must be the full Distinguished Name of the manager’s AD account — for example, CN=Jane Doe,OU=Users,DC=example,DC=com. If your source directory exposes the manager’s DN directly, you can map it here. Otherwise, omit it at creation time and set it later using the set_manager connector action.

Tips and gotchas

  • sAMAccountName has a 20-character limit and cannot contain these characters: / \ [ ] : ; | = , + * ? < > @. If your naming convention could produce values longer than 20 characters, truncate or use an alternative expression.
  • userPrincipalName must be unique across the entire AD forest. A duplicate UPN causes provisioning to fail with an LDAP constraint violation error.
  • Accounts are created disabled by default. Setting Enabled to false is intentional — C1 sets the account password in a separate LDAP operation after creation. If you set Enabled to true, the account will be enabled at creation but will still have a system-generated password sent to your vault.
  • The target OU must already exist. C1 will not create missing OUs. If the OU specified in Organizational Unit doesn’t exist when provisioning runs, the request will fail.
  • objectClass order matters in LDAP. For standard AD users, ["user"] is sufficient. If your schema requires additional classes, list them in structural hierarchy order (for example, ["top", "person", "organizationalPerson", "user"]).
  • Global Catalog scope disables provisioning. If the connector’s sync-scope is set to GlobalCatalog, account provisioning is not supported. Use the default scope instead.