PingOne Privilege

Deploying the Endpoint Controller on macOS with Jamf Pro

Deploy the Endpoint Controller to managed macOS computers with Jamf Pro to install and configure the Endpoint Controller centrally instead of sending download links to individual users.

The Jamf Pro deployment:

  • Installs the PingOne Privilege Endpoint Controller.

  • Preapproves the macOS system extensions and full disk access.

  • Generates the client configuration that the Endpoint Controller needs to register the device with PingOne Privilege.

This guide only applies to Endpoint Controller-based deployments. After deployment, users open their onboarding link to complete registration and access the PingOne Privilege user console. Learn more in Onboarding users.

Before you begin

Ensure the following:

  • You can access the Jamf Pro admin console, and the target computers are enrolled in Jamf Pro.

  • You’ve installed the Endpoint Controller. You need its Controller URL and Tenant ID.

  • You’ve generated a key pair for MDM onboarding:

    • You’ve uploaded the public key to your PingOne Privilege tenant under Settings > MDM Onboarding. Learn more in Verifying MDM onboarding in PingOne Privilege.

    • You’ve added the private key in Base64 format to your Jamf portal, typically through an extension attribute.

      PingOne Privilege supports the RSA, ECDSA, and Ed25519 algorithms.

MDM deployment doesn’t replace PingOne group access. A computer can be successfully managed by Jamf Pro and still require its user to belong to a group with access to the PingOne Privilege application. Confirm group access in Setting up your environment in PingOne before you deploy.

Deployment overview

You perform most of this deployment in the Jamf Pro admin console. The enrollment and Endpoint Controller verification steps take place on each target Mac, and the MDM onboarding verification takes place in the PingOne Privilege admin console.

Deployment consists of the following tasks:

  1. Create configuration profiles to preapprove system extensions, activate the network extension, grant full disk access, and push the onboarding configuration.

  2. Create the policies for installing the Endpoint Controller and generate the client configuration.

  3. Enroll devices and deploy to trigger automated deployment of the Endpoint Controller.

  4. Verify the deployment of the Endpoint Controller.

Create configuration profiles

Create the following configuration profiles in Jamf Pro. Each profile uses Computer Level as the level and Install Automatically as the distribution method.

Create the System Extensions profile

This profile preapproves the PingOne Privilege system extensions so users aren’t prompted in System Settings.

  1. In Jamf Pro, go to Computers > Configuration Profiles.

  2. Click New.

  3. In the General section:

    1. Enter a Name for the profile, such as PingOne Privilege System Extensions.

    2. Set Level to Computer Level.

    3. Set Distribution Method to Install Automatically.

  4. In the left sidebar, click System Extensions, then click Configure.

  5. Clear the Allow users to approve system extensions checkbox.

  6. In the Allowed System Extensions and Teams IDs section:

    1. Enter a Display name for the entry.

    2. In the System extension types list, select Non-removable system extensions.

    3. In the Team identifier field, enter 6U3RF4C84N.

    4. Under Non-removable system extensions, click Add and paste com.pingidentity.AgentLauncher.EndpointSecurity.

    5. Click Add again and paste com.pingidentity.AgentLauncher.NetworkFilter.

  7. Click Save.

Create the Content Filter profile

This profile activates the network extension.

  1. In Jamf Pro, go to Computers > Configuration Profiles.

  2. Click New.

  3. In the General section:

    1. Enter a Name for the profile, such as PingOne Privilege Content Filter.

    2. Set Level to Computer Level.

    3. Set Distribution Method to Install Automatically.

  4. In the left sidebar, click Content Filter, then click Configure.

    1. Enter a Filter name, such as PingOne Privilege.

    2. For Identifier, enter com.procyon.ai

    3. Under Filter type, select Plug-in.

    4. Under Socket Filter, select the Enabled checkbox.

    5. For Socket filter bundle identifier, enter com.pingidentity.AgentLauncher.NetworkFilter

    6. In Socket filter designated requirement, paste the following string:

      identifier "com.pingidentity.AgentLauncher.NetworkFilter" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6U3RF4C84N"
  5. Click Save.

Create the Privacy Preferences Policy Control profile

This profile grants full disk access to the endpoint security extension, which the Endpoint Controller needs to discover personal agents.

  1. In Jamf Pro, go to Computers > Configuration Profiles.

  2. Click New.

  3. In the General section:

    1. Enter a Name for the profile, such as PingOne Privilege PPPC.

    2. Set Level to Computer Level.

    3. Set Distribution Method to Install Automatically.

  4. In the left sidebar, click Privacy Preferences Policy Control, then click Configure.

  5. Under App Access, click Add.

    1. For Identifier, enter com.pingidentity.AgentLauncher.EndpointSecurity

    2. Under Identifier type, select Bundle ID.

    3. In Code requirement, paste the following string:

      identifier "com.pingidentity.AgentLauncher.EndpointSecurity" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6U3RF4C84N"
  6. In the App or Service list, find SystemPolicyAllFiles and change the list to Allow.

  7. Click Save.

Create the Onboard preference plist

This profile pushes the custom configuration variables, such as the tenant ID and user information, to the Mac.

  1. In Jamf Pro, go to Computers > Configuration Profiles.

  2. Click New.

  3. In the General section:

    1. Enter a Name for the profile, such as PingOne Privilege Onboard.

    2. Set Level to Computer Level.

    3. Set Distribution Method to Install Automatically.

  4. In the left sidebar, click Application & Custom Settings, then click Configure.

  5. Choose the option to enter Extensible Markup Language (XML) manually, or upload a PLIST, and paste the following plist, replacing the placeholders with your environment values:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
      "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>tenant</key>
        <string>[Insert Tenant ID]</string>
    
        <key>macuser</key>
        <string>$USERNAME</string>
    
        <key>privuser</key>
        <string>$USERNAME</string>
    
        <key>expiryHours</key>
        <string>$EXTENSIONATTRIBUTE_4</string>
    
        <key>privateKeyBase64</key>
        <string>$EXTENSIONATTRIBUTE_2</string>
    
        <key>controllerURL</key>
        <string>[Insert Controller URL]</string>
    </dict>
    </plist>

    The $EXTENSIONATTRIBUTE_* placeholders refer to the Jamf extension attributes that hold the private key in Base64 format and the onboarding expiry, in hours. Adjust the attribute numbers to match the extension attributes in your Jamf Pro environment.

  6. Click Save.

Create the policies

In the Jamf Pro admin console, create the policies that install the Endpoint Controller and build the user’s client configuration.

Create the agent installation policy

This policy installs the Endpoint Controller.

  1. In the Jamf Pro admin console, go to Computers > Policies and click New.

  2. In the General section:

    1. Enter a Display name, such as PingOne Privilege Agent Install.

    2. Set Trigger to Custom and enter procyon-agent-install in the text box.

    3. Set Execution frequency to Once per computer.

  3. In the left sidebar, click Packages, then click Configure.

  4. Find the PingOne Privilege .pkg file you uploaded to Jamf Pro and click Add.

  5. Click Save.

Create the configuration-creation policy

This policy is the main deployment policy. It calls the installation policy, waits for the Endpoint Controller to install, and then builds the user’s client configuration file.

  1. In Jamf Pro, go to Computers > Policies.

  2. Click New.

  3. In the General section:

    1. Enter a Display name, such as procyon-onboard.

    2. Select the Enabled checkbox.

    3. Set Trigger to Recurring Check-in (or your preferred deployment trigger).

    4. Set Execution frequency to Once per computer.

  4. In the left sidebar, click Scripts, then click Configure.

  5. Add a new script, set the priority to After, and paste the following script:

    #!/bin/sh
    # PingOne Privilege config-creation policy
    # Triggers the agent install policy, then runs until config.json is created.
    
    LOG=/var/log/pingone-privilege-postinstall.log
    log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG"; }
    
    APP="/Applications/PingOne Privilege.app"
    APP_BIN="/usr/local/bin/cyononboard"
    PREFS="/Library/Managed Preferences/com.pingidentity.privilege.onboard.plist"
    
    # Trigger the installation policy
    log "config-policy: calling custom event procyon-agent-install..."
    /usr/local/bin/jamf policy -event procyon-agent-install
    
    if [ ! -d "$APP" ]; then
        log "config-policy: agent app not installed yet - exiting 1, will retry"
        exit 1
    fi
    
    CONSOLE_USER=$(/usr/bin/stat -f%Su /dev/console 2>/dev/null)
    if [ -z "$CONSOLE_USER" ]; then
        TARGET_USER=$(/usr/libexec/PlistBuddy -c 'Print :macuser' "$PREFS" 2>/dev/null)
    else
        TARGET_USER=$CONSOLE_USER
    fi
    
    if [ -z "$TARGET_USER" ]; then
        log "config-policy: no console user and no macuser in profile - exiting 1, will retry"
        exit 1
    fi
    
    CONFIG="/Users/$TARGET_USER/.config/procyon/config.json"
    
    if [ -s "$CONFIG" ]; then
        log "config-policy: $CONFIG exists - nothing to do"
        exit 0
    fi
    
    ATTEMPTS=0
    until "$APP_BIN" >> "$LOG" 2>&1; do
        ATTEMPTS=$((ATTEMPTS + 1))
        log "config-policy: attempt $ATTEMPTS failed (MDM profile may not be installed yet)"
        if [ "$ATTEMPTS" -ge 20 ]; then
            log "config-policy: profile still missing after 20 attempts - exiting 1, Jamf will retry"
            exit 1
        fi
        sleep 30
    done
    
    if [ -s "$CONFIG" ]; then
        log "config-policy: created $CONFIG for $TARGET_USER"
        exit 0
    fi
    
    log "config-policy: cyononboard exited 0 but $CONFIG missing - exiting 1, will retry"
    exit 1
  6. Click Save.

Enroll devices and deploy

To trigger the automated deployment on a user’s Mac:

  1. On the target Mac, go to https://<your-jamf-instance>.jamfcloud.com/enroll/.

  2. Download and install the MDM profile onto the system.

After the Mac is successfully enrolled, the entire process takes place automatically in the background:

  • The configuration profiles are applied.

  • The Endpoint Controller is installed.

  • The personalized configuration file is securely generated.

On first launch, the Endpoint Controller opens, the extensions activate without prompting for manual approval in System Settings, and the users are registered when they open the application.

Verify MDM onboarding in PingOne Privilege

  1. In the PingOne Privilege admin console, go to Settings.

  2. In the MDM Onboarding section, confirm that it displays the public key from the key pair you generated. Computers use this key to enroll and verify with PingOne Privilege.

Verify the deployment

After Jamf Pro deploys the profiles and policies:

  1. In Jamf Pro, confirm that Jamf Pro installed the configuration profiles on the target computers.

  2. On a target Mac, confirm that the Endpoint Controller created the client configuration file for the user at ~/.config/procyon/config.json.

  3. On the target Mac, open the Endpoint Controller and confirm the Connection Status reports Connected.

    The General page also displays the tenant and device information.
If the Endpoint Controller displays a QR code, the device isn’t registered. Verify that the configuration-creation policy completed successfully, then have the user open the onboarding link again.