Utiliser un principal de service pour accéder aux données stockées dans votre SharePoint en toute sécurité.
Contexte
Votre SharePoint contient certainement un grand nombre de données que vous souhaitez pouvoir utiliser avec vos programmes. Dans cet article je me propose de vous présenter un exemple de bout en bout pour autoriser un principal de service à accéder à un site SharePoint puis utiliser cet accès via un programme en Python.
Pour rappel, un site SharePoint est créé automatiquement pour toutes équipes Teams, l’exemple présenter ici est donc adressable pour les documents d’une équipe Teams, stockés dans le site SharePoint sous-jacent.
Pré requis
Pour plus d’information sur les comptes principaux de service, lisez mon article Principal de service.
Je suppose que vous avez créé préalablement un principal de service avec un secret.
Le principal de service doit avoir l’autorisation d’API Sites.Selected pour l’API Microsoft Graph. Cette autorisation permet de donner des droits à ce principal de service site par site et non de manière globale.
Nous restons donc dans une logique de moindre privilège.
Vous devez aussi créer les 3 variables d’environnement suivantes :
- SHAREPOINT_SERVICE_PRINCIPAL_APPLICATION_ID : Contiens la valeur ID d’application (client) de votre principal de service.
- SHAREPOINT_SERVICE_PRINCIPAL_SECRET : Contiens la valeur du secret du vôtre principal de service.
- SHAREPOINT_SERVICE_PRINCIPAL_TENANT_ID : Contiens la valeur ID de l’annuaire (locataire) de votre principal de service. Il s’agit de l’id de votre tenant Entra ID.
Vous pouvez initialiser ces variables d’environnement via les commandes PowerShell suivantes :
|
|
Autorisation
Par défaut vous ne pouvez des droits d’ accès à un site SharePoint qu’à des comptes utilisateurs. Il n’existe aucun moyen via l’interface web pour donner des droits à un compte de type principal de service.
Pour donner les autorisations, nous allons passer par l’API Microsoft Graph.
⚠ La personne exécutant le script doit avoir le droit propriétaire sur le site SharePoint et avoir le droit Sites.FullControl.All au niveau de Microsoft Graph (typiquement un administrateur). Une fois la procédure d’autorisation réalisée, vous pouvez enlever le droit propriétaire à cette personne.
Pour utiliser Microsoft Graph avec PowerShell, vous devrez installer le SDK. Toutes les informations concernant ce SDK sont sur la page Install the Microsoft Graph PowerShell SDK
Ouvrez une fenêtre en PowerShell Core (version 7) et installez le module Microsoft Graph si ce n’est pas déjà fait.
|
|
Connectez-vous avec la ligne de code suivante :
|
|
Modifiez le script puis exécutez-le.
|
|
Explication du script ci-dessus :
- La variable $SPDomaine dois contenir votre domaine SharePoint, c’est la valeur entre https:// et .sharepoint.com/ dans l’URL de votre site SharePoint (visible en haut dans votre navigateur Internet).
- La variable $SPSite doit contenir le nom de votre site SharePoint, c’est la valeur entre /sites/ et le / suivant dans l’URL de votre site SharePoint.
- Le script créer un JSON qui autorise le principal de service à lire les données du site SharePoint puis l’envoi à l’API Graph pour valider l’ordre.
Suite à cela votre principal de service a accès en lecture à la totalité de ce site SharePoint.
Accéder à vos données
Maintenant que vous avez autorisé le principal de service à accéder au site SharePoint, nous allons lire un fichier depuis ce site.
Pour cela nous allons procéder en 2 étapes :
- L’authentification nous permettant de nous identifier auprès d’Entra ID et de recevoir un token nous permettant d’accéder à des ressources.
- L’accès à un fichier dans notre SharePoint en fournissant le token obtenu à l’étape 1.
Authentification
Nous allons installer le paquet azure-identity qui gère l’authentification
|
|
Le script Python suivant permet de réaliser l’authentification et de préparer la variable headers qui sera ensuite utilisée pour interroger SharePoint.
|
|
Lecture d’un fichier
Pour le test vous allez créer un fichier texte, pour pouvoir afficher simplement le contenu, dans votre site SharePoint.
|
|
Explication du script ci-dessus :
- La variable sp_domaine doit contenir votre domaine SharePoint, c’est la valeur entre https:// et .sharepoint.com/ dans l’URL de votre site SharePoint (visible en haut dans votre navigateur Internet).
- La variable sp_site_name doit contenir le nom de votre site SharePoint, c’est la valeur entre /sites/ et le / suivant dans l’URL de votre site SharePoint.
- La variable sp_file_path doit contenir le chemin relatif du fichier texte de test, extension incluse. Vous pouvez mettre le fichier dans un dossier bien entendu.
Le script complet est donc le suivant :
|
|
Vous pouvez maintenant exploiter les fichiers contenus dans vos sites SharePoint avec un principal de service.
Merci de votre attention.