Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
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
- Ein aktives OCI-Abonnement.
- Vertrautheit mit OCI IAM und Python.
- Kenntnisse zur Verwendung der REST-API für OCI-IAM-Identitätsdomains sind erforderlich.
- Ein IAM-Benutzer mit Autorisierung zur Verwaltung von Anwendungen (Identitätsdomainadministrator, Sicherheitsadministrator oder Anwendungsadministrator).
- Python 3.x auf Ihrem System installiert.
- Die Python-Packages "urllib3", "requests" und "pandas" wurden installiert.
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.
-
Die Funktion initialisiert eine leere Liste, um alle Benutzerinformationen zu speichern. Es enthält eine Schleife zum Abrufen von Benutzerinformationen in Batches.
-
In jeder Iteration sendet er eine GET-Anforderung mit den entsprechenden Parametern, um einen Batch mit Benutzerinformationen (Benutzername und Gruppenmitgliedschaft) abzurufen und sie dann in einem leeren Dictionary hinzuzufügen.
-
Wenn der Benutzer zu einer oder mehreren Gruppen gehört, gibt er eine andere Schleife ein, um jeden Gruppennamen abzurufen. Wenn der Benutzer keiner Gruppe angehört, wird der Wert auf Keine gesetzt, und die Kopie des Dictionarys wird an die Liste angehängt.
-
Nach allen Iterationen gibt die Funktion die Hauptliste mit allen erforderlichen Benutzerinformationen zurück.
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.
-
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.jsonhoch.


-
Führen Sie den Befehl
pip3 install pandas --useraus, um das Modul zu installieren.
Hinweis: Führen Sie den Befehl für jeden Modulfehler aus. Die Module sollten vor der Verwendung installiert werden.
-
Führen Sie jetzt
python GroupMembership_Pagination.pyaus. -
Laden Sie
mainlist.csvherunter.

Hinweis: Die Datei
mainlist.csventhält alle Mitgliedschaftsdetails für Benutzergruppen. Wenn der Benutzer keiner Gruppe angehört, wird der Wert auf Keine gesetzt.
Verwandte Links
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.
Generate User Group membership report from OCI IAM Identity Domains using Python
F82226-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.