Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung 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. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
API-Sicherheit mit OCI API Gateway und OCI Functions anpassen
Einführung
Entdecken Sie die nahtlose Synergie zwischen Oracle Cloud Infrastructure (OCI) Functions und OCI API Gateway, um eine benutzerdefinierte Authentifizierungsmethode für Ihre APIs zu implementieren und wie Funktionen Argumente aus dem API-Gateway abrufen können.
OCI API Gateway
Mit dem OCI-API-Gateway-Service können Sie APIs mit privaten Endpunkten veröffentlichen, auf die Sie über Ihr Netzwerk zugreifen können. Sie können aber auch öffentliche IP-Adressen angeben, wenn Internettraffic akzeptiert werden soll. Die Endpunkte unterstützen API-Validierung, Anforderungs- und Antworttransformation, CORS, Authentifizierung und Autorisierung sowie Anforderungsbegrenzung.
Mit dem OCI-API-Gateway-Service erstellen Sie API-Gateways in einem regionalen Subnetz, um Traffic von API-Clients zu verarbeiten und an Backend-Services weiterzuleiten. Sie können ein einzelnes API-Gateway verwenden, um mehrere Backend-Services (wie OCI Load Balancer, OCI Compute-Instanzen und OCI Functions) mit einem einzigen konsolidierten API-Endpunkt zu verknüpfen.
OCI Functions
OCI Functions ist eine vollständig verwaltete, mehrmandantenfähige, hoch skalierbare, bedarfsgesteuerte Functions-as-a-Service-Plattform. Sie basiert auf OCI für Unternehmen und wird von der Open-Source-Engine Fn-Projekt unterstützt. Verwenden Sie OCI Functions, wenn Sie sich auf das Schreiben von Code konzentrieren möchten, um die Geschäftsanforderungen zu erfüllen.
Hinweis:
Dieses Tutorial ist ausschließlich für Bildungs- und Studienzwecke konzipiert. Es bietet eine Umgebung für Lernende, um zu experimentieren und praktische Erfahrung in einem kontrollierten Umfeld zu sammeln. Es ist wichtig zu beachten, dass die in dieser Übung verwendeten Sicherheitskonfigurationen und -praktiken möglicherweise nicht für reale Szenarien geeignet sind.
Sicherheitsaspekte für reale Anwendungen sind oft viel komplexer und dynamischer. Daher ist es vor der Implementierung einer der hier demonstrierten Techniken oder Konfigurationen in einer Produktionsumgebung unerlässlich, eine umfassende Sicherheitsbewertung und -überprüfung durchzuführen. Diese Überprüfung sollte alle Aspekte der Sicherheit umfassen, einschließlich Zugriffskontrolle, Verschlüsselung, Überwachung und Compliance, um sicherzustellen, dass das System mit den Sicherheitsrichtlinien und -standards des Unternehmens übereinstimmt.
Sicherheit sollte beim Übergang von einer Laborumgebung zu einem realen Deployment immer oberste Priorität haben.
Zielsetzung
- Erstellen Sie ein API-Gateway mit einer Mock-Antwort mit OCI Functions als Autorisiererfunktionen, um eine benutzerdefinierte Sicherheitsvalidierung zu implementieren und bestimmte Parameter an das API-Gateway zurückzugeben.
Voraussetzungen
-
Ein Oracle-Account mit Administratorberechtigungen.
-
Erstellen Sie ein Auth-Token in Ihrem Benutzer. Weitere Informationen finden Sie unter Authentifizierungstoken für die Anmeldung bei Oracle Cloud Infrastructure Registry generieren.
-
Ein Compartment zum Erstellen Ihrer Ressourcen.
Hinweis: Notieren Sie sich den Compartment-Namen und die Compartment-ID.
-
VCN mit einem privaten und einem öffentlichen Subnetz. Weitere Informationen finden Sie unter Virtuelles Cloud-Netzwerk erstellen.
-
Eine Funktionsanwendung, die im privaten Subnetz Ihres VCN bereitgestellt wird. Weitere Informationen finden Sie in Handbücher zu Funktionen QuickStart.
-
Ein API-Gateway, das im öffentlichen Subnetz Ihres VCN erstellt wird. Weitere Informationen finden Sie im API Gateway QuickStart Guide.
-
Wir verwenden ein Dummy-Backend, das im API-Gateway als Aktienantwort bezeichnet wird. Weitere Informationen finden Sie unter Standardantworten als API-Gateway-Backend hinzufügen.
-
Zugriff auf OCI Cloud Shell über Ihren Browser. Weitere Informationen finden Sie unter OCI Cloud Shell.
-
Konfigurieren Sie Ihre Sicherheitsliste so, dass der Zugriff zwischen privaten und öffentlichen Subnetzen zulässig ist.
Aufgabe 1: Dynamische Gruppen einrichten
Melden Sie sich bei der OCI-Konsole an, navigieren Sie zu Ihrer Domain, klicken Sie auf Dynamische Gruppen, und erstellen Sie Gruppen mit den folgenden Informationen.
-
Gruppenname: Geben Sie
MyFunctions
ein.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
-
Gruppenname: Geben Sie
MyApiGateway
ein.ALL {resource.type = 'ApiGateway', resource.compartment.id = 'pasteYourCompartmentOCID'}
Aufgabe 2: Policys erstellen
Gehen Sie zur OCI-Konsole, navigieren Sie zu Policys, und erstellen Sie Policys mit den folgenden Informationen.
-
Policy-Name: Geben Sie
FunctionsPolicies
ein.Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
-
Policy-Name: Geben Sie
ApiGatewayPolicies
ein.Allow dynamic-group MyApiGateway to use functions-family in compartment YOUR-COMPARTMENT-NAME
Aufgabe 3: OCI Container Registry erstellen
-
Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, Container und Artefakte, wählen Sie Container-Registry aus, und klicken Sie auf Repository erstellen, um ein privates Repository für das Funktionsimage zu erstellen.
-
Repository-Name: Geben Sie
functions/authorizationfunctionjava
ein.
-
-
Prüfen Sie die Repositorys, und notieren Sie sich den Namespace.
-
Öffnen Sie die OCI Cloud Shell, in der OCI-CLI und Docker installiert sein sollen, und fahren Sie mit der Anmeldung in der Registry fort. Prüfen Sie, welche URL für Ihre Region korrekt ist. In diesem Tutorial verwenden wir Brazil East (Sao Paulo) mit der Registry-URL
gru.ocir.io
.docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Aufgabe 4: Java OCI Functions als Autorisiererfunktion erstellen
Hinweis: Wählen Sie das private Subnetz aus.
-
Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, Funktionen, Anwendungen, und klicken Sie auf Anwendung erstellen.
-
Starten Sie OCI Cloud Shell, wo Docker, die OCI-CLI und die Fn-Projekt-CLI installiert sind, und führen Sie die folgenden Befehle aus, um die Funktion zu initialisieren.
Hinweis: Wenn Sie die Aufgaben befolgt haben, hätte der Docker-Anmeldebefehl bereits ausgeführt werden müssen. Falls nicht, fahren Sie mit dem Docker-Anmeldeschritt in Aufgabe 3 fort.
Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, Funktionen, Anwendungen, wählen Sie Ihre Anwendung aus, und klicken Sie auf Erste Schritte. Führen Sie die folgenden Befehle aus.
fn list context fn use context sa-saopaulo-1 fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/functions
Hinweis: In diesem Tutorial verwenden wir die Region Brazil East(Sao Paulo). Wenn Sie eine andere Region verwenden, müssen Sie den Registry-Speicherort ändern.
-
Laden Sie den Beispielcode für die Java-Funktion hier herunter: authorizationfunctionjava.tar, laden Sie ihn in die OCI Cloud Shell hoch, und dekomprimieren Sie die Datei.
# check your file is there ls -lrt # create your directory mkdir authorizationfunctionjava # unzip the file tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava cd authorizationfunctionjava/
Dieser einfache Java-Code empfängt die beiden Parameter
token
undcustomer
. Außerdem ruft es einen dritten Parameter aus einer Systemumgebungsvariablen ab, die in der Funktionskonfiguration definiert ist.Hinweis: Stellen Sie sicher, dass die Parameternamen in der Methode handleRequest(Eingabeeingabe) mit den Namen übereinstimmen, die in der API-Gateway-Konfiguration verwendet werden. Dadurch wird sichergestellt, dass das API-Gateway die Parameter korrekt an die Autorisiererfunktion übergibt.
Dieses Code-Snippet validiert die Eingabe und gibt eine bestimmte Antwort zurück.
Weitere Informationen über das erforderliche Antwortformat und die erforderlichen Parameter finden Sie unter Autorisiererfunktion erstellen.
-
Führen Sie den folgenden Befehl aus, um den Code zu erstellen und die Funktion bereitzustellen.
cd authorizationfunctionjava/ ls -lart fn deploy --app chafikFunctions
-
Erstellen Sie mehrere Konfigurationen, um Ihre Kundenzugangsdaten zum Testen der Funktionsvalidierung zu speichern.
Hinweis: Diese Konfigurationsvariablen werden als Systemumgebungsvariablen im Java-Beispielcode verwendet, der in diesem Tutorial bereitgestellt wird. Sie können den Funktionscode jedoch so ändern, dass er eine alternative Methode verwendet, wie Fn RuntimeContext. Weitere Informationen finden Sie unter Fn RuntimeContext mit Funktionen verwenden.
Secret-Name/Schlüssel Datum FN_AAA_KEY 123.456 FN_BBB_KEY 898.989 FN_ORACLE_KEY ABCD1234 -
Sie können diese Einstellungen über die OCI-Konsole konfigurieren, indem Sie zu Entwicklerservices navigieren. Klicken Sie unter Funktionen auf Anwendungen, wählen Sie Ihre Anwendung aus, und wählen Sie dann Ihre Funktion aus. Klicken Sie auf der Seite "Funktionsdetails" auf Konfiguration.
Oder
Führen Sie die
fn
-Befehle aus.fn config function --help MANAGEMENT COMMAND fn config function - Store a configuration key for this function USAGE fn [global options] config function <app-name> <function-name> <key> <value> DESCRIPTION This command sets the configuration of a specific function for an application. fn config function chafikFunctions authorizationfunctionjava FN_ORACLE_KEY ABCD1234
-
Führen Sie den folgenden Befehl aus, um die Funktion aufzurufen.
# Invoke the function to check if it's working as expected echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
Hinweis: Der erste Aufruf kann bis zu eine Minute dauern, um die Funktion aufzuwärmen. Prüfen Sie die Konfiguration auf zusätzliche Einstellungen. Weitere Informationen finden Sie unter Anfängliche Latenz mit bereitgestelltem gleichzeitigem Zugriff verringern.
Testen Sie mit gültigen und ungültigen Daten, um die Funktionsantworten zu prüfen.
Aufgabe 5: OCI-API-Gateway und eine Mock-API zur Verwendung der Autorisiererfunktion erstellen
Hinweis: Wählen Sie das öffentliche Subnetz aus.
-
Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, API-Management, Gateways, und klicken Sie auf Gateway erstellen.
-
Gehen Sie zur Seite Gatewaydetails, und notieren Sie sich den Hostnamen.
-
Erstellen Sie ein Deployment im API-Gateway. Geben Sie unter Basisinformationen die folgenden Informationen ein.
- Pfadpräfix: Geben Sie
/authFunction
ein.
Hinweis: Hostname und Pfadpräfix aus dem API-Gateway bilden den API-Endpunkt.
- Pfadpräfix: Geben Sie
-
Geben Sie unter Authentifizierung die folgenden Informationen ein.
-
Wählen Sie Einzelne Authentifizierung aus.
-
Wählen Sie Autorisiererfunktion aus.
-
Oracle Functions-Anwendung: Wählen Sie die Anwendung aus, die in Aufgabe 4 erstellt wurde.
-
Oracle-Funktion: Wählen Sie die in Aufgabe 4 erstellte Funktion aus.
-
Wählen Sie Autorisierungsfunktion für mehrere Argumente aus.
-
Funktionsargumente: Geben Sie die folgenden Informationen ein.
Kontexttabelle Headername Argumentname request.headers Kunde Kunde request.headers Token Token
Hinweis Der Headername bezieht sich auf die Informationen, die beim Aufrufen des API-Endpunkts im Anforderungsheader enthalten sind. Der Argumentname ist der Parametername, der an die Autorisiererfunktion gesendet wird. Weitere Informationen finden Sie im Java-Code in Aufgabe 4.3
-
-
Erstellen Sie unter Routen eine einzelne Route für einen Mock-Test mit den folgenden Informationen.
- Pfad: Geben Sie
/mock
ein. - Methoden: Wählen Sie GET aus.
- Backend-Option: Wählen Sie Hinzufügen eines einzelnen Backends bearbeiten aus.
- Backend-Typ: Wählen Sie Bestandsantwort aus.
- Pfad: Geben Sie
-
Definieren Sie unter Routen die Mockantwort, und klicken Sie auf Weiter.
- Statuscode: Geben Sie 200 ein.
- Hauptteil: Geben Sie {"mensagem" : "ok"} ein.
- Headername: Wählen Sie Inhaltstyp aus.
- Headerwert: Wählen Sie application/json; charset=UTF-8 aus.
-
Prüfen Sie unter Prüfen die Konfiguration, und klicken Sie auf Änderungen speichern, um die Deployment-Erstellung abzuschließen.
-
Führen Sie den Befehl
curl
aus, um die API zu testen.# Invoke using <Verb Defined in Route> with the endpoint like: <API Gateway Hostname> + <Deployment Path Prefix> + <Route Path> # Send parameters, such as customer and token, in the Header with values configured in Task 4 - Step 5 curl -i -H "customer: AAA" -H "token: 123456" -X GET https://yourapigatewayhosta.your-region.oci.customer-oci.com/authFunction/mock
Beim Aufruf mit ungültigen Informationen lautet die Antwort HTTP/1.1 401 Unauthorized.
Aufgabe 6: Parameter und Geltungsbereich mit OCI API Gateway aus den Autorisiererfunktionen abrufen
Hinweis Weitere Informationen finden Sie im Java-Code, der in Aufgabe 4 heruntergeladen wurde. In dieser Aufgabe wird erläutert, wie Sie mit
result.context
undresult.scope
im API-Gateway arbeiten.
-
Rufen Sie Kontextwerte aus den Autorisiererfunktionen ab.
Betrachten Sie ein Szenario, in dem Sie Informationen aus der Autorisiererfunktion abrufen und im API-Gateway verwenden müssen. Beispiel: Sie möchten einen Backend-Service mit einem Autorisierungstoken aufrufen.
Hinweis: In dieser Labordemo werden die Informationen im Antwortheader zurückgegeben.
-
Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, API-Verwaltung, Gateways, und wählen Sie Ihr Gateway aus. Klicken Sie auf Deployments, wählen Sie das in Aufgabe 5 erstellte Deployment aus, und klicken Sie auf Bearbeiten.
-
Navigieren Sie zu Routen, und klicken Sie auf Routenantwort-Policys anzeigen.
-
Klicken Sie unter Antwort-Policys unter Headertransformationen auf Hinzufügen, um fortzufahren.
-
Konfigurieren Sie auf der Seite Transformationen für Antwortheader das API-Gateway wie im folgenden Bild dargestellt, und klicken Sie auf Änderungen anwenden.
Beide Parameter aus dem Java-Code werden in API-Antwortheader aufgenommen.
- Headername: Dieses Feld gibt den Namen des Headerattributs in der API-Antwort an.
- Werte: Dieses Feld gibt den Namen des Attributs an, das von der Autorisiererfunktion abgerufen wird.
Verwenden Sie folgendes Format:
${request.auth[attributeNameFromAuthorizerFunction]} #examples ${request.auth[valor01]} ${request.auth[valor02]}
-
Prüfen Sie das Setup der Headerantwort. Klicken Sie auf Weiter, um die Änderungen zu prüfen, und klicken Sie zum Anwenden auf Änderungen speichern.
-
Testen Sie die API, und prüfen Sie die Antwortheader.
-
Lassen Sie uns klären, wie Geltungsbereichswerte aus einer Autorisiererfunktion zur Verbesserung der Sicherheit verwendet werden.
Hinweis: Im Kontext der Autorisierung bezieht sich Geltungsbereich auf die spezifischen Berechtigungen oder Zugriffsebenen, die einem Benutzer oder einer Anwendung erteilt wurden.
Die Autorisiererfunktion gibt alle verfügbaren Geltungsbereiche (in unserem Beispiel ist dies hartcodiert) für diesen API-Aufruf zurück.
Bei einigen Routen im API-Gateway-Deployment möchten Sie möglicherweise nur bestimmte Geltungsbereiche zulassen, um die Sicherheit zu verbessern.
Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, API-Verwaltung, Gateways, und wählen Sie Ihr Gateway aus. Klicken Sie auf Deployments, wählen Sie das in Aufgabe 5 erstellte Deployment aus, und klicken Sie auf Bearbeiten.
-
Navigieren Sie zu Routen, und klicken Sie auf Routenanforderungs-Policys anzeigen.
-
Klicken Sie unter Anforderungs-Policys unter Autorisierung auf Bearbeiten.
-
Wählen Sie unter Autorisierungs-Policy die Option Beliebig als Autorisierungstyp aus, fügen Sie den gesamten von der Autorisiererfunktion zurückgegebenen Zulässigen Geltungsbereich hinzu, und klicken Sie auf Änderungen anwenden.
-
Prüfen Sie unter Prüfen die Änderungen, klicken Sie auf Weiter und dann auf Änderungen speichern, um die Änderungen anzuwenden.
-
Testen Sie die API, und prüfen Sie, ob sie funktioniert. Geltungsbereiche werden von der Autorisiererfunktion zurückgegeben.
-
Ändern Sie das API-Gateway so, dass ein von der Autorisiererfunktion nicht zurückgegebener Geltungsbereich verwendet wird.
Prüfen Sie die Änderungen, und klicken Sie auf Weiter, Änderungen speichern, um die Änderungen anzuwenden.
-
Testen Sie die API, und prüfen Sie das Ergebnis.
Die Antwort hat den HTTP-Status 404 nicht gefunden.
Prüfen Sie, ob die Autorisiererfunktionen korrekt funktionieren, da beide Header zurückgegeben werden. Das Routen-Backend ist jedoch aufgrund der Validierung der Geltungsbereichsautorisierung in den Anforderungs-Policys nicht erfolgreich.
Verwandte Links
Danksagungen
-
Autor – Rodrigo Chafik Choueiri (Oracle LAD A-Team Solution Engineer)
-
Mitwirkende – Joao Tarla (Oracle LAD A-Team Solution Engineer), Sillas Lima (Oracle LAD Solution Architect)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Customize your API Security using OCI API Gateway and OCI Functions
G25978-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.