Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts 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 spezifische Werte für Ihre Cloud-Umgebung.
OCI Identity and Access Management-REST-APIs für Identitätsdomains mit API-Signaturschlüssel nutzen
Einführung
Bei der Integration mit Oracle Cloud Infrastructure Identity and Access Management-(OCI IAM-)Identitätsdomains-APIs ist OAuth 2.0 die am häufigsten empfohlene Methode zum Sichern von API-Anforderungen. Für bestimmte Anwendungsfälle, insbesondere wenn Einfachheit und Direktheit im Vordergrund stehen, bietet der API-Signaturschlüssel jedoch eine praktikable Alternative.
In diesem Tutorial wird erläutert, wie Sie OCI IAM-Identitätsdomain-APIs mit API-Signaturschlüsseln aufrufen können. Dadurch erhalten Entwickler und Administratoren eine einfachere und zugänglichere Option.
Gründe für die Verwendung des API-Signaturschlüssels
Der API-Signaturschlüssel bietet eine einfache Möglichkeit, API-Anforderungen zu authentifizieren. Sie sind einfach zu generieren und zu verwenden, was sie ideal für Anwendungen macht, die einfachen, programmatischen Zugriff erfordern, ohne dass der Tokenaustauschprozess OAuth komplex ist. API-Schlüssel sind insbesondere in folgenden Szenarios nützlich:
-
Automatisierte Skripte und cron-Jobs: Einfachheit der Authentifizierung, ohne Token verwalten zu müssen.
-
Interne Anwendungen: Reduzierte Komplexität für Services, die in einem vertrauenswürdigen Netzwerk ausgeführt werden.
-
Prototyping und Entwicklung: Schnelle Einrichtung für Tests und Debugging.
Zielgruppe
OCI-IAM-Experten, -Entwickler und -Administratoren.
Zielsetzung
Nutzen Sie die OCI-IAM-Identitätsdomains-REST-API mit dem API-Signaturschlüssel. Um dies effektiv zu demonstrieren, kann mit dem Python-Snippet ein Skript entwickelt werden. Dieses Skript veranschaulicht die Interaktion mit OCI-IAM-Identitätsdomain-APIs mit API-Signaturschlüsseln zur Authentifizierung. Außerdem werden die grundlegenden Vorgänge zum Erstellen einer Gruppe, Erstellen eines Benutzers und Zuweisen des Benutzers zu der Gruppe behandelt. Dabei wird gezeigt, wie diese Aktionen programmgesteuert mit sicheren API-Anforderungen ausgeführt werden. Die Verwendung von API-Schlüsseln vereinfacht den Prozess und erleichtert die Integration dieser Vorgänge in automatisierte Workflows oder Skripte.
Voraussetzungen
-
OCI-Account: Zugriff auf Ihren Oracle Cloud Infrastructure-Account.
-
API-Signaturschlüssel: Ein Public-Private-Key-Paar für die Anmeldung von Anforderungen im PEM-Format. Weitere Informationen finden Sie unter API-Signaturschlüssel generieren.
-
Vertrautheit mit OCI IAM und Python.
-
Kenntnisse der REST-API für OCI-IAM-Identitätsdomains sind erforderlich.
-
Ein OCI-IAM-Benutzer mit der Berechtigung zum Verwalten von Anwendungen (Identitätsdomainadministrator, Sicherheitsadministrator oder Anwendungsadministrator).
-
Python 3.x installiert.
-
Python-Packages
requests
undjson
installiert.
Aufgabe 1: Python-Packages importieren und anfängliches Setup
Im ersten Teil des Skripts werden die erforderlichen Importe und Konfigurationen für die Interaktion mit OCI-IAM-Identitätsdomain-APIs mit API-Schlüsseln eingerichtet.
import requests
import json
from oci.config import from_file
from oci.signer import Signer
requests
: Eine einfache HTTP-Bibliothek in Python zum Erstellen von HTTP-Anforderungen.JSON
: Bibliothek zum Parsen von JSON-Daten.from_file
: Funktion zum Lesen der OCI-Konfiguration aus einer Datei.Signer
: Klasse zum Signieren von HTTP-Anforderungen mit einem API-Schlüssel.
Aufgabe 2: Klassen definieren und initialisieren
Das Snippet definiert eine Klasse, APISignedRequest
, um Interaktionen mit OCI-IAM-Identitätsdomain-APIs mit API-Schlüsseln zu verwalten.
class APISignedRequest():
def __init__(self):
global auth
global identity_domain
global config
config = from_file()
auth = Signer(
tenancy=config['tenancy'],
user=config['user'],
fingerprint=config['fingerprint'],
private_key_file_location=config['key_file']
)
identity_domain = 'https://idcs-############################.identity.oraclecloud.com'
- Klasse
APISignedRequest
: Diese Klasse kapselt Methoden zur Ausführung von API-Anforderungen an OCI-IAM-Identitätsdomains. init
-Methode: Initialisiert die Klasse, indem die globalen Variablenauth
,identity_domain
undconfig
eingerichtet werden.config:
Wird aus der OCI-Standardkonfigurationsdatei geladen.auth
: Eine Instanz des Signaturgebers, die zum Signieren von API-Anforderungen mit dem API-Schlüssel verwendet wird.identity_domain
: Die Basis-URL für die Identitätsdomaininstanz.
Aufgabe 3: Gruppenverfahren erstellen
Die Methode creategroup
in der Klasse APISignedRequest
dient zum Erstellen einer neuen Gruppe in der OCI-IAM-Identitätsdomain.
def creategroup(self):
extra = "/admin/v1/Groups"
body = {
"displayName": "Example Group",
"externalId": "123456",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
"creationMechanism": "api",
"description": "Example Description"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:Group",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group",
"urn:ietf:params:scim:schemas:extension:custom:2.0:Group"
]
}
response = requests.post(identity_domain + extra, auth=auth, json=body)
jsonresp = json.loads(response.content)
grpid = jsonresp.get("id")
print("Group has been created")
return grpid
creategroup
-Methode: Sendet eine POST-Anforderung zum Erstellen einer neuen Gruppe in der Identitätsdomain.extra
: Der API-Endpunkt zum Erstellen von Gruppen.body
: JSON-Payload mit Gruppendetails.requests.POST
: Sendet die POST-Anforderung mit dem Signaturgeberauth
undbody
.JSON.loads
: Parst die JSON-Antwort.grpid
: Extrahiert die Gruppen-ID aus der Antwort und gibt sie zurück.
Aufgabe 4: Benutzermethode erstellen
Die Methode createuser
in der Klasse APISignedRequest
dient zum Erstellen eines neuen Benutzers in der OCI-IAM-Identitätsdomain.
def createuser(self):
extra = "/admin/v1/Users"
body = {
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"name": {
"givenName": "Test",
"familyName": "User"
},
"userName": "testuser@example.com",
"emails": [
{
"value": "testuser@example.com",
"type": "work",
"primary": True
},
{
"value": "testuser@example.com",
"primary": False,
"type": "recovery"
}
]
}
response = requests.post(identity_domain + extra, auth=auth, json=body)
jsonresp = json.loads(response.content)
userid = jsonresp.get("id")
print("User has been created")
return userid
createuser
-Methode: Sendet eine POST-Anforderung zum Erstellen eines neuen Benutzers in der Oracle-Identitätsdomain.extra
: Der API-Endpunkt zum Erstellen von Benutzern.body
: JSON-Payload mit Benutzerdetails.requests.POST
: Sendet die POST-Anforderung mit dem Signaturgeberauth
undbody
.JSON.loads
: Parst die JSON-Antwort.grpid
: Extrahiert die Benutzer-ID aus der Antwort und gibt sie zurück.
Aufgabe 5: Benutzer zu Gruppenart zuweisen
Die Methode assignuser
in der Klasse APISignedRequest
verarbeitet den Prozess der Zuweisung eines Benutzers zu einer Gruppe in der OCI-IAM-Identitätsdomain.
def assignuser(self):
extra = "/admin/v1/Groups/"
obj = APISignedRequest()
grpid = obj.creategroup()
gid = str(grpid)
userid = obj.createuser()
body = {
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "add",
"path": "members",
"value": [
{
"value": userid,
"type": "User"
}
]
}
]
}
response = requests.patch(identity_domain + extra + gid, auth=auth, json=body)
print("User has been assigned to the group")
- Methode
assignuser
: Orchestriert das Erstellen einer Gruppe und eines Benutzers und weist den Benutzer dann der Gruppe zu.extra
: Der API-Endpunkt für Gruppenvorgänge.creategroup
: Erstellt eine Gruppe und ruft ihre ID ab.createuser
: Erstellt einen Benutzer und ruft seine ID ab.body
: JSON-Payload zum Patchen der Gruppe, indem der Benutzer seinen Mitgliedern hinzugefügt wird.requests.PATCH
: Sendet die PATCH-Anforderung, um die Gruppe mit dem neuen Benutzer zu aktualisieren.
Aufgabe 6: Ablauf ausführen
Instanz erstellen und Aufrufmethode: Erstellen Sie eine Instanz von APISignedRequest
, und rufen Sie assignuser
auf, um den gesamten Ablauf auszuführen.
obj = APISignedRequest()
obj.assignuser()
Aufgabe 7: Skript in OCI Cloud Shell verwenden
Sobald das Skript fertig ist, kann es einfach auf dem lokalen Rechner (mit installiertem Python) oder in einer integrierten Entwicklungsumgebung (IDE) ausgeführt werden, die Python-Entwicklung unterstützt. Wir verwenden 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 OCI Cloud Shell oben rechts, und laden Sie das Python-Skript
OCIAPISignedRequest.py
hoch.
Hinweis:
OCIAPISignedRequest.py
ist das Python-Skript, das mit den oben genannten Code-Snippets für Aufgaben entwickelt wurde.
- Führen Sie den Befehl
python OCIAPISignedRequest.py
aus.
Schlussfolgerung
Die Verwendung von API-Schlüsseln zum Aufrufen von OCI-IAM-Identitätsdomain-APIs bietet eine einfache Alternative zu OAuth, ideal für bestimmte Anwendungsfälle, bei denen Einfachheit und Benutzerfreundlichkeit von entscheidender Bedeutung sind. Nach diesem Tutorial können Sie sicher und effizient mit OCI-IAM-Identitätsdomain-APIs integrieren und dabei die Leistungsfähigkeit von API-Schlüsseln für die Authentifizierung nutzen.
Unabhängig davon, ob Sie administrative Aufgaben automatisieren, interne Tools erstellen oder Anwendungen prototypisieren, bieten API-Schlüssel eine flexible und bequeme Methode für die Interaktion mit OCI-Services.
Verwandte Links
Danksagungen
- Autor - Gautam Mishra (Senior Cloud Engineer)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Leverage OCI Identity and Access Management Identity Domains REST APIs using API Signing Key
F99700-01
May 2024