Nota:

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

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.

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.

  1. 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.

    Imagen 1

    Imagen 2

    Imagen 3

  2. Ejecute el comando pip3 install pandas --user para instalar el módulo.

    Imagen 4

    Nota: Ejecute el comando para cualquier error de módulo. Los módulos se deben instalar antes de utilizarlos.

  3. Ahora ejecute python GroupMembership_Pagination.py.

  4. Descargue mainlist.csv.

    Imagen 5

    Imagen 6

    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.

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.