Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Personalizza la tua sicurezza API utilizzando OCI API Gateway e OCI Functions
Introduzione
Scopri la perfetta sinergia tra le funzioni di Oracle Cloud Infrastructure (OCI) e il gateway API OCI per implementare un metodo di autenticazione personalizzato per le tue API e come le funzioni possono recuperare argomenti dal gateway API.
OCI API Gateway
Il servizio OCI API Gateway ti consente di pubblicare le API con endpoint privati accessibili dall'interno della tua rete e che puoi esporre con indirizzi IP pubblici se desideri che accettino il traffico Internet. Gli endpoint supportano la convalida delle API, la trasformazione delle richieste e delle risposte, il CORS, l'autenticazione e l'autorizzazione e la limitazione delle richieste.
Il servizio gateway API OCI consente di creare uno o più gateway API in una subnet regionale per elaborare il traffico dai client API e instradarlo ai servizi backend. Puoi utilizzare un singolo gateway API per collegare più servizi backend (come OCI Load Balancer, istanze di OCI Compute e OCI Functions) in un unico endpoint API consolidato.
Funzioni OCI
OCI Functions è una piattaforma completamente gestita, multi-tenant, altamente scalabile, on-demand e Functions-as-a-Service. Si basa su OCI di livello aziendale e si basa sul motore open source Fn Project. Utilizza OCI Functions quando vuoi concentrarti sulla scrittura di codice per soddisfare le esigenze aziendali.
Nota:
Questo tutorial è progettato esclusivamente per scopi educativi e di studio. Fornisce un ambiente per gli studenti di sperimentare e acquisire esperienza pratica in un ambiente controllato. È fondamentale notare che le configurazioni e le pratiche di sicurezza utilizzate in questo laboratorio potrebbero non essere adatte a scenari reali.
Le considerazioni sulla sicurezza per le applicazioni del mondo reale sono spesso molto più complesse e dinamiche. Pertanto, prima di implementare una delle tecniche o configurazioni qui dimostrate in un ambiente di produzione, è essenziale condurre una valutazione e un riesame completi della sicurezza. Questa revisione dovrebbe comprendere tutti gli aspetti della sicurezza, tra cui il controllo dell'accesso, la crittografia, il monitoraggio e la conformità, per garantire che il sistema sia allineato alle politiche e agli standard di sicurezza dell'organizzazione.
La sicurezza dovrebbe sempre essere una priorità assoluta quando si passa da un ambiente di laboratorio a un'implementazione reale.
Obiettivo
- Crea un gateway API con una risposta mock utilizzando le funzioni OCI come funzioni dell'autore per implementare una convalida della sicurezza personalizzata, restituendo parametri specifici al gateway API.
Prerequisiti
-
Un account Oracle con autorizzazioni di amministratore.
-
Creare un token di autenticazione nell'utente. Per ulteriori informazioni, vedere Generazione di un token di autenticazione per abilitare il login a Oracle Cloud Infrastructure Registry.
-
Compartimento per creare le risorse.
Nota: prendere nota del nome compartimento e dell'ID compartimento.
-
VCN con una subnet privata e pubblica. Per ulteriori informazioni, vedere Creazione di una rete cloud virtuale.
-
Applicazione funzionale distribuita nella subnet privata della VCN. Per ulteriori informazioni, vedere Funzioni QuickStart Guide.
-
Un gateway API creato nella subnet pubblica della VCN. Per ulteriori informazioni, vedere API Gateway QuickStart Guide.
-
Utilizzeremo un backend fittizio, noto nel gateway API come risposta alle scorte. Per ulteriori informazioni, vedere Aggiunta di risposte scorte come backend del gateway API.
-
Accedere a OCI Cloud Shell utilizzando il browser. Per ulteriori informazioni, vedere OCI Cloud Shell.
-
Configurare la lista di sicurezza per consentire l'accesso tra subnet private e pubbliche.
Task 1: Impostazione dei gruppi dinamici
Eseguire il login a OCI Console, accedere al dominio, fare clic su Gruppi dinamici e creare gruppi con le informazioni riportate di seguito.
-
Nome gruppo: immettere
MyFunctions
.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
-
Nome gruppo: immettere
MyApiGateway
.ALL {resource.type = 'ApiGateway', resource.compartment.id = 'pasteYourCompartmentOCID'}
Task 2: Creare criteri
Andare a OCI Console, andare a Criteri e creare criteri con le informazioni riportate di seguito.
-
Nome criterio: immettere
FunctionsPolicies
.Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
-
Nome criterio: immettere
ApiGatewayPolicies
.Allow dynamic-group MyApiGateway to use functions-family in compartment YOUR-COMPARTMENT-NAME
Task 3: Creare un OCI Container Registry
-
Andare alla console OCI, andare a Servizi sviluppatore, Container e artifact, selezionare Container di registro e fare clic su Crea repository per creare un repository privato per l'immagine della funzione.
-
Nome repository: immettere
functions/authorizationfunctionjava
.
-
-
Controllare i repository e prendere nota dello spazio di nomi.
-
Aprire OCI Cloud Shell in cui installare l'interfaccia CLI OCI e Docker e procedere con il login al registro. Controlla qual è l'URL corretto per la tua regione. In questa esercitazione viene utilizzato Brasile orientale (San Paolo) dove l'URL del registro è
gru.ocir.io
.docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Task 4: creare funzioni OCI Java come funzione del responsabile autorizzazioni
Nota: assicurarsi di selezionare la subnet privata.
-
Andare a OCI Console, andare a Servizi per sviluppatori, Funzioni, Applicazioni e fare clic su Crea applicazione.
-
Avviare OCI Cloud Shell in cui sono installati Docker, l'interfaccia CLI OCI e l'interfaccia CLI Fn Project ed eseguire i comandi riportati di seguito per inizializzare la funzione.
Nota: se sono stati eseguiti i task, il comando di login Docker avrebbe dovuto essere già stato eseguito. In caso contrario, procedere con il passo di login Docker nel task 3.
Andare alla console OCI, andare a Servizi per sviluppatori, Funzioni, Applicazioni, selezionare l'applicazione e fare clic su Introduzione. Eseguire i comandi seguenti.
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
Nota: in questa esercitazione viene utilizzata l'area Est del Brasile (San Paolo). Se si utilizza un'area diversa, è necessario modificare la posizione del registro.
-
Scaricare il codice di esempio della funzione Java da qui: authorizationfunctionjava.tar, caricarlo in OCI Cloud Shell e quindi estrarre il file.
# check your file is there ls -lrt # create your directory mkdir authorizationfunctionjava # unzip the file tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava cd authorizationfunctionjava/
Questo semplice codice Java riceve due parametri
token
ecustomer
. Recupera inoltre un terzo parametro da una variabile di ambiente di sistema definita nella configurazione della funzione.Nota: assicurarsi che i nomi dei parametri nel metodo handleRequest(input input) siano uguali ai nomi utilizzati nella configurazione del gateway API. Ciò garantisce che il gateway API passi correttamente i parametri alla funzione del responsabile autorizzazioni.
Questo snippet di codice convalida l'input e restituisce una risposta specifica.
Per ulteriori informazioni sul formato e sui parametri di risposta richiesti, vedere Creazione di una funzione del responsabile autorizzazioni.
-
Eseguire il comando seguente per creare il codice e distribuire la funzione.
cd authorizationfunctionjava/ ls -lart fn deploy --app chafikFunctions
-
Crea diverse configurazioni per memorizzare le credenziali del cliente per il test della convalida della funzione.
Nota: queste variabili di configurazione vengono utilizzate come variabili di ambiente di sistema all'interno del codice di esempio Java fornito in questa esercitazione. È tuttavia possibile modificare il codice funzione per utilizzare un approccio alternativo, ad esempio Fn RuntimeContext. Per ulteriori informazioni, vedere Utilizzo di Fn RuntimeContext con funzioni.
Nome/chiave segreto Valore FN_AAA_KEY 123.456 FN_BBB_KEY 898.989 FN_ORACLE_KEY ABCD1234 -
È possibile configurare queste impostazioni tramite OCI Console passando a Servizi per sviluppatori. In Funzioni, fare clic su Applicazioni, selezionare l'applicazione, quindi selezionare la funzione. Nella pagina dei dettagli della funzione, fare clic su Configurazione.
Oppure
Eseguire i comandi
fn
.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
-
Eseguire il comando seguente per richiamare la funzione.
# Invoke the function to check if it's working as expected echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
Nota: il richiamo iniziale potrebbe richiedere fino a un minuto per riscaldare la funzione. Controllare la configurazione per eventuali impostazioni aggiuntive. Per ulteriori informazioni, vedere Riduzione della latenza iniziale mediante l'accesso concorrente con provisioning eseguito.
Eseguire il test con dati validi e non validi per verificare le risposte della funzione.
Task 5: creare un gateway API OCI e un'API Mock per utilizzare la funzione Authorizer
Nota: assicurarsi di selezionare la subnet pubblica.
-
Andare a OCI Console, accedere a Servizi per sviluppatori, Gestione API, Gateway e fare clic su Crea gateway.
-
Andare alla pagina Dettagli gateway e annotare il nome host.
-
Crea una distribuzione nel gateway API. In Informazioni di base, immettere le seguenti informazioni.
- Prefisso percorso: immettere
/authFunction
.
Nota: il nome host e il prefisso percorso del gateway API verranno utilizzati per formare l'endpoint API.
- Prefisso percorso: immettere
-
In Autenticazione, immettere le informazioni riportate di seguito.
-
Selezionare Autenticazione singola.
-
Selezionare Funzione autorezer.
-
Applicazione Oracle Functions: selezionare l'applicazione creata nel task 4.
-
Funzione Oracle: selezionare la funzione creata nel task 4.
-
Selezionare Funzione del provider di autorizzazioni per più argomenti.
-
Argomenti della funzione: immettere le informazioni riportate di seguito.
Tabella contesto Nome intestazione Nome argomento request.headers cliente cliente request.headers token token
Nota Il nome intestazione fa riferimento alle informazioni incluse nell'intestazione della richiesta quando si richiama l'endpoint API. Il nome dell'argomento è il nome del parametro inviato alla funzione del responsabile autorizzazioni. Fare riferimento al codice Java nel task 4.3.
-
-
In Cicli, creare un singolo instradamento per un test mock con le informazioni riportate di seguito.
- Percorso: immettere
/mock
. - Metodi: selezionare GET.
- Opzione backend: selezionare Modifica backend singolo aggiunto.
- Tipo backend: selezionare Risposta stock.
- Percorso: immettere
-
In Cicli definire la risposta di spostamento e fare clic su Avanti.
- Codice stato: immettere 200.
- Corpo: immettere {"mensagem" : "ok"}.
- Nome intestazione: selezionare Tipo di contenuto.
- Valore intestazione: selezionare application/json; charset=UTF-8.
-
In Rivedi, verificare la configurazione e fare clic su Salva modifiche per completare la creazione della distribuzione.
-
Eseguire il comando
curl
per eseguire il test dell'interfaccia API.# 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
Se si richiama con informazioni non valide, la risposta sarà HTTP/1.1 401 Non autorizzato.
Task 6: utilizzare OCI API Gateway per recuperare parametri e ambito dalle funzioni del responsabile autorizzazioni
Nota Fare riferimento al codice Java scaricato nel task 4. Questo task spiega come utilizzare
result.context
eresult.scope
all'interno del gateway API.
-
Recupera i valori di contesto dalle funzioni del responsabile autorizzazioni.
Si consideri uno scenario in cui è necessario recuperare le informazioni dalla funzione del responsabile autorizzazioni e utilizzarle all'interno del gateway API. Ad esempio, è possibile utilizzare un token di autorizzazione per richiamare un servizio backend.
Nota: in questa dimostrazione del laboratorio le informazioni vengono restituite nell'intestazione della risposta.
-
Andare a OCI Console, andare a Servizi per sviluppatori, Gestione API, Gateway e selezionare il gateway. Fare clic su Distribuzioni, selezionare la distribuzione creata nel task 5 e fare clic su Modifica.
-
Passare a Cicli di instradamento e fare clic su Mostra criteri di risposta instradamento.
-
In Criteri di risposta, in Trasformazioni intestazione, fare clic su Aggiungi per continuare.
-
Nella pagina Trasformazioni dell'intestazione della risposta configurare il gateway API come mostrato nell'immagine riportata di seguito e fare clic su Applica modifiche.
Entrambi i parametri del codice Java verranno inclusi nelle intestazioni di risposta API.
- Nome intestazione: questo campo specifica il nome dell'attributo di intestazione nella risposta API.
- Valori: questo campo specifica il nome dell'attributo recuperato dalla funzione del responsabile autorizzazioni.
Utilizzare il formato riportato di seguito:
${request.auth[attributeNameFromAuthorizerFunction]} #examples ${request.auth[valor01]} ${request.auth[valor02]}
-
Rivedere l'impostazione della risposta intestazione. Fare clic su Successivo per controllare le modifiche e fare clic su Salva modifiche per applicarle.
-
Eseguire il test dell'API ed esaminare le intestazioni delle risposte.
-
Chiariamo come utilizzare i valori di ambito di una funzione del responsabile autorizzazioni per migliorare la sicurezza.
Nota: nel contesto dell'autorizzazione, scope fa riferimento alle autorizzazioni o ai livelli di accesso specifici concessi a un utente o a un'applicazione.
La funzione del responsabile autorizzazioni restituisce tutti gli ambiti disponibili (nel nostro esempio, questo è non modificabile) per questa chiamata API.
Per alcuni cicli nella distribuzione del gateway API, è possibile consentire solo ambiti specifici per migliorare la sicurezza.
Andare a OCI Console, andare a Servizi per sviluppatori, Gestione API, Gateway e selezionare il gateway. Fare clic su Distribuzioni, selezionare la distribuzione creata nel task 5 e fare clic su Modifica.
-
Passare a Cicli e fare clic su Mostra criteri richiesta di instradamento.
-
In Criteri di richiesta, in Autorizzazione, fare clic su Modifica.
-
In Criterio di autorizzazione, selezionare Qualsiasi come Tipo di autorizzazione, aggiungere tutto l'ambito consentito restituito dalla funzione del responsabile autorizzazioni e fare clic su Applica modifiche.
-
In Revisione rivedere le modifiche, fare clic su Avanti e quindi su Salva modifiche per applicare le modifiche.
-
Eseguire il test dell'API e verificare che funzioni. Gli ambiti vengono restituiti dalla funzione del responsabile autorizzazioni.
-
Modificare il gateway API per utilizzare un ambito non restituito dalla funzione del responsabile autorizzazioni.
Rivedere le modifiche, fare clic su Avanti, quindi su Salva modifiche per applicare le modifiche.
-
Eseguire il test dell'API e verificare il risultato.
La risposta sarà uno stato http 404 Non trovato.
Verificare che le funzioni del responsabile autorizzazioni funzionino correttamente, poiché vengono restituite entrambe le intestazioni. Tuttavia, il backend di instradamento non riesce a causa della convalida dell'autorizzazione dell'ambito nei criteri di richiesta.
Collegamenti correlati
Conferme
-
Autore - Rodrigo Chafik Choueiri (Solution Engineer Oracle LAD A-Team)
-
Collaboratori - Joao Tarla (Solution Engineer Oracle LAD A-Team), Sillas Lima ( Solution Architect Oracle LAD)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Customize your API Security using OCI API Gateway and OCI Functions
G25982-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.