os2499
os2499

Reputation: 43

How to add service principal to azure databricks workspace using databricks cli from cloud shell

I tried adding service principal to azure databricks workspace using cloud shell but getting error. I am able to look at all the clusters in the work space and I was the one who created that workspace. Do I need to be in admin group if I want to add Service Principal to workspace?

curl --netrc -X POST \ https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.net/api/2.0/preview/scim/v2/ServicePrincipals \ --header 'Content-type: application/scim+json' \ --data @create-service-principal.json \ | jq .

file has following info:

{ "displayName": "sp-name", "applicationId": "a9217fxxxxcd-9ab8-dxxxxxxxxxxxxx", "entitlements": [ { "value": "allow-cluster-create" } ], "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal" ], "active": true }

Here is the error I am getting: % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 279 100 279 0 0 5166 0 --:--:-- --:--:-- --:--:-- 5264 parse error: Invalid numeric literal at line 2, column 0

Upvotes: 1

Views: 2933

Answers (2)

tackytechtom
tackytechtom

Reputation: 61

Try this code in Python that you can run in a Databricks notebook:

import pandas
import json
import requests

# COMMAND ----------

# MAGIC %md ### define variables

# COMMAND ----------

pat           = 'EnterPATHere'           # paste PAT. Get it from settings > user settings
workspaceURL  = 'EnterWorkspaceURLHere'  # paste the workspace url in the format of 'https://adb-1234567.89.azuredatabricks.net'
applicationID = 'EnterApplicationIDHere' # paste ApplicationID / ClientID of Service Principal. Get it from Azure Portal
friendlyName  = 'AddFriendlyNameHere'    # paste FriendlyName of ServicePrincipal. Get it from Azure Portal

# COMMAND ----------

# MAGIC %md ### add service principal

# COMMAND ----------

payload_raw = {
              'schemas':
                         ['urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal'],
                          'applicationId': applicationID,
                          'displayName': friendlyName,
                          'groups':[],
                          'entitlements':[]    
 
          }

payload = json.loads(json.dumps(payload_raw))

response = requests.post(workspaceURL + '/api/2.0/preview/scim/v2/ServicePrincipals',\
            headers = {'Authorization' : 'Bearer '+ pat,\
            'Content-Type': 'application/scim+json'},\
            data=json.dumps(payload))

response.content

I have actually published a blog post where a Python script is provided to fully manage service principals and access control in Databricks workspaces.

Upvotes: 0

Abhishek Khandave
Abhishek Khandave

Reputation: 3240

Do I need to be in admin group if I want to add Service Principal to workspace?

Issue is with JSON file not with access to admin group.

You need to check double quotes in line number 2 of your JSON file.

You can refer this github link

Upvotes: 0

Related Questions