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.
Integra streaming OCI con altri metodi di autorizzazione mediante OCI API Gateway
Introduzione
Spesso abbiamo bisogno delle nostre applicazioni per utilizzare i servizi REST Oracle Cloud Infrastructure (OCI). Esistono diversi modi per garantire la sicurezza tra i componenti, garantendo che l'applicazione possa eseguire l'autenticazione in modo sicuro al servizio backend.
Nella maggior parte dei casi, questo task è nativo all'interno di Oracle Cloud, in quanto esistono diversi modi per proteggere la rete e l'accesso ai servizi esistenti. Solo alcune impostazioni e hai finito. Tuttavia, ci sono casi in cui l'applicazione può offrire ulteriori requisiti di sicurezza e connettività. Il caso d'uso di questa esercitazione soddisfa un'esigenza molto comune nello scenario ibrido o multicloud (on-premise connesso a Oracle Cloud o Oracle Cloud connesso a un altro cloud).
Presentiamo il seguente scenario:
-
Applicazione su una rete on premise connessa a Oracle Cloud tramite Fast-Connect/VPN.
-
L'applicazione deve utilizzare un servizio di streaming OCI.
-
Il servizio OCI non dispone di un meccanismo di autenticazione che soddisfi le possibilità del consumatore dell'applicazione.
-
L'applicazione deve eseguire l'autenticazione utilizzando OAuth2 per poter accedere al servizio in modo sicuro.
Pertanto, il tutorial fornisce la seguente soluzione:
-
Configurare il provider di identità del cloud Oracle Identity Cloud Service per l'autenticazione tramite OAuth2.
-
Configurare il gateway API OCI per l'integrazione con Oracle Identity Cloud Service per l'autenticazione tramite un token ottenuto.
-
Codificare una funzione per produrre l'autenticazione per lo streaming OCI (metodo
draft-cavage-http-signatures-08
). -
Crea gruppi e criteri per limitare l'accesso alle risorse cloud.
-
Fornire un provider di identità che consenta di passare l'ID client e l'ID segreto e ottenere un token di autenticazione.
-
Offri un servizio REST funzionale del gateway API che esegue l'autenticazione tramite il token ottenuto e consente al consumatore di utilizzare i servizi di streaming OCI.
Nota: il codice Funzioni OCI può essere scaricato qui: OAuthOCIService-fn.zip.
Obiettivi
-
Consente a un'applicazione esterna di utilizzare i servizi REST OCI con autenticazione OAuth2.
-
Fornire un servizio di autenticazione OAuth2 su OCI.
-
Configura il gateway API OCI e le funzioni OCI per eseguire i servizi OCI tramite un token.
Prerequisiti
-
Un'istanza del gateway API OCI creata ed esposta a Internet. Per ulteriori informazioni, vedere Creazione del primo gateway API in Oracle Cloud.
-
Connettività di rete tra OCI API Gateway, OCI Functions e OCI PaaS resource.
-
VCN/subnet
-
Lista di sicurezza
-
Gateway NAT/gateway Internet
-
Reti pubbliche/private
-
-
Conoscenza delle funzioni OCI e dell'API REST OCI per programmare una chiamata per il servizio OCI.
Task 1: configurare OAuth2 con Oracle Identity Cloud Service
-
Ottenere i parametri del gateway API OCI: iniziamo a configurare il meccanismo OAuth2. È necessario integrare l'istanza del gateway API OCI in un provider di identità configurando Oracle Identity Cloud Service da Oracle Cloud come provider di identità.
-
Andare all'istanza del gateway API OCI e copiare il nome host. Queste informazioni verranno utilizzate nella configurazione del server delle risorse di Oracle Identity Cloud Service nel passo successivo.
-
-
Crea un'applicazione risorsa: è necessario creare un responsabile autorizzazioni OAuth2 per l'applicazione. Possiamo farlo con Oracle Identity Cloud Service in Oracle Cloud.
-
Nella console OCI, andare a Identità e sicurezza e selezionare Federazione.
-
Fare clic su OracleIdentityCloudSevice.
-
Fare clic sul collegamento Console di Oracle Identity Cloud Service per l'istanza di Oracle Identity Cloud Service.
-
Creeremo due applicazioni. Fare clic su Applicazioni e servizi.
-
Nelle applicazioni, fare clic su Aggiungi.
-
Selezionare Applicazione riservata per avviare la configurazione del server delle risorse.
-
Verrà configurata la prima applicazione. Immettere un Nome nell'applicazione del server delle risorse e fare clic su Successivo.
-
Fare clic su Salta per dopo. È necessario configurare solo la risorsa.
-
Immettere il nome host del gateway API ottenuto nel passo 1.
-
Fare clic su Aggiungi ambito e immettere le informazioni sull'ambito.
-
Rivedere le informazioni sull'ambito, fare clic su Avanti due volte e fare clic su Fine.
-
Fare clic su Attiva per attivare l'applicazione.
-
-
Creazione di un'applicazione client.
-
In Applicazioni, fare clic su Aggiungi.
-
Selezionare Applicazione riservata per avviare la configurazione del server delle risorse.
-
Immettere un nome per l'applicazione e fare clic su Successivo.
-
Selezionare Configure the application as a client now per abilitare le configurazioni per l'applicazione client. Selezionare Credenziali client, Asserzione JWT e Per conto di.
Nota: se si desidera convalidare OAuth2 nel codice funzione, è necessario impostare il flag Introspeziona. Verrà abilitato il servizio API REST Oracle Identity Cloud Service
/oauth2/v1/introspect
. -
Scorrere verso il basso e fare clic su Aggiungi ambito.
-
Trovare l'applicazione risorsa creata prima di (
oauth_resource_server
) e fare clic su Aggiungi. -
È possibile visualizzare l'ambito aggiunto all'applicazione. Fare clic su Avanti.
Nota: prendere nota del valore dell'ambito. Sarà necessario utilizzarlo per richiedere un token.
-
Saltare le finestre Risorse e Criterio livello Web. In Autorizzazione, selezionare Applica privilegi come autorizzazione e fare clic su Fine.
-
Prendere nota delle informazioni Client ID e Client Secret. Avrai bisogno di questo per ottenere il tuo token.
-
Fare clic su Attiva per attivare l'applicazione e il responsabile autorizzazioni OAuth2 è pronto per il test.
-
-
Ottieni un token: ora è possibile eseguire il test del responsabile autorizzazioni OAuth2 per ottenere il token.
-
Comporre l'URL per il responsabile autorizzazioni. Per ottenere questo risultato, ottenere l'URL di Oracle Identity Cloud Service nel browser. Nell'URL di Oracle Identity Cloud Service è possibile visualizzare uno dei seguenti elementi:
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
. -
Sarà necessario il collegamento URL fino a
oraclecloud.com
, che è l'endpoint radice. Ad esempio,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
È necessario aggiungere il percorso di autenticazione oAuth. Questo URL verrà eseguito come richiesta REST
POST
. Ad esempio,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
. È necessario immettere alcuni parametri per richiedere il token. -
Immettere le credenziali come Autenticazione di base, ID client e Segreto client.
-
Nel contenuto del corpo immettere i valori grant_type e ambito. Tenere presente che l'ambito è stato acquisito nella configurazione di Oracle Identity Cloud Service.
-
Fare clic su Invia ed eseguire la richiesta
POST
e visualizzare il token.
-
Task 2: configurare le funzioni OCI per chiamare l'API SDK OCI
-
Comprendere le funzioni OCI e il gateway API OCI: è una best practice per esporre i tuoi servizi tramite un gateway API OCI. È possibile eseguire l'autenticazione ignorando le credenziali dal gateway API OCI ai servizi backend, ma se l'autenticazione backend non era il metodo appropriato per l'applicazione client, è possibile eseguire alcune configurazioni a livello di gateway API OCI.
In questo passo, analizziamo in che modo OCI API Gateway può aiutarci a integrare l'autenticazione OAuth2 e la richiesta per qualsiasi servizio OCI, come lo streaming OCI tramite le funzioni OCI.
Le funzioni OCI possono eseguire il job per produrre l'autenticazione/autorizzazione corretta e passare al servizio OCI senza dover passare le credenziali utente o le chiavi private alle applicazioni consumer. Alcuni servizi nel servizio OCI non possono eseguire l'autenticazione utilizzando il metodo OAuth2, quindi possiamo farlo con OCI Functions. Per creare e distribuire le funzioni OCI, vedere Avvio rapido delle funzioni OCI.
In questo esempio, il servizio di streaming OCI può eseguire l'autenticazione tramite la chiave privata OCI in IAM OCI tramite il metodo draft-cavage-http-signatures-08 e i consumer possono eseguire l'autenticazione tramite OAuth2.
-
Comprendere il codice: questo codice verrà utilizzato con il gateway API OCI. Nella distribuzione API, l'endpoint di streaming OCI verrà configurato nel gateway API OCI e verrà passato come parametro di autorizzazione HEADER. Pertanto, puoi utilizzare questa funzione per molti servizi in ogni distribuzione del gateway API OCI di cui hai bisogno.
-
Questa funzione in Python creerà una data e un'ora nel formato per l'autenticazione. La data e l'ora devono essere generate una sola volta e utilizzate in due punti. All'intestazione Date nella richiesta di streaming OCI e nell'intestazione HEADER crittografato Signature.
-
Funzione per la cifratura della firma. L'assembly consiste nell'utilizzare la chiave privata dell'utente IAM OCI con SHA-256 e quindi in base64.
-
La cifratura della firma verrà utilizzata nell'intestazione completa della autorizzazione.
-
Questo è il codice di convalida del token Oracle Identity Cloud Service OAUTH2. È necessario configurare il file
config.json
con i parametri dell'applicazione Oracle Identity Cloud Service. -
Questo è l'inizio della funzione e inizializza alcune informazioni dalla sicurezza IAM OCI e dalle variabili di streaming OCI create per questa distribuzione API (
streaming_host
eoci_region
). -
Questa è la parte principale di questa funzione, ci sono due parti.
Nella prima parte viene ottenuto il token passato nella richiesta del gateway API. Successivamente, viene chiamata la funzione auth_idcs() per convalidare il token in Oracle Identity Cloud Service. Prima di generare la stringa draft-cavage-http-signatures-08, convalidare il token Oracle Identity Cloud Service. Se non si tratta di un token valido, la risposta restituirà un errore 401 non autorizzato.
Nella seconda parte, creeremo due valori. La data (d) con il formato data verrà utilizzata nella creazione della firma (a). I rdata creeranno la risposta per la funzione con i valori di autorizzazione e data che verranno utilizzati dal gateway API OCI per l'autenticazione in OCI Streaming.
-
Qui è possibile generare un log in OCI Observability e questo passo è facoltativo. Immettere l'OCID (Oracle Cloud Identifier) per il log. È necessario creare un log personalizzato in precedenza.
Nota: per creare un log personalizzato in OCI Observability, vedere Use OCI API Gateway, Functions and Observability to Validate JSON Content and Monitor API Headers and Body.
-
Questo è il passo finale e restituisce un'autenticazione valida.
Si tratta delle librerie
requirements.txt
che dovranno essere caricate in questa funzione (fn).requirements.txt --------------------- fdk>=0.1.54 requests oci cryptography six PyJWT py3_lru_cache simplejson
Questo è il file
config.json
.Questo è il file di configurazione OCI. È possibile copiare questo file dall'installazione CLI OCI, ma è importante modificare la sezione
key_file
e rimuovere il percorso dell'installazione CLI OCI. Verrà utilizzato nel codice Python per generare la stringa crittograficadraft-cavage-http-signatures-08
.Prima di distribuire la funzione, creare due variabili e immettere i valori OCID di streaming OCI e area OCI in questo modo.
fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a fn config app <function-app> oci_region us-ashburn-1
Distribuire la funzione e configurarla nel gateway API OCI.
-
Task 3: configurare una distribuzione del gateway API
Nota: sviluppare una funzione e chiamarla in OCI API Gateway. Vedere Funzioni OCI: Convalida una chiave API con API Gateway.
-
Configurare il servizio OCI API Gateway. In questo esempio verrà configurato un servizio di streaming OCI. Nelle informazioni di base, immettere il prefisso del percorso come
/20180418/streams/
più l'OCID dell'istanza di streaming.Ad esempio:
/20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
In Autenticazione, selezionare Autenticazione singola e Funzione autore. Selezionare il compartimento e la funzione Oracle come
get-authorization
. -
Configurare i parametri HEADER della richiesta.
Header Parameter 1 Context table=request.headers Header name=Date Argument name=Date Header Parameter 2 Context table=request.headers Header name=token Argument name=token
-
Per configurare HEADER per i parametri di Oracle Identity Cloud Service, è necessario fare clic su Mostra criteri di richiesta di instradamento.
-
Nelle trasformazioni HEADER, fare clic su Modifica e immettere Comportamento in
Overwrite
in entrambi i parametri, Nome intestazione rispettivamenteAuthorization
,Date
e Valori rispettivamente${request.auth[authorization]}
e${request.auth[date]}
. I valori${request.auth[authorization]}
e${request.auth[date]}
sono i valori restituiti dal codice funzione Python e verranno passati come HEADER per il servizio backend.
Task 4: configurare il gruppo e i criteri OCI
Per configurare i criteri per lo streaming OCI, vedere Policy di streaming OCI ed è possibile utilizzare i criteri comuni, vedere Policy comuni.
Task 5: eseguire il test dell'API
È possibile simulare la richiesta dell'applicazione OAuth2 per il servizio di distribuzione dei modelli in OCI Streaming.
-
Ottenere il token e passare l'ID client e il segreto client al provider di Oracle Identity Cloud Service.
Verb: POST URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token BODY (x-www-form-urlencoded): scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope grant_type: client_credentials HEADER Authorization: clientID:clientSecret\* - convert your clientID:clientSecret to a base64 value
-
Eseguire il test della richiesta in OCI API Gateway. Immettere l'endpoint di distribuzione del gateway API e selezionare POST per la richiesta REST. È necessario dichiarare sei HEADER nel corpo della richiesta.
Content-Type: application/json access-control-allow-origin: * access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS access-control-allow-credentials: true Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT token: put your <access_token> here* * Remember that your token have 1 hour duration.
Ed ecco il risultato.
Nei log è possibile visualizzare i payload per la logica di autorizzazione del codice personalizzato.
Collegamenti correlati
-
Funzioni OCI: chiama una funzione utilizzando il gateway API
-
Panoramica delle chiamate REST di Oracle Cloud Infrastructure con curl
Conferme
- Autore - Cristiano Hoshikawa (Solution Engineer Oracle LAD A-Team)
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.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
F91391-02
November 2024