Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en 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 el laboratorio, sustituya estos valores por otros específicos del entorno en la nube.
Activar la autenticación OAuth2 en OCI API Gateway para llamar a servicios de OCI mediante OCI Functions y OCI SDK
Introducción
A menudo necesitamos que nuestras aplicaciones consuman servicios REST de Oracle Cloud Infrastructure (OCI). Hay varias formas de garantizar la seguridad entre los componentes, lo que garantiza que la aplicación se pueda autenticar de forma segura en el servicio de backend.
Esta tarea es nativa de Oracle Cloud, ya que hay varias formas de proteger la red y acceder a los servicios existentes. Solo unos pocos ajustes y ya está. Sin embargo, hay casos en los que la aplicación puede ofrecer requisitos de seguridad y conectividad adicionales. El caso de uso de este material satisface una necesidad muy común en el escenario híbrido o multinube (local conectado a Oracle Cloud u Oracle Cloud conectado a otra nube).
Vamos a presentar el siguiente escenario:
-
Aplicación en una red local conectada a Oracle Cloud a través de Fast-Connect/VPN.
-
La aplicación necesita consumir un servicio de OCI Data Science.
-
El servicio OCI no tiene un mecanismo de autenticación que cumpla las posibilidades del consumidor de aplicaciones.
-
La aplicación debe autenticarse mediante OAuth2 para poder acceder al servicio de forma segura.
Por lo tanto, el tutorial proporciona las siguientes soluciones:
-
Configure el proveedor de identidad propio de la nube de Oracle Identity Cloud Service para autenticarse mediante OAuth2.
-
Configure OCI API Gateway para integrarlo con Oracle Identity Cloud Service y autenticarlo mediante un token obtenido.
-
Codifique una función de OCI para llamar a un servicio de OCI que permita el uso de la entidad de recurso (en nuestro ejemplo, utilizaremos el servicio Data Science Model Deployment).
-
Cree grupos y políticas para limitar el acceso a los recursos en la nube.
-
Proporcione un proveedor de identidad que le permita transferir el ID de cliente y el ID secreto y obtener un token de autenticación.
-
Proporcione un servicio REST de gateway de API de OCI funcional que se autentique mediante el token obtenido y proporcione el resultado del servicio Data Science.
Nota: puede descargar OCI Functions desde aquí OAuthOCIService-fn.zip.
Objetivos
-
Permita que una aplicación externa consuma servicios REST con autenticación OAuth2.
-
Proporcione un servicio de autenticación OAuth2 en OCI.
-
Configure OCI API Gateway y OCI Functions para ejecutar servicios de OCI a través de un token.
Requisitos
-
Una instancia de OCI API Gateway creada y expuesta a Internet, consulte Creación de su primer gateway de API en Oracle Cloud.
-
Conectividad de red entre OCI API Gateway, OCI Functions y el recurso PaaS de OCI.
-
VCN/subredes
-
Lista de seguridad
-
Gateway de NAT o gateway de Internet
-
Redes públicas/privadas
-
-
Conocimiento con:
-
OCI Functions
-
API de REST de OCI para codificar una llamada para el servicio OCI
-
Tarea 1: Configurar OAuth2 con Oracle Identity Cloud Service
-
Obtenga los parámetros de OCI API Gateway: comencemos a configurar el mecanismo OAuth2. Necesitamos integrar su instancia de OCI API Gateway en un proveedor de identidad configurando Oracle Identity Cloud Service desde Oracle Cloud para que sea el proveedor de identidad.
Vaya a la instancia de OCI API Gateway y copie el nombre de host. Esta información se utilizará en la configuración del servidor de recursos de Oracle Identity Cloud Service en el siguiente paso.
-
Crear una aplicación de recurso: necesitamos crear un autorizador OAuth2 para la aplicación. Podemos hacerlo con Oracle Identity Cloud Service en Oracle Cloud.
-
En la consola de OCI, vaya a Identidad y seguridad y seleccione Federación.
-
Haga clic en OracleIdentityCloudSevice.
-
Haga clic en el enlace de su instancia de Oracle Identity Cloud Service.
-
Crearemos dos aplicaciones. Haga clic en Aplicaciones y Servicios.
-
En las aplicaciones, haga clic en Agregar.
-
Seleccione Aplicación Confidencial para empezar a configurar el servidor de recursos.
-
Configuraremos la primera aplicación. Introduzca un nombre en la aplicación del servidor de recursos y haga clic en Siguiente.
-
Haga clic en Omitir para más tarde. Solo necesitamos configurar el recurso.
-
Introduzca el nombre de host de OCI API Gateway obtenido en el paso 1.
-
Haga clic en Agregar Ámbito e introduzca la información del ámbito.
-
Revise la información de ámbito, haga clic en Siguiente dos veces y haga clic en Terminar.
-
Haga clic en Activar para activar la aplicación.
-
-
Cree una aplicación cliente.
-
En Aplicaciones, haga clic en Agregar.
-
Seleccione Aplicación Confidencial para empezar a configurar el servidor de recursos.
-
Introduzca un nombre para la aplicación y haga clic en Siguiente.
-
Seleccione Configurar la aplicación como un cliente ahora para activar las configuraciones de la aplicación cliente. Seleccione Credenciales de cliente, Afirmación de JWT y En nombre de.
-
Haga clic en Add Scope (Agregar ámbito).
-
Busque la aplicación de recursos creada antes (
oauth_resource_server
en esta tarea) y haga clic en Agregar. -
Puede ver el ámbito agregado a la aplicación. Haga clic en Siguiente.
Nota: Mantenga el valor de ámbito que deberá utilizar para solicitar un token.
-
Omita la ventana Recursos y la ventana Política de capa web. En Autorización, seleccione Aplicar permisos como autorización y haga clic en Terminar.
-
Mantenga la información del ID de cliente y el secreto de cliente. Necesitará esto para obtener su token.
-
Haga clic en Activar para activar la aplicación y el autorizador OAuth2 esté listo para la prueba.
-
-
Obtener un token: ahora podemos probar el autorizador OAuth2 para obtener el token.
-
Redacte la URL para el autorizador. Para ello, obtenga la URL de Oracle Identity Cloud Service en el explorador. En la URL de Oracle Identity Cloud Service, puede ver algo como esto:
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
. -
Necesitará el enlace URL hasta
oraclecloud.com
, que es el punto final raíz. Por ejemplo,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
Necesitamos agregar la ruta de autenticación oAuth. Esta URL se ejecutará como una solicitud REST
POST
. Por ejemplo,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
. Deberá introducir algunos parámetros para solicitar el token. -
Introduzca las credenciales como Autenticación básica, ID de cliente y Secreto de cliente.
-
En el contenido Cuerpo, introduzca los valores grant_type y Ámbito. Recuerde que el ámbito se capturó en la configuración de Oracle Identity Cloud Service.
-
Haga clic en Enviar, ejecute la solicitud
POST
y vea el token.
-
-
Crear la clave web JSON (JWK): en el explorador, introduzca el punto final raíz de Oracle Identity Cloud Service agregando
/admin/v1/SigningCert/jwk
para obtener el JWK:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/admin/v1/SigningCert/jwk
Recibirá una cadena JWK como se muestra a continuación.
Necesitamos trabajar en esta cadena JWK.
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"key_ops":["sig","encrypt"],"alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
Nota:
-
Este JWK fue redactado.
-
Si recibe un mensaje de error, debe proporcionar acceso en Oracle Identity Cloud Service.
Cambio importante en la cadena JWK: la cadena JWK no será útil en el gateway de API de OCI hasta que realice algunos cambios.
-
Busque el segmento con "key_ops":["x","y","z"] y sustitúyalo por "use" : "sig". Se verá como se muestra a continuación (compare las dos cadenas).
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
-
Elimine la cadena
{"keys":[
del principio y]}
del final. La cadena final se verá como se muestra a continuación. Ahora puedes usarlo.{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}
-
Tarea 2: Configuración de OCI Functions para llamar a la API de SDK de OCI
-
Descripción de OCI Functions y API Gateway: se recomienda exponer los servicios a través de un gateway de API. Se pueden realizar muchas autenticaciones omitiendo las credenciales del gateway de API a los servicios de backend, pero si la autenticación de backend no era el método adecuado para la aplicación cliente, podemos realizar algunas configuraciones a nivel de gateway de API.
En este paso, veamos cómo OCI API Gateway puede ayudarnos a integrar la autenticación OAuth2 y la solicitud de cualquier servicio de OCI, como la predicción Data Science Model Deployment a través de OCI Functions.
OCI Functions puede realizar el trabajo para recibir la solicitud de cuerpo y transferirla al servicio OCI. Algunos servicios del servicio OCI no se pueden autenticar mediante el método OAuth2, por lo que podemos hacerlo con OCI Functions.
En este ejemplo, el servicio de predicción Despliegue de modelo puede autenticarse mediante la clave privada de OCI en OCI IAM. La puede realizar la principal de recurso.
Si no sabe cómo crear y desplegar OCI Functions, consulte Inicio rápido de OCI Functions
-
Descripción del código: este código estará preparado para su uso con OCI API Gateway. En su despliegue de API, configuraremos el punto final de despliegue de modelo en API Gateway y se transferirá como parámetro HEADER. Por lo tanto, puede utilizar esta función para muchos despliegues de modelo en cada despliegue de API Gateway que necesite.
-
Utilizaremos la biblioteca
oracle.ads
en Python para autorizar mediante la principal de recurso el acceso de esta función a la instancia de despliegue de modelo (consulte la tarea 4).ads.set_auth('resource_principal')
-
Esta línea puede capturar el contenido del cuerpo.
body = json.loads(data.getvalue())
-
Configuraremos un HEADER denominado model_deployment en el gateway de API de OCI. Este HEADER contiene la URL para la predicción de despliegue de modelo transferida en la solicitud de gateway de API.
endpoint = ctx.Headers()["model_deployment"]
-
Esto ejecutará la solicitud POST de la API de REST y devolverá el resultado del despliegue de modelo en el punto final de Data Science.
return requests.post(endpoint, json=body, auth=ads.common.auth.default_signer()['signer']).json()
-
Esta es la biblioteca
requirements.txt
que se tendrá que cargar en esta función.requirements.txt --------------------- fdk>=0.1.54 requests oracle-ads
Despliegue sus funciones de OCI y configúrelo en el gateway de API de OCI.
-
Tarea 3: Configuración de una autenticación de despliegue de API Gateway
Nota: Para obtener más información sobre cómo desarrollar OCI Functions y llamarla en OCI API Gateway, consulte Llamada a OCI Functions mediante API Gateway.
-
Seleccione OAuth 2.0 / OpenID Connect e introduzca la siguiente configuración. Esta es la forma predeterminada de autenticarse a través de HEADER.
Token Location: Header JWT token header name: Authorization Authentication scheme: Bearer
-
Introduzca la cadena de clave web JSON creada anteriormente, seleccione Claves estáticas e introduzca la siguiente información.
Key ID: SIGNING_KEY Key format: JSON web key JSON web key: <Your JWK string created previously>
-
Introduzca los emisores como
https://identity.oraclecloud.com/
y los públicos con el nombre de host de gateway de API de OCI obtenido anteriormente.Configure las funciones de OCI creadas en la última tarea.
-
Configure el parámetro HEADER
model_deployment
y haga clic en Mostrar políticas de solicitud de ruta. -
En Transformaciones HEADER, haga clic en Agregar.
-
Debe tener la URL de predicción de despliegue de modelo de Data Science. Puede obtener esta información aquí: vaya al menú Data Science, seleccione la instancia de Data Science y el despliegue del modelo y haga clic en Llamando al modelo.
Nota: Guarde el OCID de despliegue de modelo aquí. Tendrá que configurar las políticas más adelante.
URL de predicción de despliegue de modelos de Data Science.
-
Introduzca el nombre de cabecera como model_deployment y los valores como URL de predicción de despliegue de modelo de Data Science.
Nota: Después de guardar el despliegue de API Gateway, recuerde el punto final de despliegue de API.
Tarea 4: Configuración del grupo y las políticas de OCI
Cree un grupo dinámico para otorgar acceso desde OCI Functions al recurso de OCI. En este tutorial, estamos utilizando el despliegue del modelo de Data Science. Para obtener más información sobre cómo utilizar la entidad de recurso, consulte Principal de recurso.
-
Obtenga el OCID de la instancia de Despliegue de modelo. Introduzca el OCID en la cadena de grupo dinámico.
ALL {resource.type = 'fnfunc', resource.id = 'ocid1.datasciencemodeldeployment.oc1.sa-saopaulo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
Nota:
resource.id
es el OCID obtenido anteriormente en la pantalla de la consola Despliegue de modelo. -
Cree una política para permitir el grupo dinámico. Para obtener más información, consulte Políticas de despliegue de modelo.
allow dynamic-group hoshikawa_datascience to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in tenancy allow dynamic-group hoshikawa_datascience to manage data-science-model-deployments in tenancy
Tarea 5: API de prueba
Ahora, simulemos la solicitud OAuth2 de la aplicación para el servicio Model Deployment en OCI Data Science.
-
Obtenga el token que transfiere el ID de cliente y el Secreto de cliente al proveedor de Oracle Identity Cloud Service.
-
Introduzca el punto final de despliegue de OCI API Gateway y seleccione la solicitud REST
POST
. Copie el valor access_token y transfiera al despliegue de OCI API Gateway. Recuerde que el token tiene una duración de una hora.¡Y aquí está el resultado!
Enlaces relacionados
Agradecimientos
- Autor: Cristiano Hoshikawa (ingeniero de soluciones de equipo A de Oracle LAD)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Enable OAuth2 Authentication in OCI API Gateway to Call OCI Services using OCI Functions and OCI SDK
F90853-01
December 2023
Copyright © 2023, Oracle and/or its affiliates.