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.
Personalize sua Segurança de API usando o OCI API Gateway e o OCI Functions
Introdução
Descubra a sinergia perfeita entre o Oracle Cloud Infrastructure (OCI) Functions e o OCI API Gateway para implementar um método de autenticação personalizado para suas APIs e como as funções podem recuperar argumentos do gateway de API.
Gateway de API do OCI
O serviço OCI API Gateway permite que você publique APIs com pontos finais privados acessíveis na sua rede e que você pode expor com endereços IP públicos se quiser que eles aceitem o tráfego da internet. Os pontos finais suportam validação de API, transformação de solicitação e resposta, CORS, autenticação e autorização e limitação de solicitação.
Usando o serviço OCI API Gateway, você cria um ou mais gateways de API em uma sub-rede regional para processar o tráfego de clientes de API e roteá-lo para serviços de backend. Você pode usar um único gateway de API para vincular vários serviços de backend (como OCI Load Balancer, instâncias do OCI Compute e OCI Functions) em um único ponto final de API consolidado.
Funções do OCI
O OCI Functions é uma plataforma Functions-as-a-Service totalmente gerenciada, multitenant, altamente escalável e sob demanda. Ela foi criada na OCI de nível empresarial e desenvolvida pelo mecanismo de código-fonte aberto Fn Project. Use o OCI Functions quando quiser se concentrar na gravação de código para atender às necessidades do negócio.
Observação:
Este tutorial é projetado exclusivamente para fins educacionais e de estudo. Ele fornece um ambiente para os alunos experimentarem e ganharem experiência prática em um ambiente controlado. É crucial observar que as configurações e práticas de segurança empregadas neste laboratório podem não ser adequadas para cenários do mundo real.
As considerações de segurança para aplicativos do mundo real geralmente são muito mais complexas e dinâmicas. Portanto, antes de implementar qualquer uma das técnicas ou configurações aqui demonstradas em um ambiente de produção, é essencial realizar uma avaliação e revisão abrangentes de segurança. Essa revisão deve abranger todos os aspectos de segurança, incluindo controle de acesso, criptografia, monitoramento e conformidade, para garantir que o sistema esteja alinhado com as políticas e padrões de segurança da organização.
A segurança deve ser sempre uma prioridade máxima ao fazer a transição de um ambiente de laboratório para uma implantação do mundo real.
Objetivo
- Crie um gateway de API com uma resposta simulada usando o OCI Functions como Funções do Autorizador para implementar uma validação de segurança personalizada, retornando parâmetros específicos ao gateway de API.
Pré-requisitos
-
Uma conta Oracle com permissões de administrador.
-
Crie um token de autenticação no seu usuário. Para obter mais informações, consulte Gerando um Token de Autenticação para Ativar o Acesso ao Oracle Cloud Infrastructure Registry.
-
Um compartimento para criar seus recursos.
Observação: Anote o Nome do Compartimento e o ID do Compartimento.
-
VCN com uma sub-rede privada e pública. Para obter mais informações, consulte Criando uma Rede Virtual na Cloud.
-
Um aplicativo de função implantado na sub-rede privada da sua VCN. Para obter mais informações, consulte Guias do Serviço QuickStart do Serviço Functions.
-
Um gateway de API criado na sub-rede pública da sua VCN. Para obter mais informações, consulte o API Gateway QuickStart Guide.
-
Usaremos um backend fictício, conhecido no gateway de API como resposta padrão. Para obter mais informações, consulte Adicionando Respostas Padrão como um Back-End do Serviço API Gateway
-
Acesso ao OCI Cloud Shell usando seu browser. Para obter mais informações, consulte OCI Cloud Shell.
-
Configure sua lista de segurança para permitir o acesso entre sub-redes privadas e públicas.
Tarefa 1: Configurar Grupos Dinâmicos
Faça log-in na Console do OCI, navegue até seu domínio, clique em Grupos Dinâmicos e crie grupos com as informações a seguir.
-
Nome do Grupo: Digite
MyFunctions
.ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
-
Nome do Grupo: Digite
MyApiGateway
.ALL {resource.type = 'ApiGateway', resource.compartment.id = 'pasteYourCompartmentOCID'}
Tarefa 2: Criar Políticas
Vá para a Console do OCI, navegue até Políticas e crie políticas com as informações a seguir.
-
Nome da Política: Digite
FunctionsPolicies
.Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
-
Nome da Política: Digite
ApiGatewayPolicies
.Allow dynamic-group MyApiGateway to use functions-family in compartment YOUR-COMPARTMENT-NAME
Tarefa 3: Criar um Registro de Contêiner do OCI
-
Vá para a Console do OCI, navegue até Developer Services, Containers & Artifacts, selecione Container registry e clique em Create repository para criar um repositório privado para a imagem da função.
-
Nome do repositório: Digite
functions/authorizationfunctionjava
.
-
-
Verifique os repositórios e anote o Namespace.
-
Abra o OCI Cloud Shell no qual você deve ter a CLI e o Docker do OCI instalados e continue com o log-in no registro. Verifique qual é o URL correto para sua região. Neste tutorial, estamos usando Leste do Brasil (São Paulo) em que o URL do registro é
gru.ocir.io
.docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
Tarefa 4: Criar um Java OCI Functions como uma Função de Autorizador
Observação: Certifique-se de selecionar sua sub-rede privada.
-
Vá para a Console do OCI, acesse Developer Services, Functions, Applications e clique em Create application.
-
Inicie o OCI Cloud Shell no qual você tenha o Docker, a CLI do OCI e a CLI do Fn Project instalada e execute os comandos a seguir para inicializar a função.
Observação: Se você tiver seguido as tarefas, o comando de log-in do Docker já deverá ter sido executado; caso contrário, prossiga com a etapa de log-in do Docker na Tarefa 3.
Vá para a Console do OCI, acesse Developer Services, Functions, Applications, selecione seu aplicativo e clique em Getting started. Execute os comandos a seguir.
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
Observação: Neste tutorial, estamos usando a região Leste do Brasil (São Paulo). Se você estiver usando uma região diferente, será necessário alterar o local do registro.
-
Faça download do código de amostra da função Java aqui: authorizationfunctionjava.tar e faça upload dele no OCI Cloud Shell e, em seguida, descompacte o arquivo.
# check your file is there ls -lrt # create your directory mkdir authorizationfunctionjava # unzip the file tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava cd authorizationfunctionjava/
Esse código Java simples recebe dois parâmetros
token
ecustomer
. Ele também recupera um terceiro parâmetro de uma variável de ambiente do sistema definida na configuração da função.Observação: Certifique-se de que os nomes dos parâmetros no método handleRequest(Entrada de entrada) sejam iguais aos nomes usados na configuração do gateway de API. Isso garante que o gateway de API transmita corretamente os parâmetros para a função de autorizador.
Este trecho de código valida a entrada e retorna uma resposta específica.
Para obter mais informações sobre o formato e os parâmetros de resposta necessários, consulte Criando uma Função de Autorizador.
-
Execute o comando a seguir para criar o código e implantar a função.
cd authorizationfunctionjava/ ls -lart fn deploy --app chafikFunctions
-
Crie várias configurações para armazenar as credenciais do cliente para testar a validação da função.
Observação: essas variáveis de configuração são usadas como variáveis de ambiente do sistema dentro do código de amostra Java fornecido neste tutorial. No entanto, você pode modificar o código de função para usar uma abordagem alternativa, como o Fn RuntimeContext. Para obter mais informações, consulte Usando o Fn RuntimeContext com Funções.
Nome/Chave do Segredo Valor FN_AAA_KEY 123,456 FN_BBB_KEY 898,989 FN_ORACLE_KEY ABCD1234 -
Você pode configurar essas definições por meio da Console do OCI navegando até Developer Services. Em Funções, clique em Aplicativos, selecione seu aplicativo e, em seguida, selecione sua função. Na página de detalhes da função, clique em Configuração.
Ou
Execute os 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
-
Execute o comando a seguir para chamar a função.
# Invoke the function to check if it's working as expected echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
Observação: A chamada inicial pode levar até um minuto para aquecer a função. Verifique a configuração para ver se há definições adicionais. Para obter mais informações, consulte Reduzindo a Latência Inicial Usando Simultaneidade Provisionada.
Teste com dados válidos e inválidos para verificar as respostas da função.
Tarefa 5: Criar Gateway de API do OCI e uma API Simulada para usar a Função de Autorizador
Observação: Certifique-se de selecionar sua sub-rede pública.
-
Vá para a Console do OCI, acesse Developer Services, API Management, Gateways e clique em Criar Gateway.
-
Vá para a página Detalhes do gateway e anote Nome do host.
-
Crie uma implantação no gateway de API. Em Informações básicas, especifique as seguintes informações.
- Prefixo do caminho: Digite
/authFunction
.
Observação: Nome do Host e Prefixo do caminho do gateway de API serão usados para formar o ponto final da API.
- Prefixo do caminho: Digite
-
Em Autenticação, especifique as informações a seguir.
-
Selecione Autenticação Única.
-
Selecione Função do Autorizador.
-
Aplicativo do Oracle Functions: Selecione o aplicativo criado na Tarefa 4.
-
Oracle Function: Selecione a função criada na Tarefa 4.
-
Selecione Função de autorizador de múltiplos argumentos.
-
Argumentos de função: especifique as seguintes informações.
Tabela de contexto Nome do cabeçalho Nome do argumento request.headers cliente cliente request.headers token token
Observação O Nome do cabeçalho refere-se às informações incluídas no cabeçalho da solicitação ao chamar o ponto final da API. O Nome do argumento é o nome do parâmetro enviado para a função de autorizador. Consulte o código Java na Tarefa 4.3
-
-
Em Rotas, crie uma única rota para um teste simulado com as informações a seguir.
- Caminho: Digite
/mock
. - Métodos: Selecione GET.
- Backend Option: Selecione Editar backend único adicionado.
- Tipo de Backend: Selecione Resposta de estoque.
- Caminho: Digite
-
Em Rotas, defina a Resposta do Modelo e clique em Próximo.
- Código de status: Informe 200.
- Corpo: Digite {"mensagem" : "ok"}.
- Nome do cabeçalho: Selecione Content-Type.
- Valor do Cabeçalho: Selecione application/json; charset=UTF-8.
-
Em Revisar, verifique a configuração e clique em Salvar Alterações para concluir a criação da implantação.
-
Execute o comando
curl
para testar sua 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
Se a chamada com informações inválidas, a resposta será HTTP/1.1 401 Não Autorizado.
Tarefa 6: Usar o Gateway de API do OCI para Recuperar Parâmetros e Escopo das Funções do Autorizador
Observação Consulte o código Java baixado na Tarefa 4. Esta tarefa explica como trabalhar com
result.context
eresult.scope
no gateway de API.
-
Recuperar valores de contexto das funções de autorizador.
Considere um cenário em que você precise recuperar informações da função de autorizador e usá-las no gateway de API. Por exemplo, talvez você queira usar um token de autorização para chamar um serviço de backend.
Observação: Nesta demonstração de laboratório, as informações são retornadas no cabeçalho de resposta.
-
Vá para a Console do OCI, acesse Developer Services, API Management, Gateways e selecione seu gateway. Clique em Implantações, selecione a implantação criada na Tarefa 5 e clique em Editar.
-
Navegue até Rotas e clique em Mostrar políticas de resposta de rota.
-
Em Políticas de Resposta, em Transformações de cabeçalho, clique em Adicionar para continuar.
-
Na página Transformações do cabeçalho de resposta, configure seu gateway de API conforme mostrado na imagem a seguir e clique em Aplicar Alterações.
Ambos os parâmetros do código Java serão incluídos nos cabeçalhos de resposta da API.
- Nome do cabeçalho: Este campo especifica o nome do atributo de cabeçalho na resposta da API.
- Valores: Este campo especifica o nome do atributo recuperado da função de autorizador.
Utilize o formato a seguir:
${request.auth[attributeNameFromAuthorizerFunction]} #examples ${request.auth[valor01]} ${request.auth[valor02]}
-
Verifique a configuração da resposta do cabeçalho. Clique em Próximo para revisar as alterações e clique em Salvar Alterações para aplicar.
-
Teste a API e examine os cabeçalhos de resposta.
-
Vamos esclarecer como usar valores de escopo de uma função de autorizador para aumentar a segurança.
Observação: No contexto da autorização, o escopo refere-se às permissões específicas ou aos níveis de acesso concedidos a um usuário ou aplicativo.
A função de autorizador retorna todos os escopos disponíveis (no nosso exemplo, isto é hardcoded) para esta chamada de API.
Para algumas Rotas em sua Implantação do Serviço API Gateway, talvez você queira permitir que apenas escopos específicos aprimorem a segurança.
Vá para a Console do OCI, acesse Developer Services, API Management, Gateways e selecione seu gateway. Clique em Implantações, selecione a implantação criada na Tarefa 5 e clique em Editar.
-
Navegue até Rotas e clique em Mostrar políticas de solicitação de rota.
-
Em Políticas de Solicitação, em Autorização, clique em Editar.
-
Em Política de autorização, selecione Qualquer um como Tipo de autorização, adicione todo o Escopo Permitido retornado pela função de autorizador e clique em Aplicar Alterações.
-
Em Revisar, revise suas alterações, clique em Próximo e, em seguida, clique em Salvar Alterações para aplicar suas modificações.
-
Teste a API e verifique se ela está funcionando. Os escopos são retornados pela função de autorizador.
-
Altere o gateway de API para usar um escopo não retornado pela função de autorizador.
Revise suas alterações, clique em Próximo e, em seguida, em Salvar Alterações para aplicar suas modificações.
-
Teste a API e verifique o resultado.
A resposta será um status http 404 Não Encontrado.
Verifique se as funções do autorizador funcionam corretamente, uma vez que os dois cabeçalhos são retornados. No entanto, o backend de roteamento falha em decorrência da validação de autorização de escopo nas políticas de solicitação.
Links Relacionados
Confirmações
-
Autor - Rodrigo Chafik Choueiri (Engenheiro de Soluções da Equipe A do Oracle LAD)
-
Contribuidores - João Tarla (Engenheiro de Soluções da Equipe A do Oracle LAD), Sillas Lima (Arquiteto de Soluções do Oracle LAD)
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.
Customize your API Security using OCI API Gateway and OCI Functions
G25985-01
February 2025
Copyright ©2025, Oracle and/or its affiliates.