Remarque :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Générer un rapport d'adhésion de groupe d'utilisateurs à partir des domaines d'identité OCI IAM à l'aide de Python
Introduction
Oracle Cloud Infrastructure (OCI) est une plate-forme cloud capable de fournir toute une gamme de services cloud, y compris le stockage, le réseau et l'infrastructure. Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) est un service qui vous permet de gérer l'accès aux ressources OCI. Il fournit l'authentification et l'autorisation pour les utilisateurs et les groupes.
L'une des principales fonctionnalités d'OCI IAM est la possibilité d'affecter des utilisateurs à des groupes afin de simplifier la gestion des accès. Parmi les clients d'OCI IAM, un scénario courant consiste à générer des rapports à partir de domaines d'identité OCI IAM. Plusieurs rapports IAM sont générés facilement à partir de la console des domaines d'identité OCI IAM. Toutefois, l'obtention de rapports d'appartenance à un groupe d'utilisateurs n'est pas une fonctionnalité prête à l'emploi dans OCI IAM pour le moment, mais peut être facilement générée à l'aide d'appels d'API REST.
Public
Ce tutoriel est destiné aux professionnels et administrateurs IAM.
Objectif
Dans ce tutoriel, nous allons explorer une méthode permettant de générer des rapports d'appartenance à un groupe d'utilisateurs à partir de domaines d'identité OCI IAM à l'aide de l'API REST avec Python.
Prérequis
- Abonnement OCI actif.
- Connaissance d'OCI IAM et Python.
- Vous devez connaître l'API REST des domaines d'identité IAM OCI.
- Utilisateur IAM autorisé à gérer les applications (administrateur de domaine d'identité, administrateur de sécurité ou administrateur d'application).
- Python 3.x installé sur votre système.
- Les packages Python 'urllib3', 'requests' et 'pandas' sont installés.
Tâche 1 : création d'une application confidentielle dans le domaine d'identité OCI IAM
Suivez le tutoriel pour créer une application confidentielle et extraire l'ID client et la clé secrète client, qui peuvent ensuite être utilisés pour effectuer un appel d'API REST vers OCI IAM afin d'extraire le jeton d'accès et les adresses d'API suivantes.
Tâche 2 : configuration du fichier config.json
Configurez le fichier de configuration sur l'ordinateur local. Le fichier config.json contient des informations sur l'URL du domaine d'identité, l'ID client et la clé secrète client utilisés pour générer le jeton d'accès.
{
"iamurl" : "https://idcs-###########.identity.oraclecloud.com",
"client_id" : "#######################",
"client_secret" : "#######################"
}
Tâche 3 : obtention du jeton d'accès
Une fois le fichier config.json en place, la première chose à faire est de générer le jeton d'accès, qui peut être utilisé pour effectuer d'autres appels d'API REST aux adresses OCI IAM.
Dans le fragment de code ci-dessous, la fonction get_encoded prend l'ID client et la clé secrète client comme arguments et renvoie la chaîne base64-encoded.
Cette chaîne codée est en outre transmise en tant qu'argument à la fonction get_access_token en tant qu'en-tête d'autorisation, afin d'obtenir le jeton d'accès en exécutant une demande POST.
#get base64 encoded
def get_encoded(self,clid, clsecret):
encoded = clid + ":" + clsecret
baseencoded = base64.urlsafe_b64encode(encoded.encode('UTF-8')).decode('ascii')
return baseencoded
#get access token
def get_access_token(self,url, header):
para = "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
response = requests.post(url, headers=header, data=para, verify=False)
jsonresp = json.loads(response.content)
access_token = jsonresp.get('access_token')
return access_token
#print access token
def printaccesstoken(self):
obj = IAM()
encodedtoken = obj.get_encoded(clientID, clientSecret)
extra = "/oauth2/v1/token"
headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'Authorization': 'Basic %s' % encodedtoken, 'Accept': '*/*'}
accesstoken = obj.get_access_token(idcsURL + extra, headers)
return accesstoken
Tâche 4 : extraction des informations utilisateur - noms utilisateur et appartenance à un groupe
Nous disposons désormais du jeton d'accès, qui nous permet d'effectuer d'autres appels d'API REST vers différentes adresses REST de domaines d'identité OCI IAM. Le fragment de code ci-dessous montre comment nous effectuons une demande GET avec les en-têtes et paramètres nécessaires pour l'adresse /admin/v1/Users, afin d'extraire le nombre total de résultats, puis de calculer le nombre d'itérations (boucle) nécessaires en fonction du nombre total de résultats et du nombre par demande.
-
La fonction initialise une liste vide pour stocker toutes les informations utilisateur. Il existe une boucle permettant d'extraire les informations utilisateur par lots.
-
Dans chaque itération, il envoie une demande GET avec les paramètres appropriés pour extraire un lot d'informations utilisateur (nom utilisateur et appartenance à un groupe), puis les ajouter dans un dictionnaire vide.
-
Si l'utilisateur appartient à un ou plusieurs groupes, il entre dans une autre boucle pour extraire chaque nom de groupe. Si l'utilisateur n'appartient à aucun groupe, il définit la valeur sur Aucun, puis ajoute la copie du dictionnaire à la liste.
-
Après toutes les itérations, la fonction renvoie la liste principale avec toutes les informations utilisateur requises.
def searchusers(self):
obj = IAM()
accesstoken = obj.printaccesstoken()
startIndex = 0
count = 50
extra = "/admin/v1/Users"
headers = {'Accept': '*/*', 'Authorization': 'Bearer ' + accesstoken}
param = {'attributes': "userName,groups.display", 'startIndex': startIndex, 'count': count}
resp = requests.get(idcsURL + extra, headers=headers, verify=False, params=param)
jsonresp = json.loads(resp.content)
total = jsonresp.get("totalResults")
print(total)
tCount = total
loop = int(tCount / count)
print(loop)
mainlist = []
for i in range(loop + 1):
param1 = {'attributes': "userName,groups.display", 'startIndex': startIndex, 'count': count}
resp1 = requests.get(idcsURL + extra, headers=headers, verify=False, params=param1)
startIndex += count
jsonresp1 = json.loads(resp1.content)
tempjsn = jsonresp1.get("Resources")
for x in tempjsn:
trimjsn ={}
user = trimjsn["Username"] = x.get("userName")
grp = x.get("groups")
if grp is None:
trimjsn["Groups"] = "None"
mainlist.append(trimjsn.copy())
continue
for i in grp:
grpname = trimjsn["Groups"] = i.get("display")
print(trimjsn)
mainlist.append(trimjsn.copy())
print(mainlist)
return mainlist
Tâche 5 : Convertir la liste en rapport CSV
Une fois que nous disposons des informations utilisateur, le fragment de code ci-dessous permet de créer un fichier DataFrame à partir des données de la liste principale, puis d'enregistrer DataFrame dans un fichier CSV nommé mainlist.csv dans le répertoire de travail actuel.
df_mainlist = pd.DataFrame(mainlist)
print(df_mainlist)
df_mainlist.to_csv('mainlist.csv')
Tâche 6 : utilisation du script dans Cloud Shell
Une fois le script prêt, il peut être facilement exécuté sur la machine locale (avec Python installé) ou sur n'importe quel IDE prenant en charge le développement Python. Ici, nous utilisons OCI Cloud Shell pour exécuter le script et obtenir le rapport souhaité.
-
Connectez-vous à la console OCI, ouvrez Cloud Shell dans l'angle supérieur droit de l'écran, puis téléchargez le script Python et le fichier
config.json.


-
Exécutez la commande
pip3 install pandas --userpour installer le module.
Remarque : exécutez la commande pour détecter toute erreur de module. Les modules doivent être installés avant de les utiliser.
-
Exécutez à présent
python GroupMembership_Pagination.py. -
Téléchargez
mainlist.csv.

Remarque : le fichier
mainlist.csvcontient tous les détails d'appartenance aux groupes d'utilisateurs. Si l'utilisateur n'appartient à aucun groupe, la valeur est définie sur Aucun.
Liens connexes
Remerciements
Auteur - Gautam Mishra (ingénieur cloud senior)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour consulter la documentation produit, consultez Oracle Help Center.
Generate User Group membership report from OCI IAM Identity Domains using Python
F82226-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.