Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Personaliza tu seguridad de API con OCI API Gateway y OCI Functions
Introducción
Descubra la sinergia perfecta entre Oracle Cloud Infrastructure (OCI) Functions y OCI API Gateway para implantar un método de autenticación personalizado para sus API y cómo las funciones pueden recuperar argumentos del gateway de API.
Gateway de API de OCI
El servicio de gateway de API de OCI le permite publicar API con puntos finales privados accesibles desde la red y que se pueden exponer con direcciones IP públicas si desea que acepten tráfico de Internet. Los puntos finales admiten la validación de API, la transformación de solicitud y respuesta, CORS, la autenticación y autorización, y la limitación de solicitudes.
Con el servicio de gateway de API de OCI, se crean uno o varios gateways de API en una subred regional para procesar el tráfico de clientes de API y direccionarlo a servicios de backend. Puede utilizar un único gateway de API para enlazar varios servicios de backend (como OCI Load Balancer, instancias de OCI Compute y OCI Functions) en un único punto final de API consolidado.
Funciones de OCI
OCI Functions es una plataforma de funciones como servicio totalmente gestionada, multiinquilino, altamente escalable y bajo demanda. Se basa en OCI de nivel empresarial y en el motor de código abierto Fn Project. Utilice OCI Functions cuando desee centrarse en la escritura de código para satisfacer las necesidades empresariales.
Nota:
Este tutorial está diseñado exclusivamente para fines educativos y de estudio. Proporciona un entorno para que los estudiantes experimenten y obtengan experiencia práctica en un entorno controlado. Es crucial tener en cuenta que las configuraciones y prácticas de seguridad empleadas en este laboratorio podrían no ser adecuadas para escenarios reales.
Las consideraciones de seguridad para las aplicaciones reales a menudo son mucho más complejas y dinámicas. Por lo tanto, antes de implementar cualquiera de las técnicas o configuraciones demostradas aquí en un entorno de producción, es esencial realizar una evaluación y revisión exhaustivas de la seguridad. Esta revisión debe abarcar todos los aspectos de la seguridad, incluido el control de acceso, el cifrado, la supervisión y el cumplimiento, para garantizar que el sistema se alinee con las políticas y estándares de seguridad de la organización.
La seguridad siempre debe ser una prioridad al pasar de un entorno de prácticas a un despliegue real.
Objetivo
- Cree un gateway de API con una respuesta ficticia mediante OCI Functions como funciones de autorizador para implantar una validación de seguridad personalizada y devolver parámetros específicos al gateway de API.
Requisitos
-
Cuenta de Oracle con permisos de administrador.
-
Cree un token de autenticación en el usuario. Para obtener más información, consulte Generación de un token de autenticación para activar la conexión a Oracle Cloud Infrastructure Registry.
-
Compartimento para crear los recursos.
Nota: Anote el nombre de compartimento y el ID de compartimento.
-
VCN con una subred privada y pública. Para obtener más información, consulte Creación de una red virtual en la nube.
-
Aplicación de función desplegada en la subred privada de su VCN. Para obtener más información, consulte las guías sobre las funciones QuickStart.
-
Gateway de API creado en la subred pública de su VCN. Para obtener más información, consulte la Guía QuickStart de gateway de API.
-
Utilizaremos un backend ficticio, conocido en el gateway de API como respuesta de stock. Para obtener más información, consulte Adding Stock Responses as a API Gateway Back End.
-
Acceda a OCI Cloud Shell mediante el explorador. Para obtener más información, consulte OCI Cloud Shell.
-
Configure la lista de seguridad para permitir el acceso entre subredes privadas y públicas.
Tarea 1: Configuración de grupos dinámicos
Conéctese a la consola de OCI, navegue al dominio, haga clic en Grupos dinámicos y cree grupos con la siguiente información.
-
Nombre de grupo: introduzca
MyFunctions
.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
-
Nombre de grupo: introduzca
MyApiGateway
.ALL {resource.type = 'ApiGateway', resource.compartment.id = 'pasteYourCompartmentOCID'}
Tarea 2: Crear políticas
Vaya a la consola de OCI, vaya a Políticas y cree políticas con la siguiente información.
-
Nombre de política: introduzca
FunctionsPolicies
.Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
-
Nombre de política: introduzca
ApiGatewayPolicies
.Allow dynamic-group MyApiGateway to use functions-family in compartment YOUR-COMPARTMENT-NAME
Tarea 3: Creación de OCI Container Registry
-
Vaya a la consola de OCI, vaya a Developer Services, Containers & Artifacts, seleccione Container Registry y haga clic en Create repository para crear un repositorio privado para la imagen de función.
-
Nombre del repositorio: introduzca
functions/authorizationfunctionjava
.
-
-
Compruebe los repositorios y anote el espacio de nombres.
-
Abra OCI Cloud Shell donde debe tener instaladas la CLI y Docker de OCI y continúe con el inicio de sesión en el registro. Compruebe cuál es la URL correcta para su región. En este tutorial, estamos utilizando Este de Brasil (São Paulo), donde la URL del registro es
gru.ocir.io
.docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Tarea 4: Creación de funciones de Java OCI como función de autorizador
Nota: Asegúrese de seleccionar la subred privada.
-
Vaya a la consola de OCI, vaya a Developer Services, Functions, Applications y haga clic en Create application.
-
Inicie OCI Cloud Shell donde haya instalado Docker, la CLI de OCI y la CLI de Fn Project y ejecute los siguientes comandos para inicializar la función.
Nota: Si ha seguido las tareas, el comando de conexión de Docker ya debería haberse ejecutado. Si no es así, continúe con el paso de conexión de Docker en la tarea 3.
Vaya a la consola de OCI, vaya a Developer Services, Functions, Applications, seleccione la aplicación y haga clic en Getting Started. Ejecute los siguientes comandos.
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: En este tutorial, estamos utilizando la región Este de Brasil (São Paulo). Si está utilizando una región diferente, debe cambiar la ubicación del registro.
-
Descargue el código de ejemplo de la función Java desde aquí: authorizationfunctionjava.tar y cárguelo en OCI Cloud Shell y, a continuación, descomprima el archivo.
# check your file is there ls -lrt # create your directory mkdir authorizationfunctionjava # unzip the file tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava cd authorizationfunctionjava/
Este código Java simple recibe dos parámetros
token
ycustomer
. También recupera un tercer parámetro de una variable de entorno del sistema definida en la configuración de la función.Nota: Asegúrese de que los nombres de parámetros en el método handleRequest(entrada de entrada) sean los mismos que los nombres utilizados en la configuración del gateway de API. Esto garantiza que el gateway de API transfiera correctamente los parámetros a la función de autorizador.
Este fragmento de código valida la entrada y devuelve una respuesta específica.
Para obtener más información sobre el formato y los parámetros de respuesta necesarios, consulte Creación de una función de responsable de autorización.
-
Ejecute el siguiente comando para crear el código y desplegar la función.
cd authorizationfunctionjava/ ls -lart fn deploy --app chafikFunctions
-
Cree varias configuraciones para almacenar las credenciales del cliente para probar la validación de la función.
Nota: Estas variables de configuración se utilizan como variables de entorno del sistema en el código de ejemplo de Java proporcionado en este tutorial. Sin embargo, puede modificar el código de función para utilizar un enfoque alternativo, como Fn RuntimeContext. Para obtener más información, consulte Uso de Fn RuntimeContext con Functions.
Nombre/clave de secreto Valor FN_AAA_KEY 123.456 FN_BBB_KEY 898.989 FN_ORACLE_KEY ABCD1234 -
Puede configurar estos valores a través de la consola de OCI navegando a Developer Services. En Funciones, haga clic en Aplicaciones, seleccione la aplicación y, a continuación, seleccione la función. En la página de detalles de la función, haga clic en Configuración.
O bien:
Ejecute los comandos
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
-
Ejecute el siguiente comando para llamar a la función.
# Invoke the function to check if it's working as expected echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
Nota: La llamada inicial puede tardar hasta un minuto en calentar la función. Revise la configuración para cualquier configuración adicional. Para obtener más información, consulte Reducción de la latencia inicial mediante la simultaneidad aprovisionada.
Pruebe con datos válidos y no válidos para verificar las respuestas de la función.
Tarea 5: Creación de OCI API Gateway y una API ficticia para utilizar la función de autorizador
Nota: Asegúrese de seleccionar la subred pública.
-
Vaya a la consola de OCI, vaya a Developer Services, API Management, Gateways y haga clic en Create Gateway.
-
Vaya a la página Detalles de gateway y anote Nombre de host.
-
Cree un despliegue en el gateway de API. En Información básica, introduzca la siguiente información.
- Prefijo de ruta de acceso: introduzca
/authFunction
.
Nota: Nombre de host y Prefijo de ruta de acceso del gateway de API se utilizarán para formar el punto final de API.
- Prefijo de ruta de acceso: introduzca
-
En Autenticación, introduzca la siguiente información.
-
Seleccione Autenticación única.
-
Seleccione Función de Autorizador.
-
Aplicación de Oracle Functions: seleccione la aplicación creada en la tarea 4.
-
Función de Oracle: seleccione la función creada en la tarea 4.
-
Seleccione Función de autorizador de varios argumentos.
-
Argumentos de función: introduzca la siguiente información.
Tabla de contextos Nombre de Cabecera Nombre del Argumento request.headers cliente cliente request.headers token token
Nota El nombre de cabecera hace referencia a la información incluida en la cabecera de solicitud al llamar al punto final de API. El nombre de argumento es el nombre de parámetro que se envía a la función de autorizador. Consulte el código Java en la tarea 4.3.
-
-
En Rutas, cree una única ruta para una prueba ficticia con la siguiente información.
- Ruta: introduzca
/mock
. - Métodos: seleccione GET.
- Opción de backend: seleccione Edit added single backend.
- Tipo de backend: seleccione Respuesta de stock.
- Ruta: introduzca
-
En Rutas, defina la respuesta ficticia y haga clic en Siguiente.
- Código de estado: introduzca 200.
- Cuerpo: introduzca {"mensagem" : "ok"}.
- Nombre de cabecera: seleccione Tipo de contenido.
- Valor de cabecera: seleccione application/json; charset=UTF-8.
-
En Revisar, verifique la configuración y haga clic en Guardar cambios para completar la creación del despliegue.
-
Ejecute el comando
curl
para probar la 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
Si se invoca con información no válida, la respuesta será HTTP/1.1 401 Unauthorized.
Tarea 6: Uso de OCI API Gateway para recuperar parámetros y ámbito de las funciones de autorizador
Nota Consulte el código Java descargado en la tarea 4. En esta tarea se explica cómo trabajar con
result.context
yresult.scope
en el gateway de API.
-
Recupere valores de contexto de las funciones de autorizador.
Considere un escenario en el que necesite recuperar información de la función de autorizador y utilizarla dentro del gateway de API. Por ejemplo, puede que desee utilizar un token de autorización para llamar a un servicio de backend.
Nota: En esta demostración de laboratorio, la información se devuelve en la cabecera de respuesta.
-
Vaya a la consola de OCI, vaya a Developer Services, API Management, Gateways y seleccione el gateway. Haga clic en Despliegues, seleccione el despliegue creado en la tarea 5 y haga clic en Editar.
-
Vaya a Rutas y haga clic en Mostrar políticas de respuesta de ruta.
-
En Políticas de respuesta, en Transformaciones de cabecera, haga clic en Agregar para continuar.
-
En la página Transformaciones de cabecera de respuesta, configure el gateway de API como se muestra en la siguiente imagen y haga clic en Aplicar cambios.
Ambos parámetros del código Java se incluirán en las cabeceras de respuesta de API.
- Nombre de cabecera: este campo especifica el nombre del atributo de cabecera en la respuesta de API.
- Valores: Este campo especifica el nombre del atributo recuperado de la función de autorizador.
Utilice el siguiente formato:
${request.auth[attributeNameFromAuthorizerFunction]} #examples ${request.auth[valor01]} ${request.auth[valor02]}
-
Revise la configuración de respuesta de cabecera. Haga clic en Siguiente para revisar los cambios y haga clic en Guardar cambios para aplicarlos.
-
Pruebe la API y examine las cabeceras de respuesta.
-
Vamos a aclarar cómo utilizar los valores de ámbito de una función de autorizador para mejorar la seguridad.
Nota: En el contexto de la autorización, el ámbito hace referencia a los permisos o niveles de acceso específicos otorgados a un usuario o aplicación.
La función de autorizador devuelve todos los ámbitos disponibles (en nuestro ejemplo, esto está codificado) para esta llamada de API.
En el caso de algunas rutas del despliegue de gateway de API, puede que desee permitir que solo ámbitos específicos mejoren la seguridad.
Vaya a la consola de OCI, vaya a Developer Services, API Management, Gateways y seleccione el gateway. Haga clic en Despliegues, seleccione el despliegue creado en la tarea 5 y haga clic en Editar.
-
Vaya a Rutas y haga clic en Mostrar políticas de solicitud de ruta.
-
En Políticas de solicitud, en Autorización, haga clic en Editar.
-
En Política de autorización, seleccione Cualquiera como Tipo de autorización, agregue todos los Ámbito permitido devueltos por la función de autorizador y haga clic en Aplicar cambios.
-
En Revisar, revise los cambios, haga clic en Siguiente y, a continuación, haga clic en Guardar cambios para aplicar las modificaciones.
-
Pruebe la API y verifique que funciona. La función de autorizador devuelve los ámbitos.
-
Cambie el gateway de API para utilizar un ámbito no devuelto por la función de autorizador.
Revise los cambios, haga clic en Siguiente y, a continuación, en Guardar cambios para aplicar las modificaciones.
-
Pruebe la API y verifique el resultado.
La respuesta será un estado http 404 Not Found.
Compruebe que las funciones de autorizador funcionan correctamente, ya que se devuelven ambas cabeceras. Sin embargo, el backend de ruta falla debido a la validación de autorización de ámbito en las políticas de solicitud.
Enlaces relacionados
Agradecimientos
-
Autor: Rodrigo Chafik Choueiri (ingeniero de soluciones de Oracle LAD A-Team)
-
Contribuyentes: Joao Tarla (ingeniero de soluciones de Oracle LAD A-Team), Sillas Lima (arquitecto de soluciones de Oracle LAD)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Customize your API Security using OCI API Gateway and OCI Functions
G25979-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.