Hinweis:

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:

Zielsetzung

Voraussetzungen

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.

Aufgabe 2: Policys erstellen

Gehen Sie zur OCI-Konsole, navigieren Sie zu Policys, und erstellen Sie Policys mit den folgenden Informationen.

Aufgabe 3: OCI Container Registry erstellen

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

      Erstellen des Repositorys

  2. Prüfen Sie die Repositorys, und notieren Sie sich den Namespace.

    Repository-Namespace

  3. Ö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
    

    docker-Anmeldung

Aufgabe 4: Java OCI Functions als Autorisiererfunktion erstellen

Hinweis: Wählen Sie das private Subnetz aus.

  1. Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, Funktionen, Anwendungen, und klicken Sie auf Anwendung erstellen.

    Anwendung erstellen

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

  3. 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/
    

    TAR-Datei dekomprimieren

    Dieser einfache Java-Code empfängt die beiden Parameter token und customer. 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.

    Java-Code

    Dieses Code-Snippet validiert die Eingabe und gibt eine bestimmte Antwort zurück.

    validation

    result

    Weitere Informationen über das erforderliche Antwortformat und die erforderlichen Parameter finden Sie unter Autorisiererfunktion erstellen.

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

    erstellen

  5. 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
  6. 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.

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

    Funktion aufrufen

Aufgabe 5: OCI-API-Gateway und eine Mock-API zur Verwendung der Autorisiererfunktion erstellen

Hinweis: Wählen Sie das öffentliche Subnetz aus.

  1. Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, API-Management, Gateways, und klicken Sie auf Gateway erstellen.

    Anwendung erstellen

  2. Gehen Sie zur Seite Gatewaydetails, und notieren Sie sich den Hostnamen.

    Gateway-Hostname

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

    Basisinformationen

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

    Authentifizierung

    Funktionsparameter

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

    Route

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

    Mock

  7. Prüfen Sie unter Prüfen die Konfiguration, und klicken Sie auf Änderungen speichern, um die Deployment-Erstellung abzuschließen.

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

    Funktion aufrufen

    Beim Aufruf mit ungültigen Informationen lautet die Antwort HTTP/1.1 401 Unauthorized.

    401 Status

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 und result.scope im API-Gateway arbeiten.

  1. Rufen Sie Kontextwerte aus den Autorisiererfunktionen ab.

    Kontextvariable

    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.

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

    Deployment bearbeiten

  3. Navigieren Sie zu Routen, und klicken Sie auf Routenantwort-Policys anzeigen.

    Routingantwort

  4. Klicken Sie unter Antwort-Policys unter Headertransformationen auf Hinzufügen, um fortzufahren.

    Hinzufügen (Schaltfläche)

  5. 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]}
    

    Kopfdaten einrichten

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

    Scheckheadersetup

  7. Testen Sie die API, und prüfen Sie die Antwortheader.

    Headerantwort

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

    Kontextvariable

    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.

    Deployment bearbeiten

  9. Navigieren Sie zu Routen, und klicken Sie auf Routenanforderungs-Policys anzeigen.

    Routenanforderung

  10. Klicken Sie unter Anforderungs-Policys unter Autorisierung auf Bearbeiten.

    Bearbeiten, Schaltfläche

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

    Autorisierungs-Policy

  12. Prüfen Sie unter Prüfen die Änderungen, klicken Sie auf Weiter und dann auf Änderungen speichern, um die Änderungen anzuwenden.

    Autorisierungs-Policy

  13. Testen Sie die API, und prüfen Sie, ob sie funktioniert. Geltungsbereiche werden von der Autorisiererfunktion zurückgegeben.

    Test erfolgreich

  14. Ä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.

    Geltungsbereich nicht erfolgreich

  15. Testen Sie die API, und prüfen Sie das Ergebnis.

    Autorisierungs-Policy

    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.

Danksagungen

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.