Sumário
- Acesso
- API – definições essenciais
- Ambientes
- Workflows, Stages e boas práticas
- Restringir o acesso das APIs ao seus endpoints (backend) somente para os IPs da plataforma
- Documentação dos interceptadores de segurança
- Conectores
Acesso
No Manager API você pode criar suas APIs, Apps, Planos etc.
https://unicamp.signin.platform-production.sensedia.com/ Observação:⚡Clique no botão Unicamp no rodapé da página.
Se for seu primeiro acesso, é necessário primeiro fazer login no Manager (use sua conta “@unicamp.br”).
Depois utilize este formulário do Catálogo de Serviços da DETIC para solicitar a associação sua a um time e para concedermos as permissões de acesso ao seu usuário.
- Já peça para os desenvolvedores do seu time também fazerem esse primeiro login. No formulário você deve indicar os usernames dos mesmos pelos mesmos motivos citados.
O uso desta plataforma está condicionado ao usuário seguir as diretrizes da Instrução Normativa ConTIC IN-01/2019.
API – definições essenciais

- Teams: Deve estar associada sempre a um time;
- Portal settings: controla a publicação no portal do desenvolvedor, onde os clientes da sua API podem acessar sua documentação SWAGGER e ter uma primeira interação com ela via Try out;
- Plans e Apps: A API deve estar sempre associada a uma App (quem é o cliente da API) e um Plano (restrições de uso).
- Interface Completeness: Percentual de completude conforme AG – Adaptative Governance;
- TRACE API: clique neste botão para visualizar as chamadas e os status da execução, bem como logging (aba Gateway TRACE).
Ambientes
Os ambientes disponíveis para publicação (deploy) de APIs são:
- api.des.unicamp.br (desenvolvimento)
- api.hom.unicamp.br (homologação)
- api.unicamp.br (produção)
Passos para publicação:

Workflows, Stages e boas práticas
Foram criados os seguintes Workflows / Stages para o desenvolvimento de APIs seguindo boas práticas:
- Stage One: workspace para iniciar a criação da sua API, sem premissa de uso de interceptadores e sem um percentual mínimo de completude da sua API.
- Sandbox:
- Interceptador requerido:
- Log (na Requisição, em qualquer posição da execução e em qualquer fluxo – recurso ou operação).
- Maturidade da API: 50% (completude do cadastro da API).
- Interceptador requerido:
- Os stages de desenvolvimento, homologação e produção têm duas possibilidades de uso para cada um, a depender da característica de sua API
- (A) Caso sua API seja para consumo público ☺️, isto é, não trate de dados sensíveis, pessoais e não trabalhe com dados sob sigilo, utilize os stages * Client Id Validation.
- O interceptador que dá nome a esse workflow permitirá a rastreabilidade do consumo dessa API, via sua App e Plano associados.
- Sem o uso dessa estratégia não haverá como consultar na auditoria quem foram os consumidores da API.
- Dessa forma você passará pelos Workflows stages:
- Desenv Client Id Validation
- Homolog Client Id Validation
- Prod Client Id Validation
- (B) Caso sua API trabalhe com dados sob sigilo, sensíveis ou pessoais 😨, então você deve usar os stages * OAuth para exigir dos consumidores elegíveis da sua API o clientID e o secret necessários para liberar o uso.
- Dessa forma você passará pelos Workflows stages:
- Desenv OAuth
- Homolog OAuth
- Prod OAuth
- Estes stages impõem o uso dos interceptadores Bearer Token RFC6750 v2 e OAuth na sua API.
- Dessa forma você passará pelos Workflows stages:
- (A) Caso sua API seja para consumo público ☺️, isto é, não trate de dados sensíveis, pessoais e não trabalhe com dados sob sigilo, utilize os stages * Client Id Validation.
Abaixo seguem os detalhes desses stages.
- stage Desenv ou Homolog Client Id Validation
- Interceptadores requeridos:
- Client Id Validation (na Requisição, em qualquer posição e fluxo).
- Log (na Requisição, em qualquer posição e fluxo).
- Maturidade da API: 60% (completude do cadastro da API).
- Interceptadores requeridos:
- stage Desenv ou Homolog OAuth
- Interceptadores requeridos:
- Bearer Token RFC6750 v2 e OAuth (na Requisição, em qualquer posição e fluxo).
- Log (na Requisição, em qualquer posição e fluxo).
- Maturidade da API: 60%
- Interceptadores requeridos:
- stage Prod Client Id Validation
- Equivalente ao de homologação de mesmo nome.
- Não pode usar Interceptador de Mock.
- Maturidade da API: 65%
- stage Prod OAuth
- Equivalente ao de homologação de mesmo nome.
- Não pode usar Interceptador de Mock.
- Maturidade da API: 65%

Mensagem de erro no caso de não usar um interceptor requerido:

🔦 Em alguns casos é importante usar o plugin do Desenvolvedor do seu navegador F12 para obter mais detalhes da mensagem de erro que a plataforma exibe.
Correção:

Observações:
- Ao mudar o stage da sua API para Desenv (Client ID Validation ou OAuth), esta já deve estar no stage Sandbox;
- Ao mudar o stage da sua API para Homolog (Client ID Validation ou OAuth), esta já deve estar tanto no stage Desenv correspondente, bem como publicada no ambiente Desenvolvimento Unicamp;
- Ao mudar o stage da sua API para Prod (Client ID Validation ou OAuth), esta já deve estar no stage Homolog correspondente, bem como publicada no ambiente Homologação Unicamp.
Exemplo: O pré-requisito para passar para o stage Homolog * é a API estar antes implantada no Desenvolvimento Unicamp.

Restringir o acesso das APIs ao seus endpoints (backend) somente para os IPs da plataforma
- Você pode obter estes IPs da plataforma a partir do recurso abaixo, faça login antes de acessar esta URL:
- https://manager-unicamp.sensedia.com/api-management/info/
- Vide IPs setados para OutboundAddress.
- ⚡ Esta ACL você deve especificar na sua infraestrutura no kubernetes, via Kubernetes Ingress Nginx allow list source range ou no Proxy e firewall da sua VM, como também no próprio backend (servidor WEB).

- O endereço api.unicamp.br é um alias no DNS da UNICAMP para a Plataforma de Gestão de API;
- É também um ambiente cadastrado na plataforma, com certificado TLS/SSL associado, com variáveis de ambiente e APIs também associadas a ele.
- A plataforma para esta API faz chamada ao target / endpoint a partir dos IPs de saída (OutboundAdress) da própria plataforma. E estes IPs (management/info) precisam constar na white list do serviço Ingress do Kubernetes e demais pontos, conforme exposto anteriormente.
- No caso de uso de conectores da plataforma, a fim de poder testar a conectividade deste, é necessário liberar 2 IPs específicos.
- Favor solicitar a plataforma-api-l@unicamp.br a relação de IPs.
Documentação dos interceptadores de segurança
As demais necessidades da sua API devem ser tratadas no escopo dela usando a paleta de interceptadores disponíveis, principalmente os relacionados a segurança de APIs.
Conectores
O API Manager provê o recurso conectores para integração com Banco de dados, Cloud Provider etc.
A ideia é por exemplo converter protocolo JDBC em chamadas REST com retorno dos dados encapsulados em JSON.
É um recurso interessante no caso de a demanda de negócio não demandar a construção de um serviço (micro-serviço ou backend) para prover dados.
Contudo, o uso desse recurso deve ser feito com bastante critério 📏 observando os aspectos mencionados na próxima seção. ‼️
Considerações de segurança e resiliência para prover APIs que usam conectores
- Na API que será cliente do conector criado:
- ⚡ Usar obrigatoriamente interceptadores como:
- SQL Threat Protection para sanitizar a entrada de dados;
- XSS Threat Protection, bem como demais interceptadores para barrar ataques;
- Nestes interceptadores é possível indicar expressões a serem ignoradas. Por exemplo: algumas cidades chamam “ALTER”, então para uma consulta de cidades, neste caso poderia ser colocado para ignorar essa expressão.
- Usar os interceptadores Bearer Token e OAuth para restringir quem pode usar sua API e restringir assim o acesso aos dados.
- ⚡ Avaliar de usar o interceptador de cache, caso a volatilidade dos dados seja baixa.
- ⚡ Usar obrigatoriamente interceptadores como:
- ⚡ No Plano da API que consome esse conector, usar interceptador RATE LIMIT para barrar acessos massivos de um mesmo IP num curto espaço de tempo por exemplo. E o recurso de payload size para evitar sobrecarga no processamento de requisições.
- ⚡ Se valer de outras precauções, como não criar conector para a base transacional do seu sistema, caso as consultas possam ser para dados D-1 (dia anterior).
- ⚡ Ao invés das queries executarem direto nas tabelas, utilize views que expõem só as colunas e registros necessários para o escopo da API.
- ⚡ Se a API for apenas para consulta de dados, no conector indicar um usuário de banco que tenha permissão somente de leitura na base de dados. Ideal ser um usuário de banco exclusivo para APIs do mesmo contexto.
- ⚡ Permitir que somente os IPs de Outbound do Gateway da Sensedia (consulte a URL management/info) possam acessar o recurso de conector (Java ou contêiner).
- ⚡ Adicionar o IP do Conector (Java ou contêiner) na ACL do banco de dados que proverá os dados.
- ⚡ Utilize a implantação do tipo contêiner / docker para ter alta disponibilidade do conector, ao invés da opção Java/Jar. Dessa forma, será possível configurar um cluster de conectores (kubernetes auto-scaling) ao invés de um único conector e evitar um SPF (Single Point of Failure).
Consulte aqui a documentação deste recurso.
Nesta documentação, Sensedia – API Patterns v2.2 – Guia prático, as páginas 17 e 18 tratam de um tema importante relacionado a paginação dos dados retornados pelo conector.