Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction à Oracle Cloud Infrastructure Free Tier.
- Il utilise des exemples de valeurs pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Personnaliser la sécurité de votre API à l'aide d'OCI API Gateway et d'OCI Functions
Introduction
Découvrez la synergie transparente entre Oracle Cloud Infrastructure (OCI) Functions et OCI API Gateway pour implémenter une méthode d'authentification personnalisée pour vos API et comment les fonctions peuvent extraire des arguments de la passerelle d'API.
Passerelle d'API OCI
Le service OCI API Gateway vous permet de publier des API avec des adresses privées accessibles à partir de votre réseau. Si vous voulez qu'elles acceptent le trafic Internet, vous pouvez les exposer avec des adresses IP publiques. Les adresses prennent en charge la validation d'API, la transformation des demandes et des réponses, CORS, l'authentification et l'autorisation, ainsi que la limitation des demandes.
A l'aide du service OCI API Gateway, vous pouvez créer des passerelles d'API dans un sous-réseau régional pour traiter le trafic à partir de clients d'API et l'acheminer vers des services back-end. Vous pouvez utiliser une seule passerelle d'API pour lier plusieurs services back-end (tels qu'OCI Load Balancer, les instances OCI Compute et OCI Functions) en une seule adresse d'API consolidée.
Fonctions OCI
OCI Functions est une plate-forme Functions-as-a-Service entièrement gérée, colocative, hautement évolutive et à la demande. Elle est basée sur OCI de niveau entreprise et sur le moteur open source du projet Fn. Utilisez OCI Functions lorsque vous voulez vous concentrer sur l'écriture de code pour répondre aux besoins de votre entreprise.
Remarque :
Ce tutoriel est conçu uniquement à des fins éducatives et d'étude. Il fournit un environnement permettant aux apprenants d'expérimenter et d'acquérir une expérience pratique dans un environnement contrôlé. Il est essentiel de noter que les configurations et pratiques de sécurité utilisées dans cet exercice peuvent ne pas convenir à des scénarios réels.
Les considérations de sécurité pour les applications réelles sont souvent beaucoup plus complexes et dynamiques. Par conséquent, avant de mettre en œuvre l'une des techniques ou configurations démontrées ici dans un environnement de production, il est essentiel d'effectuer une évaluation et un examen complets de la sécurité. Cet examen devrait englober tous les aspects de la sécurité, y compris le contrôle d'accès, le cryptage, la surveillance et la conformité, afin de s'assurer que le système s'aligne sur les politiques et les normes de sécurité de l'organisation.
La sécurité doit toujours être une priorité absolue lors de la transition d'un environnement de laboratoire à un déploiement réel.
Objectif
- Créez une passerelle d'API avec une réponse factice en utilisant OCI Functions en tant que fonctions d'autorisation pour implémenter une validation de sécurité personnalisée, en renvoyant des paramètres spécifiques à la passerelle d'API.
Prérequis
-
Compte Oracle avec des droits d'accès administrateur.
-
Créez un jeton d'authentification dans l'utilisateur. Pour plus d'informations, reportez-vous à Génération d'un jeton d'authentification pour permettre la connexion à Oracle Cloud Infrastructure Registry.
-
Compartiment permettant de créer les ressources.
Remarque : notez le nom du compartiment et l'ID de compartiment.
-
VCN avec un sous-réseau privé et public. Pour plus d'informations, reportez-vous à Création d'un réseau cloud virtuel.
-
Application de fonction déployée dans le sous-réseau privé de votre VCN. Pour plus d'informations, reportez-vous à Guides des fonctions QuickStart.
-
Une passerelle d'API créée dans le sous-réseau public de votre VCN. Pour plus d'informations, reportez-vous au Guide QuickStart d'API Gateway.
-
Nous utiliserons un back-end factice, connu dans la passerelle d'API en tant que réponse de stock. Pour plus d'informations, reportez-vous à Ajout de réponses par défaut en tant que back-end de passerelle d'API.
-
Accédez à OCI Cloud Shell à l'aide de votre navigateur. Pour plus d'informations, reportez-vous à OCI Cloud Shell.
-
Configurez votre liste de sécurité pour autoriser l'accès entre les sous-réseaux privés et publics.
Tâche 1 : configurer des groupes dynamiques
Connectez-vous à la console OCI, accédez au domaine, cliquez sur Groupes dynamiques et créez des groupes avec les informations suivantes.
-
Nom de groupe : entrez
MyFunctions
.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
-
Nom de groupe : entrez
MyApiGateway
.ALL {resource.type = 'ApiGateway', resource.compartment.id = 'pasteYourCompartmentOCID'}
Tâche 2 : créer des stratégies
Accédez à la console OCI, accédez à Stratégies et créez des stratégies avec les informations suivantes.
-
Nom de stratégie : entrez
FunctionsPolicies
.Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
-
Nom de stratégie : entrez
ApiGatewayPolicies
.Allow dynamic-group MyApiGateway to use functions-family in compartment YOUR-COMPARTMENT-NAME
Tâche 3 : création d'un registre de conteneurs OCI
-
Accédez à la console OCI, accédez à Services de développeur, à Conteneurs et artefacts, sélectionnez Registre de conteneurs et cliquez sur Créer un référentiel afin de créer un référentiel privé pour l'image de fonction.
-
Nom du référentiel : entrez
functions/authorizationfunctionjava
.
-
-
Vérifiez les référentiels et notez l'espace de noms.
-
Ouvrez OCI Cloud Shell où l'interface de ligne de commande OCI et Docker doivent être installés, puis passez à la connexion dans le registre. Vérifiez l'URL correcte pour votre région. Dans ce tutoriel, nous utilisons Est du Brésil (Sao Paulo), où l'URL du registre est
gru.ocir.io
.docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Tâche 4 : création de fonctions OCI Java en tant que fonction d'autorisation
Remarque : veillez à sélectionner votre sous-réseau privé.
-
Accédez à la console OCI, accédez à Services de développeur, à Fonctions, à Applications et cliquez sur Créer une application.
-
Lancez OCI Cloud Shell dans lequel Docker, l'interface de ligne de commande OCI et l'interface de ligne de commande du projet Fn sont installés, puis exécutez les commandes suivantes pour initialiser la fonction.
Remarque : si vous avez suivi les tâches, la commande de connexion Docker aurait déjà été exécutée. Sinon, passez à l'étape de connexion Docker dans la tâche 3.
Accédez à la console OCI, sélectionnez les services de développeur, les fonctions, les applications, sélectionnez l'application et cliquez sur Pour commencer. Exécutez les commandes suivantes .
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
Remarque : dans ce tutoriel, nous utilisons la région Est du Brésil (Sao Paulo). Si vous utilisez une autre région, vous devez modifier l'emplacement du registre.
-
Téléchargez l'exemple de code de fonction Java à partir de cet emplacement : authorizationfunctionjava.tar, téléchargez-le vers OCI Cloud Shell, puis décompressez le fichier.
# check your file is there ls -lrt # create your directory mkdir authorizationfunctionjava # unzip the file tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava cd authorizationfunctionjava/
Ce code Java simple reçoit deux paramètres :
token
etcustomer
. Il extrait également un troisième paramètre à partir d'une variable d'environnement système définie dans la configuration de la fonction.Remarque : assurez-vous que les noms de paramètre dans la méthode handleRequest(entrée d'entrée) sont identiques aux noms utilisés dans la configuration de passerelle d'API. Cela garantit que la passerelle d'API transmet correctement les paramètres à la fonction d'autorisation.
Ce fragment de code valide l'entrée et renvoie une réponse spécifique.
Pour plus d'informations sur le format de réponse et les paramètres requis, reportez-vous à Création d'une fonction d'autorisation.
-
Exécutez la commande suivante pour créer le code et déployer la fonction.
cd authorizationfunctionjava/ ls -lart fn deploy --app chafikFunctions
-
Créez plusieurs configurations pour stocker vos informations d'identification client afin de tester la validation de la fonction.
Remarque : ces variables de configuration sont utilisées en tant que variables d'environnement système dans l'exemple de code Java fourni dans ce tutoriel. Toutefois, vous pouvez modifier le code de la fonction pour utiliser une autre approche, telle que Fn RuntimeContext. Pour plus d'informations, reportez-vous à Utilisation de Fn RuntimeContext avec Functions.
Nom/clé de clé secrète Value FN_AAA_KEY 123 456 FN_BBB_KEY 898 989 FN_ORACLE_KEY ABCD1234 -
Vous pouvez configurer ces paramètres via la console OCI en accédant à Services de développeur. Sous Fonctions, cliquez sur Applications, sélectionnez votre application, puis votre fonction. Sur la page de détails de la fonction, cliquez sur Configuration.
Ou
Exécutez les commandes
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
-
Exécutez la commande suivante pour appeler la fonction.
# Invoke the function to check if it's working as expected echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
Remarque : l'appel initial peut prendre jusqu'à une minute pour réchauffer la fonction. Vérifiez la configuration pour tous les paramètres supplémentaires. Pour plus d'informations, reportez-vous à Réduction de la latence initiale à l'aide de l'accès simultané provisionné.
Testez avec des données valides et non valides pour vérifier les réponses de la fonction.
Tâche 5 : création d'une passerelle d'API OCI et d'une API de simulation pour utiliser la fonction d'autorisation
Remarque : veillez à sélectionner votre sous-réseau public.
-
Accédez à la console OCI, accédez aux services de développeur, à la gestion des API, aux passerelles et cliquez sur Créer une passerelle.
-
Accédez à la page Détails de la passerelle et notez le nom d'hôte.
-
Créez un déploiement dans API Gateway. Dans Informations de base, entrez les informations suivantes.
- Préfixe de chemin : entrez
/authFunction
.
Remarque : le nom d'hôte et le préfixe de chemin de la passerelle d'API seront utilisés pour former l'adresse d'API.
- Préfixe de chemin : entrez
-
Dans Authentification, entrez les informations suivantes.
-
Sélectionnez Authentification unique.
-
Sélectionnez Fonction d'autorisation.
-
Application Oracle Functions : sélectionnez l'application créée dans la tâche 4.
-
Fonction Oracle : sélectionnez la fonction créée dans la tâche 4.
-
Sélectionnez Fonction d'autorisation à arguments multiples.
-
Arguments de fonction : entrez les informations suivantes.
Table de contexte Nom d'en-tête Nom d'argument request.headers client client request.headers token token
Remarque : le nom d'en-tête fait référence aux informations incluses dans l'en-tête de demande lors de l'appel de l'adresse d'API. Le nom de l'argument est le nom du paramètre envoyé à la fonction d'autorisation. Reportez-vous au code Java dans la tâche 4.3.
-
-
Dans Routes, créez une route unique pour un test de simulation avec les informations suivantes.
- Chemin : entrez
/mock
. - Méthodes : sélectionnez GET.
- Option de back-end : sélectionnez Modifier le back-end unique ajouté.
- Type de back-end : sélectionnez Réponse au stock.
- Chemin : entrez
-
Dans Routages, définissez la réponse simulée et cliquez sur Suivant.
- Code de statut : entrez 200.
- Corps : entrez {"mensagem" : "ok"}.
- Nom d'en-tête : sélectionnez Type de contenu.
- Valeur d'en-tête : sélectionnez application/json ; charset=UTF-8.
-
Dans Vérifier, vérifiez la configuration et cliquez sur Enregistrer les modifications pour terminer la création du déploiement.
-
Exécutez la commande
curl
pour tester votre 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
En cas d'appel avec des informations non valides, la réponse sera HTTP/1.1 401 Unauthorized.
Tâche 6 : utiliser OCI API Gateway pour extraire les paramètres et la portée des fonctions d'autorisation
Remarque Reportez-vous au code Java téléchargé dans la tâche 4. Cette tâche explique comment utiliser
result.context
etresult.scope
dans la passerelle d'API.
-
Extraire des valeurs de contexte à partir des fonctions d'autorisation.
Prenons un scénario dans lequel vous devez extraire des informations de la fonction d'autorisation et les utiliser dans la passerelle d'API. Par exemple, vous pouvez utiliser un jeton d'autorisation pour appeler un service back-end.
Remarque : dans cette démonstration en laboratoire, les informations sont renvoyées dans l'en-tête de réponse.
-
Accédez à la console OCI, accédez aux services de développeur, à la gestion des API, aux passerelles et sélectionnez votre passerelle. Cliquez sur Déploiements, sélectionnez le déploiement créé dans la tâche 5, puis cliquez sur Modifier.
-
Accédez à Routages et cliquez sur Afficher les stratégies de réponse de routage.
-
Dans Stratégies de réponse, sous Transformations d'en-tête, cliquez sur Ajouter pour continuer.
-
Sur la page Transformations d'en-tête de réponse, configurez la passerelle d'API comme indiqué dans l'image suivante et cliquez sur Appliquer les modifications.
Les deux paramètres du code Java seront inclus dans les en-têtes de réponse d'API.
- Nom d'en-tête : ce champ indique le nom de l'attribut d'en-tête dans la réponse d'API.
- Valeurs : ce champ indique le nom de l'attribut extrait de la fonction d'autorisation.
Utilisez le format suivant :
${request.auth[attributeNameFromAuthorizerFunction]} #examples ${request.auth[valor01]} ${request.auth[valor02]}
-
Vérifiez la configuration des réponses d'en-tête. Cliquez sur Suivant pour vérifier les modifications et cliquez sur Enregistrer les modifications pour les appliquer.
-
Testez l'API et examinez les en-têtes de réponse.
-
Précisons comment utiliser les valeurs de portée d'une fonction d'autorisation pour améliorer la sécurité.
Remarque : dans le contexte de l'autorisation, portée fait référence aux autorisations ou aux niveaux d'accès spécifiques accordés à un utilisateur ou à une application.
La fonction d'autorisation renvoie toutes les portées disponibles (dans notre exemple, elles sont codées en dur) pour cet appel d'API.
Pour certaines routages dans le déploiement d'API Gateway, vous pouvez autoriser uniquement des portées spécifiques afin d'améliorer la sécurité.
Accédez à la console OCI, accédez aux services de développeur, à la gestion des API, aux passerelles et sélectionnez votre passerelle. Cliquez sur Déploiements, sélectionnez le déploiement créé dans la tâche 5, puis cliquez sur Modifier.
-
Accédez à Routages et cliquez sur Afficher les stratégies de demande de routage.
-
Dans Stratégies de demande, sous Autorisation, cliquez sur Modifier.
-
Dans Stratégie d'autorisation, sélectionnez Tout comme type d'autorisation, ajoutez toutes les portée autorisée renvoyées par la fonction d'autorisation, puis cliquez sur Appliquer les modifications.
-
Dans Vérifier, vérifiez vos modifications, cliquez sur Suivant, puis sur Enregistrer les modifications pour appliquer vos modifications.
-
Testez l'API et vérifiez qu'elle fonctionne. Les portées sont renvoyées par la fonction d'autorisation.
-
Modifiez la passerelle d'API pour utiliser une portée non renvoyée par la fonction d'autorisation.
Vérifiez vos modifications, cliquez sur Suivant, puis sur Enregistrer les modifications pour appliquer vos modifications.
-
Testez l'API et vérifiez le résultat.
La réponse sera un statut HTTP 404 Introuvable.
Vérifiez que les fonctions d'autorisation fonctionnent correctement, car les deux en-têtes sont renvoyés. Cependant, le back-end de routage échoue en raison de la validation de l'autorisation de portée dans les stratégies de demande.
Liens connexes
Remerciements
-
Auteur - Rodrigo Chafik Choueiri (Ingénieur solutions Oracle LAD A-Team)
-
Contributeurs - Joao Tarla (Ingénieur solutions Oracle LAD A-Team), Sillas Lima (architecte de solutions Oracle LAD)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation produit, consultez le site Oracle Help Center.
Customize your API Security using OCI API Gateway and OCI Functions
G25981-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.