Connect Jamf Pro to Smallstep
Smallstep can integrate with Jamf Pro to synchronize your device inventory, and enroll your fleet with Smallstep using the Smallstep Agent. In this document, we will configure your Jamf Pro instance for use with your Smallstep team.
You will need:
- A Smallstep team
- A Jamf Pro tenant
- A package distribution point configured in Jamf Pro
This API client will allow Smallstep to read your Jamf device inventory and manage the webhooks necessary for ongoing inventory syncing.
-
In Jamf Pro, choose ⚙️ Settings
-
Under the System tab, choose API Roles and Clients
-
Add an API Role
Display name: Smallstep
For Privileges, choose:
- Read Mobile Devices
- Read Computers
- Webhooks: Create, Delete, Read, Update
-
Next, in the API Clients tab, add a Client
- Display name: Smallstep
- API Roles: Smallstep
- Enabled: Yes, choose Enable
- Choose Save
-
Choose Generate client secret
-
Temporarily save the Client ID and Client Secret. You’ll use them in the next step.
Let’s add the Jamf API credentials you just created to Smallstep.
- In the Smallstep UI, go to the Device Management tab in ⛭ Settings
- Under Jamf, choose ➕ Connect
- Enter the API credentials from Jamf
- Choose Add Platform. Your device inventory will start syncing from Jamf to Smallstep.
- Temporarily save the Webhook URL, Username, and Password presented.
For compatibility reasons, Smallstep may use ACME or SCEP for certificate enrollment. The SCEP Enrollment webhook allows Jamf to request a dynamic, short-lived challenge string from Smallstep during a SCEP request. The challenge string is injected into a SCEP payload for your clients to authenticate to Smallstep.
- In Jamf Pro, choose ⚙️ Settings
- Under the Global tab, Choose Webhooks
- Add a new Webhook
- Display name: Smallstep
- Webhook URL: (details from step #2)
- Authentication Type: Basic
- Basic Authentication Username: (details from step #2)
- Basic Authentication Password: (details from step #2)
- Basic Authentication Verify Password: (details from step #2)
- Content Type: JSON
- Webhook Event: SCEPChallenge
- Choose Save
In this step, you’ll upload the Smallstep agent package to Jamf’s distribution network.
- Download the latest package from packages.smallstep.com
- In Jamf Pro, choose ⚙️ Settings
- Under the Computer Management tab, Choose Packages
- Add a new Package
- Display name: Smallstep Agent
- Filename: (upload from step #1)
- Choose Save
This step will install a script on your client devices that bootstraps the connection between your devices and Smallstep.
- In Jamf Pro, choose ⚙️ Settings
- Under the Computer Management tab, Choose Scripts
- Add a new Script
- In the General tab, for Display Name:
Smallstep Agent Install
- In the Script tab:
-
Mode:
Shell/Bash
-
Content:
launchctl stop com.smallstep.launchd.Agent /Applications/SmallstepAgent.app/Contents/MacOS/SmallstepAgent svc install
-
- In the General tab, for Display Name:
- Choose Save
Next, we’ll configure the Script we just created to run on your client devices.
- In Jamf Pro, choose 💻 Computers
- Under the Content Management tab, choose Policies
- Add a new Policy
-
Under Options → General:
- Display name: Smallstep Agent
- Trigger: Login
- Execution Frequency: Ongoing
Note: With this policy, the package will be installed at the device’s next check-in, typically within 15 minutes.
-
Under Options → Packages → Configure
- Choose the Smallstep Agent package you created earlier
- Distribution Point: (choose desired distribution point)
- Action: Install
-
Under Options → Scripts → Configure
- Add the Smallstep Agent Install script you created earlier
-
Under Scope, select your desired policy scope. The agent will be installed on all devices in this scope.
-
- Choose Save
In this step, we’ll tie everything together by configuring Jamf to distribute the Smallstep Agent.
- In the Smallstep dashboard, choose Certificate Manager
- Select Authorities
- Select the Smallstep Agents authority
- Download the Root Certificate
- Under the Provisioners section of the page, choose the provisioner beginning with
integration-jamf
- Temporarily save the URL shown on the page, eg.
https://agents.example.ca.smallstep.com/scep/integration-jamf-b967f507
- In the Smallstep dashboard, choose ⚙️ Settings
- Temporarily save the Team Slug value
- In Jamf Pro, choose 🖥️ Computers
- Under the Content Management tab, Choose Configuration Profiles
- Add a new Configuration Profile
-
Choose Options → General
- Name: Smallstep
-
Add a Managed Login Items payload
- Rule type: Bundle Identifier
- Rule value:
com.smallstep.Agent
-
Add a Certificate payload
- Certificate Name: Smallstep Agents Authority
- Certificate Option: Upload
- Certificate Upload: (upload the Root certificate you downloaded earlier)
- Allow all apps access: ☑️
-
Add a SCEP payload
- URL: (paste the provisioner URL you saved earlier)
- Name: Smallstep
- Redistribute Profile: 7 days
- Challenge Type: Dynamic
- Key Size: 2048
- Allow all apps access: ☑️
-
Select Options → Application & Custom Settings → External Applications
Add new custom settings:
- Options → External Applications → Source: Custom Schema
- Options → External Applications → Preference Domain:
com.smallstep.Agent
- Options → External Applications → Custom Schema
-
Choose Add Schema
-
Copy the following JSON in to the window and choose Save
{ "title": "Smallstep Agent (com.smallstep.agent)", "description": "Configure settings for the Smallstep Agent.", "properties": { "TeamSlug": { "type": "string", "title": "Smallstep Details: Team", "description": "The slug for your organization's Smallstep team, available in the Smallstep dashboard under Settings.", "property_order": 10 }, "Certificate": { "type": "string", "title": "Smallstep (Debug): Certificate URI", "description": "A KMS URI that points to a certificate that can be used for agent bootstrapping.", "property_order": 10 } } }
- Options → External Applications → Custom Schema → Smallstep Details: Team: (paste the Team Slug you saved earlier)
- Options → External Applications → Custom Schema → Smallstep Details: Certificate URI:
mackms:label=$PROFILE_IDENTIFIER;se=false;tag=
-
- Finally, set the profile scope:
- Choose Edit
- Set the desired scope. This should mirror the scope you chose when creating the Policy in step 5.
- Choose Save
-
Your Smallstep team is now linked to Jamf. The devices that you scoped will receive a certificate and have the agent installed and running.
There's two ways to confirm installation on an endpoint:
- In the Smallstep UI, go to the device's profile page. In the Device Registration section, you'll see an Enrolled At timestamp.
- Alternatively, on the device itself, run
/Applications/SmallstepAgent/Contents/MacOS/SmallstepAgent version
to see that the agent is installed. And, in System Settings, check Login Items to confirm that there is a Smallstep Agent entry.