Hinweis:

Bericht zur Benutzergruppenmitgliedschaft aus OCI-IAM-Identitätsdomains mit Python generieren

Einführung

Oracle Cloud Infrastructure (OCI) ist eine Cloud-Plattform, die eine Reihe von Cloud-Services bereitstellt, darunter Speicher, Netzwerk und Infrastruktur. Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) ist ein Service, mit dem Sie den Zugriff auf OCI-Ressourcen verwalten können. Sie bietet Authentifizierung und Autorisierung für Benutzer und Gruppen.

Eines der wichtigsten Features von OCI IAM ist die Möglichkeit, Gruppen Benutzer zuzuweisen, um das Zugriffsmanagement zu vereinfachen. Bei OCI IAM-Kunden besteht ein allgemeines Szenario darin, Berichte aus OCI-IAM-Identitätsdomains zu generieren. Es gibt mehrere IAM-Berichte, die einfach über die OCI-IAM-Identitätsdomains-Konsole generiert werden können. Das Abrufen von Berichten zur Benutzergruppenmitgliedschaft ist jedoch derzeit kein Out-of-the-box-Feature in OCI IAM, kann aber einfach mit REST-API-Aufrufen generiert werden.

Zielgruppe

Dieses Tutorial richtet sich an IAM-Experten und -Administratoren.

Zielsetzung

In diesem Tutorial wird eine Methode zum Generieren von Berichten zur Benutzergruppenmitgliedschaft aus OCI-IAM-Identitätsdomains mit der REST-API mit Python untersucht.

Voraussetzungen

Aufgabe 1: Vertrauliche Anwendung in OCI-IAM-Identitätsdomain erstellen

Befolgen Sie das Tutorial, um eine vertrauliche Anwendung zu erstellen und Client-ID und Client Secret abzurufen. Damit können Sie einen REST-API-Aufruf an OCI IAM zum Abrufen von Zugriffstoken und nachfolgenden API-Endpunkten ausführen.

Aufgabe 2: Datei config.json einrichten

Richten Sie die Konfigurationsdatei auf dem lokalen Rechner ein. Die Datei config.json enthält Informationen zu Identitätsdomain-URL, Client-ID und Client Secret, mit denen das Zugriffstoken generiert wird.

 {
 "iamurl"         : "https://idcs-###########.identity.oraclecloud.com",
"client_id"      : "#######################",
"client_secret"  : "#######################"
 }

Aufgabe 3: Zugriffstoken abrufen

Nachdem die Datei config.json eingerichtet wurde, müssen Sie zuerst das Zugriffstoken generieren, mit dem Sie weitere REST-API-Aufrufe an die OCI-IAM-Endpunkte ausführen können.

Im folgenden Code-Snippet nimmt die Funktion get_encoded Client-ID und Client Secret als Argumente an und gibt die Zeichenfolge base64-encoded zurück.

Diese codierte Zeichenfolge wird als Argument an die Funktion get_access_token als Autorisierungsheader übergeben, um das Zugriffstoken durch Ausführen einer POST-Anforderung abzurufen.

#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

Aufgabe 4: Benutzerinformationen abrufen - Benutzernamen und Gruppenmitgliedschaft

Jetzt gibt es das Zugriffstoken, mit dem wir weitere REST-API-Aufrufe für verschiedene OCI-IAM-Identitätsdomains-REST-Endpunkte ausführen können. Das Code-Snippet unten zeigt, wie eine GET-Anforderung mit den erforderlichen Headern und Parametern an den /admin/v1/Users-Endpunkt gesendet wird, um die Gesamtanzahl der Ergebnisse abzurufen und dann die Anzahl der erforderlichen Iterationen (Schleife) basierend auf der Gesamtanzahl der Ergebnisse und der Anzahl pro Anforderung zu berechnen.

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

Aufgabe 5: Liste in CSV-Bericht konvertieren

Wenn Sie über die Benutzerinformationen verfügen, können Sie mit dem folgenden Code-Snippet eine DataFrame aus den Hauptlistendaten erstellen und die DataFrame dann in einer CSV-Datei mit dem Namen mainlist.CSV im aktuellen Arbeitsverzeichnis speichern.

df_mainlist = pd.DataFrame(mainlist)
print(df_mainlist)
df_mainlist.to_csv('mainlist.csv')

Aufgabe 6: Skript in Cloud Shell verwenden

Sobald das Skript bereit ist, kann es einfach auf dem lokalen Rechner (mit installiertem Python) oder auf einer beliebigen IDE ausgeführt werden, die die Python-Entwicklung unterstützt. Hier verwenden wir OCI Cloud Shell, um das Skript auszuführen und den gewünschten Bericht abzurufen.

  1. Melden Sie sich bei der OCI-Konsole an, öffnen Sie die Cloud Shell in der oberen rechten Ecke des Bildschirms, und laden Sie dann das Python-Skript und die Datei config.json hoch.

    Bild 1

    Bild 2

    Bild 3

  2. Führen Sie den Befehl pip3 install pandas --user aus, um das Modul zu installieren.

    Bild 4

    Hinweis: Führen Sie den Befehl für jeden Modulfehler aus. Die Module sollten vor der Verwendung installiert werden.

  3. Führen Sie jetzt python GroupMembership_Pagination.py aus.

  4. Laden Sie mainlist.csv herunter.

    Bild 5

    Bild 6

    Hinweis: Die Datei mainlist.csv enthält alle Mitgliedschaftsdetails für Benutzergruppen. Wenn der Benutzer keiner Gruppe angehört, wird der Wert auf Keine gesetzt.

Bestätigungen

Autor - Gautam Mishra (Senior Cloud Engineer)

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.