Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Ativar a Autenticação OAuth2 no Gateway de API do OCI para Chamar Serviços do OCI usando o OCI Functions e o OCI SDK
Introdução
Muitas vezes, precisamos de nossos aplicativos para consumir serviços REST da Oracle Cloud Infrastructure (OCI). Há várias maneiras de garantir a segurança entre os componentes, garantindo que o aplicativo possa ser autenticado com segurança no serviço de backend.
Essa tarefa é nativa no Oracle Cloud, pois há várias maneiras de proteger a rede e o acesso aos serviços existentes. Apenas algumas configurações e você está pronto. No entanto, há casos em que o aplicativo pode oferecer requisitos adicionais de segurança e conectividade. O caso de uso desse material atende a uma necessidade muito comum no cenário híbrido ou de várias nuvens (local conectado à Oracle Cloud ou Oracle Cloud conectado a outra nuvem).
Vamos apresentar o seguinte cenário:
-
Aplicativo em uma rede local conectada à Oracle Cloud por meio de Fast-Connect/VPN.
-
O aplicativo precisa consumir um serviço OCI Data Science.
-
O serviço OCI não tem um mecanismo de autenticação que atenda às possibilidades do consumidor de aplicativos.
-
O aplicativo precisa ser autenticado usando OAuth2 para poder acessar o serviço com segurança.
Portanto, o tutorial fornece as seguintes soluções:
-
Configure o próprio provedor de identidades da nuvem do Oracle Identity Cloud Service para autenticação por meio de OAuth2.
-
Configure o OCI API Gateway para integração com o Oracle Identity Cloud Service para autenticação por meio de um token obtido.
-
Codifique um OCI Functions para chamar um serviço OCI que permita o uso do controlador de recursos (em nosso exemplo, usaremos o serviço Data Science Model Deployment).
-
Crie grupos e políticas para limitar o acesso aos recursos da nuvem.
-
Entregue um provedor de identidades que permita informar o ID do cliente e o ID do segredo e obter um token de autenticação.
-
Entregue um serviço REST funcional do OCI API Gateway que se autentica por meio do token obtido e fornece o resultado do serviço Data Science.
Observação: você pode fazer download do OCI Functions aqui OAuthOCIService-fn.zip.
Objetivos
-
Permita que um aplicativo externo consuma serviços REST com autenticação OAuth2.
-
Forneça um serviço de autenticação OAuth2 no OCI.
-
Configure o OCI API Gateway e o OCI Functions para executar serviços do OCI por meio de um token.
Pré-requisitos
-
Uma instância do Gateway de API do OCI criada e exposta à internet. Consulte Criando Seu Primeiro Gateway de API no Oracle Cloud.
-
Conectividade de rede entre o Gateway de API do OCI, o OCI Functions e o recurso PaaS do OCI.
-
VCN/Subnets
-
Lista de segurança
-
Gateway NAT/Gateway de Internet
-
Redes Públicas/Privadas
-
-
Conhecimento com:
-
OCI Functions
-
API REST do OCI para codificar uma chamada para o serviço do OCI
-
Tarefa 1: Configurar OAuth2 com o Oracle Identity Cloud Service
-
Obter os parâmetros do Gateway de API do OCI: Vamos começar a configurar o mecanismo OAuth2. Precisamos integrar sua instância do OCI API Gateway a um provedor de identidades configurando o Oracle Identity Cloud Service do Oracle Cloud para ser o provedor de identidades.
Vá para a instância do Gateway de API do OCI e copie o Nome do Host. Essas informações serão usadas na configuração do servidor de recursos do Oracle Identity Cloud Service na próxima etapa.
-
Criar um Aplicativo de Recurso: Precisamos criar um autorizador OAuth2 para seu aplicativo. Podemos fazer isso com o Oracle Identity Cloud Service no Oracle Cloud.
-
Na Console do OCI, vá para Identidade e Segurança e selecione Federação.
-
Clique em OracleIdentityCloudSevice.
-
Clique no link da instância do Oracle Identity Cloud Service.
-
Vamos criar dois aplicativos. Clique em Aplicativos e Serviços.
-
Nos Aplicativos, clique em Adicionar.
-
Selecione Aplicativo Confidencial para começar a configurar seu servidor de recursos.
-
Vamos configurar o primeiro aplicativo. Informe um Nome no aplicativo do servidor de recursos e clique em Próximo.
-
Clique em Ignorar para mais tarde. Precisamos configurar apenas o recurso.
-
Informe o nome do host do Gateway de API do OCI obtido na Etapa 1.
-
Clique em Adicionar Escopo e especifique as informações do escopo.
-
Revise as informações do escopo, clique em Próximo duas vezes e clique em Finalizar.
-
Clique em Ativar para ativar seu aplicativo.
-
-
Criar um Aplicativo Cliente.
-
Em Aplicativos, clique em Adicionar.
-
Selecione Aplicativo Confidencial para começar a configurar seu servidor de recursos.
-
Informe um Nome para seu aplicativo e clique em Próximo.
-
Selecione Configurar o aplicativo como cliente agora para ativar as configurações do seu aplicativo cliente. Selecione Credenciais do Cliente, Asserção JWT e Em nome de.
-
Role para baixo na tela e clique em Adicionar Escopo.
-
Localize seu aplicativo de recursos criado antes (
oauth_resource_server
nesta tarefa) e clique em Adicionar. -
Você pode ver seu escopo adicionado ao seu aplicativo. Clique em Próximo.
Observação: mantenha o valor do escopo. Você precisará usá-lo para solicitar um token.
-
Ignore a janela Recursos e a janela Política da Camada Web. Em Autorização, selecione Impor Concessões como Autorização e clique em Finalizar.
-
Mantenha as informações do ID do Cliente e do Segredo do Cliente. Você precisará disso para obter seu token.
-
Clique em Ativar para ativar seu aplicativo e seu autorizador OAuth2 está pronto para teste.
-
-
Obter um Token: Agora podemos testar o autorizador OAuth2 para obter o token.
-
Crie o URL do autorizador. Você pode obter isso obtendo seu URL do Oracle Identity Cloud Service no browser. No URL do Oracle Identity Cloud Service, você pode ver algo assim:
https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole
. -
Você precisará do link do URL até
oraclecloud.com
, que é o ponto final raiz. Por exemplo,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
Precisamos adicionar o caminho de autenticação oAuth. Esse URL será executado como uma solicitação REST
POST
. Por exemplo,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
. Você precisará informar alguns parâmetros para solicitar o token. -
Digite as credenciais como uma Autenticação Básica, um ID do Cliente e um Segredo do Cliente.
-
No conteúdo Corpo, digite os valores grant_type e escopo. Lembre-se de que o escopo foi capturado na configuração do Oracle Identity Cloud Service.
-
Clique em Enviar, execute a solicitação
POST
e exiba o token.
-
-
Criar a Chave Web JSON (JWK): Em seu browser, digite o ponto final raiz do Oracle Identity Cloud Service adicionando
/admin/v1/SigningCert/jwk
para obter o JWK:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/admin/v1/SigningCert/jwk
Você receberá uma string JWK, conforme mostrado abaixo.
Precisamos trabalhar nessa string JWK.
{"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["MIIDYTCCAkmgAwIBAgIGAXRBgoJkiaJk/IsZAEZFgNjb20xFjAUBgoJkiaJk/IsZAEZFgZvcmFjbGUxFTATBgoJkiaJk/IsZAEZFgVjEtMjAeFw0yMDA0MTcxMDU3NTRaFw0zMDA0MTcxMDU3NTRaMFYxEzARBgNVBAMTCnNzbERvbWFpbnMxDzGA1UEAxMlaWRjcy00ZmI0N2I5MTYxMzA0YjFkYTI2ZjZlZDE2MTlhNGUwOTCCASIwDQYJKoZIhvcNAQJIXyaojue8TJXIuJrb4qxBqA3z35bC1kHdxtGZEEJUCtkHK2kEUD5GqD/C6OijCgPtZldU8Rn3fUDMfTjZrUS/ESFr7dOeNxWnusD30aWniHIRe7JQ4OHIhCe/oHaQiSjFUHJ7IlgQzwqCAtccweymxiq1r2jwJscdYaDOHrYz8AcvIfybxzHwT8hgSz7+dIZsjepp07uO5QYcyMM3meB6mS4KznanQOokmawcUcxw4tSFqqI/OxWKc7ZBMnaBdC5iOKZbbLE8bHbS8jfh6/HzONNnLOyMCAwEAAaMyMDAwDwYDVR0PAQH/BAUDAwf4ADAdBgNVHQ4EFgQUd415wDQYJKoZIhvcNAQELBQADggEBAClHD810UCnRuvS7Rbtp5UFTzeRvexDe+Jk6/1FdcfW4COWLRVrgY45XHQr2GmhPWC1G2Yn8WczkIErpX+LAtyFSyOYzBq1GjzpSLhqS/aNWstGVmPDLs+xySyRlBTPgFqsyl/kpIjyusKswUo57X77B7S+KzH4hvGsA6gj55ZLAynSnzMtPs+2Ij4F3PgkgJG7zxHs9HOuyuZtCKJAldVv7IFaQYv6yMjH7llehQOMwp1YPh54kk8M4yk1IIgi/Hw4Tr/HbU7r2EJyaHfxFZgck1Cr9nBIspANy5BDlFYeAnTmKk3UAafbZdSMfeJFd/XwaPlhIzNEJYGW3T4Y5d8o=","MIIDazCCAlOgAwIBAgIIMdQl7kIMrv0wDQYJKoZIhvcNAQELBQAwWTETMBEGCgmSJomT8ixkARkWA2NvbTEWMBQGCgmSJomT8ixkARkWBm9yYWNsZTEVMBMGCgmSJomT8ixkARkWBWNsb3VkMRMwEQYDVQQDEwpDbG91ZDlDQS0yMCAXDTE2MDUyMTAyMTgwOVoYDzIxMTYwNDI3MDIxODA5WjBZMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxLGQBGRYFY2xvdWQxEzARBgNVBAMTCkNsb3VkOUNBLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPZn2VAoMsIfWmIJks9exzK+DXaX6qYyBc12dRqDrRpC48v3CBeBchV/GT2E+mjcDp8Hzq8oIpwr9W5kwMja4PU3SPd4/0LB6WKbtLfHOnJxLg9EaT992UpbUGHaHlEq4oRAuVvPgDLp5sSspLZYEBKUh4vJXOyLitE1qsXn7mJNXRKTJZvrJKdfbs1dyTge3V3wk1rwY/wCWMKVgkqCgSzzWCGju8EZWoOrnzlR6BHkA0qZqeV4F7jDW8ucdv+Y20pOlOiaEbIg/ZFYGrZd5VWjlNvgLfU8P4C/YJLSkkcPHgoet3w4jI0S26efu59rVzgU9VsKnKtnqbDL99t81vAgMBAAGjNTAzMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDMA8e55FI5kC12+guIE9xtcIXpFMA0GCSqGSIb3DQEBCwUAA4IBAQC45tOVeqHxA8Bo/Rnv1SHHpULge3HyTC1XV9nmUdrj6g/U6rmbA5hVJ5LshgQ77qopO/YsaNHj5Ru1u/+8VOlZWpbn+kt3CDOuBUCe89CKBZT/KWEDkvtNl2qu16gOkhFnuTQk8NsARvwZZ6KtyPDmsbW4Nc/I5fKwPhdTaMjCV6Lh9RCG4kU77lbdwY3SaXlCBXXQyfPWMouCi7z1thJaF3cNGW4tnsibMR5ej9fJ9j6UvShxNgAIgjNDoihPlC6k0kW3QDR3bBjCHJX47505aIhckojH/eKsP2Or0eE/Ma4WNbndj0IXPE2ae5AVmC8/GRtwAmnoZPnt3g/I2m5j"],"key_ops":["sig","encrypt"],"alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
Observação:
-
Este JWK foi redigido.
-
Se receber uma mensagem de erro, você precisará fornecer acesso no Oracle Identity Cloud Service.
Alteração Importante na String JWK: A string JWK não será útil no Gateway de API do OCI até que você faça algumas alterações.
-
Localize o segmento com "key_ops":["x","y","z"] e substitua por "use" : "sig". Vai parecer como mostrado abaixo (compare as duas cordas).
{"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"}]}
-
Remova a string
{"keys":[
do início e]}
do final. A string final será semelhante à mostrada abaixo. Agora você pode usá-lo.{"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"}
-
Tarefa 2: Configurar um OCI Functions para chamar sua API do OCI SDK
-
Entender o OCI Functions e o API Gateway: É uma prática recomendada expor seus serviços por meio de um Gateway de API. Muitas autenticações podem ser feitas ignorando as credenciais do Gateway de API para os serviços de backend, mas se a autenticação de backend não for o método apropriado para seu aplicativo cliente, poderemos fazer algumas configurações no nível do Gateway de API.
Nesta etapa, vamos entender como o Gateway de API do OCI pode nos ajudar a integrar a autenticação OAuth2 e a solicitação de qualquer serviço do OCI, como a previsão de Implantação de Modelo do Data Science por meio do OCI Functions.
O OCI Functions pode fazer o job para receber a solicitação do corpo e passar para o serviço OCI. Alguns serviços no serviço OCI não podem ser autenticados pelo método OAuth2; portanto, podemos fazer isso com o OCI Functions.
Neste exemplo, o serviço de previsão de Implantação de Modelo pode ser autenticado pela chave Privada do OCI no OCI IAM. Isso pode ser feito pelo Controlador de Recursos.
Se você não souber como criar e implantar um OCI Functions, consulte Início Rápido do OCI Functions
-
Entender o Código: Este código será preparado para ser usado com o Gateway de API do OCI. Na sua implantação de API, configuraremos o ponto final de Implantação de Modelo no Gateway de API e ele será informado como um parâmetro HEADER. Portanto, você pode usar essa função para muitas Implantações de Modelo em cada implantação do Gateway de API de que precisa.
-
Usaremos a biblioteca
oracle.ads
no Python para autorizar pelo Controlador de Recursos o acesso dessa função à instância de Implantação de Modelo (consulte a tarefa 4).ads.set_auth('resource_principal')
-
O conteúdo do corpo pode ser capturado por esta linha.
body = json.loads(data.getvalue())
-
Configuraremos um HEADER denominado model_deployment no Gateway de API do OCI. Este HEADER contém o URL da previsão de Implantação de Modelo transmitida na solicitação do Gateway de API.
endpoint = ctx.Headers()["model_deployment"]
-
Isso executará a solicitação POST da API REST e retornará o resultado da Implantação de Modelo no ponto final do serviço Data Science.
return requests.post(endpoint, json=body, auth=ads.common.auth.default_signer()['signer']).json()
-
Esta é a biblioteca
requirements.txt
que precisará ser carregada nesta função.requirements.txt --------------------- fdk>=0.1.54 requests oracle-ads
Implante seu OCI Functions e vamos configurá-lo no OCI API Gateway.
-
Tarefa 3: Configurar uma Autenticação de Implantação do Gateway de API
Observação: para obter mais informações sobre como desenvolver um OCI Functions e chamá-lo no OCI API Gateway, consulte Chamar um OCI Functions usando o API Gateway.
-
Selecione OAuth 2.0 / OpenID Connect e informe a configuração a seguir. Essa é a maneira padrão de autenticação por meio do HEADER.
Token Location: Header JWT token header name: Authorization Authentication scheme: Bearer
-
Digite a string Chave Web JSON criada anteriormente, selecione Chaves estáticas e digite as informações a seguir.
Key ID: SIGNING_KEY Key format: JSON web key JSON web key: <Your JWK string created previously>
-
Informe os Emissores como
https://identity.oraclecloud.com/
e Públicos-alvo com o nome de host do Gateway de API do OCI obtido anteriormente.Configure suas Funções do OCI criadas na última tarefa.
-
Configure o parâmetro HEADER
model_deployment
e clique em Mostrar políticas de solicitação de rota. -
Nas transformações HEADER, clique em Adicionar.
-
Você deve ter o URL de previsão de Implantação de Modelo do Data Science. Você pode obter isso aqui: vá para o menu Data Science, selecione sua instância do Data Science e sua implantação de modelo e clique em Chamando seu modelo.
Observação: Salve seu OCID de Implantação de Modelo aqui. Você precisará configurar as políticas posteriormente.
Seu URL de previsão de Implantação de Modelo do Data Science.
-
Informe o nome do cabeçalho como model_deployment e os valores como o URL de previsão de Implantação de Modelo do Data Science.
Observação: Depois de salvar sua implantação do Gateway de API, lembre-se do ponto final da implantação de API.
Tarefa 4: Configurar o Grupo e as Políticas do OCI
Crie um grupo dinâmico para conceder acesso do OCI Functions ao seu recurso do OCI. Neste tutorial, estamos usando a Implantação de Modelo do Serviço Data Science. Para obter mais informações sobre como usar o Controlador de Recursos, consulte Controlador de Recursos.
-
Obtenha o OCID da sua instância de Implantação de Modelo. Digite o OCID na string de grupo dinâmico.
ALL {resource.type = 'fnfunc', resource.id = 'ocid1.datasciencemodeldeployment.oc1.sa-saopaulo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
Observação:
resource.id
é o OCID obtido anteriormente na tela da console de Implantação de Modelo. -
Crie uma política para permitir seu grupo dinâmico. Para obter mais informações, consulte Políticas de Implantação 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
Tarefa 5: Testar API
Agora, vamos simular a solicitação OAuth2 do seu aplicativo para o serviço de Implantação de Modelo no OCI Data Science.
-
Obtenha o token que informa o ID do Cliente e o Segredo do Cliente ao seu provedor do Oracle Identity Cloud Service.
-
Informe o ponto final de implantação do OCI API Gateway e selecione a solicitação REST
POST
. Copie o valor access_token e passe para sua implantação do OCI API Gateway. Lembre-se de que seu token tem uma duração de uma hora.E aqui está o resultado!
Links Relacionados
Agradecimentos
- Autor - Cristiano Hoshikawa (Engenheiro de Soluções Oracle LAD A-Team)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o 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.