Databricks : Il se connecte aux API en mode Azure AD sans PAT tout le monde hallucine (PRANK)
De base pour se connecter à un workspace Databricks et utiliser les API, il faut utiliser un token appelé aussi PAT que l’on va passer dans le header des appels REST (cf. mon article sur le CI/CD et Databricks dans lequel j’utilise cette méthode : ici )
Voir ici pour s’authentifier avec un PAT de façon “classique” : https://docs.databricks.com/dev-tools/api/latest/authentication.html
Seulement les problèmes avec ce PAT :
- c’est d’abord qu’il est attaché à un utilisateur et à un workspace donc pour de l’administration et de la sécurité c’est pas top. Si l’utilisateur quitte l’entreprise par exemple on ne peut pas supprimer ou retirer les droits sur son compte sans tout casser.
- de plus il n’est possible de le créer qu’à la main à partir de l’UI du workspace Databricks, ou via les API si on a déjà un PAT. Or, il n’y a pas de PAT disponible directement à la suite de la création d’un workspace. DONC c’est un gros problème si l’on cherche à automatiser une chaine complète dans un workflow CI/CD ! Par exemple, lors d’un déploiement d’un nouveau projet en production, nous ne pourrons pas créer le workspace et déployer dessus des notebooks ou configurer des clusters directement après, vu que nous n’avons pas de PAT
Heureusement, il existe aujourd’hui un moyen de se connecter autrement qu’avec le PAT : directement avec une authentification Azure AD et un compte de service Azure qu’on appelle un service principal (SP).
Dans cet article on va réaliser toutes les différentes actions en Powershell afin de montrer que cela est scriptable et intégrable dans Azure DevOps par exemple. Mais vu que nous sommes sur des techno REST, il est bien sûr possible de faire ça avec n’importe quel langage.
J’ajoute que dans cet article je me concentre sur l’authentification via Azure AD aux API, je pars du principe que la ressource Databricks existe déjà. Mais nous verrons dans de prochains articles comment automatiser la création des ressources et d’architectures complètes via des templates ARM ou Terraform.
C’est parti, il va donc falloir :
Créer un SP dans Azure AD et enregistrer son application ID et son secret key :
# Connect to Azure
Connect-AzAccount
# Create SP if not exists
if ($null -eq (Get-AzADServicePrincipal -DisplayName $ServicePrincipleName)) {
$mySP = New-AzADServicePrincipal -DisplayName $servicePrincipleName -ErrorAction 'Stop'
$ClientId = $mySP.ApplicationId
$ClientSecret = [pscredential]::new($servicePrincipleName, $mySP.Secret).GetNetworkCredential().Password
}
Mettre le service principal en owner (propriétaire) du workspace Databricks :
# Set RBAC on Databricks workspace
New-AzRoleAssignment -ApplicationId $ClientId `
-RoleDefinitionName "Owner" `
-ResourceGroupName $ResourceGroupName `
-ResourceName $WorkspaceName `
-ResourceType "Microsoft.Databricks/workspaces"
Se connecter au service au workspace Databricks avec le service principal, pour cela il va falloir dans un premier temps faire 2 appels REST au à l’entité d’authentification Azure avec votre SP : https://login.microsoftonline.com/<TenantId>/oauth2/token et récupérer 2 tokens:
– un token pour le service correspondant à l’application AD du service Databricks enregistré nativement dans l’Azure AD de votre tenant. Généralement, cette application a l’id 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d, mais il est aussi possible de retrouver cet id dans Azure AD en recherchant l’application AzureDatabricks :
– un token pour le service de gestion Azure https://management.core.windows.net/ (qui sert d’ailleurs pour toutes les connexions classiques aux API Azure)
# Get AzureDatabricks app token
$RequestAccessTokenUri = "https://login.microsoftonline.com/$TenantId/oauth2/token"
$Resource = "https://management.core.windows.net/"
$DBXressource = "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" # CF. AzureDatabricks AzureAD application
$body = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$DBXressource"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $body -ContentType 'application/x-www-form-urlencoded'
Write-Host "Print Token" -ForegroundColor Green
Write-Output $Token.access_token
$apiKey = $Token.access_token
# Get Azure Management token
$bodyManagement = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$Resource"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $bodyManagement -ContentType 'application/x-www-form-urlencoded'
Write-Host "Print Token" -ForegroundColor Green
Write-Output $Token.access_token
$apiKeyManagement = $Token.access_token
Enfin avec ces 2 tokens, vous allez pouvoir faire des appels aux API Databricks en passant ces tokens dans le header de vos appels :
# Call Azure Databricks API
$headers = @{
"Authorization"="Bearer $apiKey";
"X-Databricks-Azure-SP-Management-Token"=$apiKeyManagement;
"X-Databricks-Azure-Workspace-Resource-Id"="/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Databricks/workspaces/$WorkspaceName"
}
$uri = "$uriroot/2.0/dbfs/list?path=/"
Invoke-RestMethod -Method 'Get' -Uri $uri -Headers $headers
Voici le script Powershell complet :
# Variables
$ServicePrincipleName = "MySP"
$TenantId = "" # Enter Tenant Id.
$ClientId = "" # Enter Client Id if exists
$ClientSecret = "" # Enter Client Secret if exists
$SubscriptionId = "" # Enter Subscription ID
$DBXressource = "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d" # CF. AzureDatabricks AzureAD application
$ResourceGroupName = "" # Enter the RG name where the Databricks ressource is
$WorkspaceName = "" # Enter the name of the Databricks ressource
$Resource = https://management.core.windows.net/
$RequestAccessTokenUri = "https://login.microsoftonline.com/$TenantId/oauth2/token"
# Connect to Azure
Connect-AzAccount
Set-AzContext -SubscriptionId $SubscriptionId
# Get the Databricks URL
$dbxurl = (Get-AzResource -Name $WorkspaceName -ResourceGroupName $ResourceGroupName -ExpandProperties).Properties.workspaceUrl
$uriroot = "https://$dbxurl/api"
# Create SP if not exists
if ($null -eq (Get-AzADServicePrincipal -DisplayName $ServicePrincipleName)) {
$mySP = New-AzADServicePrincipal -DisplayName $servicePrincipleName -ErrorAction 'Stop'
$ClientId = $mySP.ApplicationId
$ClientSecret = [pscredential]::new($servicePrincipleName, $mySP.Secret).GetNetworkCredential().Password
}
# Set RBAC on Databricks workspace
New-AzRoleAssignment -ApplicationId $ClientId `
-RoleDefinitionName "Owner" `
-ResourceGroupName $ResourceGroupName `
-ResourceName $WorkspaceName `
-ResourceType "Microsoft.Databricks/workspaces"
# Get AzureDatabricks app token
$body = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$DBXressource"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $body -ContentType 'application/x-www-form-urlencoded'
Write-Host "Print Token" -ForegroundColor Green
Write-Output $Token.access_token
$apiKey = $Token.access_token
# Get Azure Management token
$bodyManagement = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$Resource"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $bodyManagement -ContentType 'application/x-www-form-urlencoded'
Write-Host "Print Token" -ForegroundColor Green
Write-Output $Token.access_token
$apiKeyManagement = $Token.access_token
# Call Azure Databricks API
$headers = @{
"Authorization"="Bearer $apiKey";
"X-Databricks-Azure-SP-Management-Token"=$apiKeyManagement;
"X-Databricks-Azure-Workspace-Resource-Id"="/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Databricks/workspaces/$WorkspaceName"
}
$uri = "$uriroot/2.0/dbfs/list?path=/"
Invoke-RestMethod -Method 'Get' -Uri $uri -Headers $headers
Et voila !
Une bonne pratique par la suite est d’aller générer un PAT Databricks classique avec cette méthode via l’API “api/2.0/token/create” (la doc ici) et l’enregistrer dans un secret Azure Key Vault pour que d’autre applicatifs l’utilisent comme Azure Data Factory par exemple.
Pour comprendre ce mode de connexion, j’ai du faire du reverse engineering sur le module Powershell azure.databricks.cicd.tools qui propose aussi une authentification Azure AD. Je vous recommande d’ailleurs vraiment ce module qui est très pratique : https://www.powershellgallery.com/packages/azure.databricks.cicd.tools/
EDIT :
Suite à la mise à jour des URL de workspace Databricks, j’ai ajouté dans le code un moyen pour récupérer dynamiquement l’URL du workspace via une commande Az PowerShell :
$dbxurl = (Get-AzResource -Name $WorkspaceName -ResourceGroupName $ResourceGroupName -ExpandProperties).Properties.workspaceUrl
$uriroot = "https://$dbxurl/api"
La doc MS au sujet des URL : https://docs.microsoft.com/fr-fr/azure/databricks/workspace/workspace-details
Views:
3 194
Are you tired of spending countless hours managing your social media accounts? Do you want to take your social media presence to the next level without all the hassle? Look no further than ChatGPT4 (OpenAI) powered app for social media automation.
Introducing…Soci Ai
ChatGPT4 (OpenAI) Powered App for Social Media Automation
And Content Creation
==> Watch Full Demo Here https://warriorplus.com/o2/a/kp8x0p/0
SociAl app is designed to make social media management a breeze. With just a few simple voice commands, you can auto-post, schedule, and automate your social media platforms like Facebook, TikTok, Instagram, and more. Soci Ai uses AI-powered algorithms to curate trending viral content, video reels, and posts that will drive massive traffic, views, and following to your accounts.
Here are just a few of the features Soci Ai offers:
Easy-to-use interface: Soci Ai is user-friendly and intuitive, making it easy for anyone to use.
Schedule posts: You can schedule your posts in advance, ensuring that your social media presence remains consistent even when you’re not actively posting.
Siri-like voice commands: Soci Ai responds to voice commands, just like Siri. This means you can use it hands-free while on the go.
Trending viral content: Soci Ai uses AI algorithms to curate trending viral content, video reels, and posts that are guaranteed to drive traffic to your social media accounts.
Massive following: With Soci Ai, you can drive 10,000s of views, traffic, and massive following to your social media accounts with ease.
Auto-post, schedule, and automate 12+ major Social media Platforms
Live Streaming (Pre recorded video) On FB,Youtube,Instagram
Ai Short Video Generator
Ai Viral Content Generator
Ai Image Generator
Don’t let social media management be a burden any longer. Download Soci app today and see the results for yourself. Let ChatGPT4 (OpenAI) powered app automate your social media presence, so you can focus on what really matters.
Here are our complimentary bonuses for you today:
B0nus1: QRPal
This is First-To-Market Fully A.I Powered App That Creates Unlimited Attention-Grabbing QR And Bar Codes For Website URLs, App Downloads, PayPal Payments, PDF Files, Wi-Fi Login, Social Media Links, Restaurant And So Much More…
B0nus2:WebCreator
WebCreator Is 1-Click Drag & Drop Powerful Website & Funnel Builder App That Builds Gorgeous Websites & Funnels In Any Niche Of Your Choice In Just 2 Mins FLAT!
B0nus3:TextAi
Proudly Presenting… Brand New AI Powered App That Effortlessly Converts Any Audio or Live Voice Into Unlimited Attention Grabbing, Search Engine Friendly Content For Any Offer & Niche In Just 3 Clicks!
B0nus4:Course App
The world’s first app that creates an e-learning platform like udemy in just a few easy mouse clicks.
B0nus5:InfinityBooking App:
3-Click App Creates Interactive Appointment & Service Booking Websites In Any Niche & Boosts Leads & Conversions By 10X!
(All these bonuses will be automatically delivered to the Memberdashbard portal.)
Because for the early users of SociAi , we are offering access for just a low one-time price
equivalent to the price of a takeout dinner for a couple.
Click the button below right now to get started with Soci Ai
https://warriorplus.com/o2/a/kp8x0p/0
Enhancing your website’s performance and tracking your marketing efforts just got more straightforward! With our UTM Code Generator at SEOGEEK, you can:
Craft custom tracking codes effortlessly to gain valuable insights into your digital marketing campaigns.
Understand where your traffic comes from to improve your strategies effectively.
Evaluate the effectiveness of your campaigns with UTM codes, allowing for informed decisions that enhance your marketing efforts.
If you’re ready to get started, check out our resources:
— Quick tutorial video on using the UTM Code Generator: https://www.youtube.com/watch?v=LkZm0rtMrbM
## Learn more about the importance of UTM codes for your campaigns: https://bit.ly/generateutm
Let’s take your digital marketing to the next level!
You can unsubscribe by filling the form with your website URL at https://bit.ly/unsubus
84 Boar Lane, Senghenydd, Chandler , AZ, US