Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Generar informe de miembros de grupos de usuarios a partir de dominios de identidad de OCI IAM mediante Python
Introducción
Oracle Cloud Infrastructure (OCI) es una plataforma en la nube capaz de proporcionar una gama de servicios en la nube, incluidos el almacenamiento, las redes y la infraestructura. Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) es un servicio que permite gestionar el acceso a los recursos de OCI. Proporciona autenticación y autorización para usuarios y grupos.
Una de las funciones clave de OCI IAM es la capacidad de asignar usuarios a grupos para simplificar la gestión de acceso. Entre los clientes de OCI IAM, un escenario común es generar informes de dominios de identidad de OCI IAM. Hay varios informes de IAM que se generan fácilmente desde la consola de dominios de identidad de OCI IAM. Sin embargo, la obtención de informes de miembros de grupos de usuarios no es una función lista para usar en OCI IAM por ahora, pero se puede generar fácilmente mediante llamadas de API de REST.
Destinatarios
Este tutorial está destinado a profesionales y administradores de IAM.
Objetivo
En este tutorial, exploraremos un método para generar informes de miembros de grupos de usuarios a partir de dominios de identidad de OCI IAM mediante la API de REST con Python.
Requisitos
- Una suscripción de OCI activa.
- Familiaridad con OCI IAM y Python.
- Se requiere conocimiento del uso de la API de REST de dominios de identidad de OCI IAM.
- Usuario de IAM con autorización para gestionar aplicaciones (administrador de dominio de identidad, administrador de seguridad o administrador de aplicaciones).
- Python 3.x instalado en el sistema.
- Paquetes Python 'urllib3', 'requests' y 'pandas' instalados.
Tarea 1: Creación de una aplicación confidencial en el dominio de identidad de OCI IAM
Siga el tutorial para crear una aplicación confidencial y recuperar el ID de cliente y el secreto de cliente, que luego se puede utilizar para realizar una llamada de API de REST a OCI IAM para recuperar el token de acceso y los puntos finales de API posteriores.
Tarea 2: Configurar el archivo config.json
Configure el archivo de configuración en la máquina local. El archivo config.json
tiene información sobre la URL del dominio de identidad, el ID de cliente y el secreto de cliente que se utiliza para generar el token de acceso.
{
"iamurl" : "https://idcs-###########.identity.oraclecloud.com",
"client_id" : "#######################",
"client_secret" : "#######################"
}
Tarea 3: obtener el token de acceso
Una vez establecido el archivo config.json
, lo primero que debe hacer es generar el token de acceso, que se puede utilizar para realizar más llamadas de API de REST a los puntos finales de OCI IAM.
En el siguiente fragmento de código, la función get_encoded toma el ID de cliente y el secreto de cliente como argumentos y devuelve la cadena base64-encoded.
Esta cadena codificada se transfiere además como argumento a la función get_access_token
como cabecera de autorización para obtener el token de acceso mediante una solicitud 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
Tarea 4: Recuperar información de usuario - Nombres de usuario y pertenencia a grupo
Ahora tenemos el token de acceso, con el que podemos realizar más llamadas de API de REST a diferentes puntos finales de REST de dominios de identidad de OCI IAM. El fragmento de código siguiente muestra cómo estamos realizando una solicitud GET con los parámetros y cabeceras necesarios para el punto final /admin/v1/Users
, con el fin de recuperar el número total de resultados y, a continuación, calcular el número de iteraciones (bucle) necesarias en función del número total de resultados y el recuento por solicitud.
-
La función inicializa una lista vacía para almacenar toda la información del usuario. Tiene un bucle para recuperar la información del usuario en lotes.
-
En cada iteración, envía una solicitud GET con los parámetros adecuados para recuperar un lote de información de usuario (username and group Membership) y, a continuación, agregarla en un diccionario vacío.
-
Si el usuario pertenece a uno o más grupos, introduce otro bucle para recuperar cada nombre de grupo. Y si el usuario no pertenece a ningún grupo, define el valor como Ninguno y, a continuación, agrega la copia del diccionario a la lista.
-
Después de todas las iteraciones, la función devuelve la lista principal con toda la información de usuario necesaria.
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
Tarea 5: Convertir la lista en un informe CSV
Una vez que tengamos la información de usuario, el fragmento de código siguiente ayudará a crear un DataFrame a partir de los datos de la lista principal y, a continuación, guardará DataFrame en un archivo CSV denominado mainlist.csv
en el directorio de trabajo actual.
df_mainlist = pd.DataFrame(mainlist)
print(df_mainlist)
df_mainlist.to_csv('mainlist.csv')
Tarea 6: Uso del script en Cloud Shell
Una vez que el script está listo, se puede ejecutar fácilmente en la máquina local (con Python instalado) o en cualquier IDE que soporte el desarrollo de Python. Aquí, utilizamos OCI Cloud Shell para ejecutar el script y obtener el informe deseado.
-
Inicie sesión en la consola de OCI, abra Cloud Shell desde la esquina superior derecha de la pantalla y, a continuación, cargue el script de Python y el archivo
config.json
. -
Ejecute el comando
pip3 install pandas --user
para instalar el módulo.Nota: Ejecute el comando para cualquier error de módulo. Los módulos se deben instalar antes de utilizarlos.
-
Ahora ejecute
python GroupMembership_Pagination.py
. -
Descargue
mainlist.csv
.Nota: El archivo
mainlist.csv
contiene todos los detalles de afiliación a grupos de usuarios. Si el usuario no pertenece a ningún grupo, el valor se establece como Ninguno.
Enlaces relacionados
Agradecimientos
Autor: Gautam Mishra (ingeniero sénior de la nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite 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.