Editar

Share via


Microsserviços sem servidor integrados em rede virtual

Azure API Management
Azure Cosmos DB
Azure Functions
Azure Key Vault
Azure Virtual Network

Nesta solução do Azure, o Azure API Management (APIM) controla o acesso à API por meio de um único ponto de extremidade gerenciado. O back-end do aplicativo consiste em dois aplicativos de microsserviço interdependentes do Azure Functions que criam e gerenciam registros de pacientes e registros de auditoria. O APIM e os dois aplicativos de função acessam um ao outro por meio de uma rede virtual bloqueada.

Este artigo e o projeto de código associado destilam o cenário de exemplo até os principais componentes técnicos, para servir como andaime para implementações específicas. A solução automatiza todas as implantações de código e infraestrutura com o Terraform e inclui integração automatizada, testes de unidade e carga.

Arquitetura

O diagrama a seguir mostra o fluxo de solicitação de criação de registro do paciente:

Diagram showing virtual network integrated microservices.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de Trabalho

  1. Serviços externos e clientes fazem um pedido de POST à APIM, com um corpo de dados que inclui informação do paciente.
  2. A APIM chama a CreatePatient função na API do paciente com as informações fornecidas ao paciente.
  3. A CreatePatient função em Patient API chama a CreateAuditRecord função no aplicativo de função Audit API para criar um registro de auditoria.
  4. A função API de auditoria cria o registro de auditoria no Azure Cosmos DB e retorna uma resposta bem-sucedida à função APICreateAuditRecord de pacienteCreatePatient .
  5. A CreatePatient função cria o documento do paciente no Azure Cosmos DB e retorna uma resposta de êxito ao APIM.
  6. Os serviços externos e os clientes recebem a resposta de sucesso da APIM.

Componentes

A solução utiliza os seguintes componentes:

  • O Azure API Management (APIM) é uma plataforma híbrida e multicloud para gerenciar APIs em todos os ambientes. Nesta solução, a APIM controla o acesso interno e de terceiros à API do Paciente que permite a leitura e/ou gravação de dados. O APIM permite uma fácil integração com diferentes mecanismos de autenticação.

  • O Azure Functions é uma plataforma de computação sem servidor que lida com pequenas partes de código orientadas a eventos. A infraestrutura de nuvem fornece os servidores atualizados necessários para executar as funções em escala. A solução atual usa um conjunto de dois microsserviços de API do Azure Functions que criam e gerenciam operações para resultados de testes de pacientes e registros de auditoria.

  • A Rede Virtual do Azure fornece um ambiente de aplicativo isolado e altamente seguro, restringindo o acesso à rede a endereços IP ou sub-redes específicos. O APIM e o Azure Functions dão suporte à restrição de acesso e à implantação em redes virtuais. Essa solução usa a integração de rede virtual regional para implantar ambos os aplicativos de função na mesma rede virtual na mesma região.

  • O Azure Key Vault armazena, criptografa e gerencia centralmente o acesso a chaves, certificados e cadeias de conexão. Esta solução mantém as chaves de host do Azure Functions e as cadeias de conexão do Azure Cosmos DB em um Cofre de Chaves que apenas identidades especificadas podem acessar.

  • O Azure Cosmos DB é um banco de dados sem servidor totalmente gerenciado com dimensionamento instantâneo e automático. Na solução atual, ambos os microsserviços armazenam dados no Azure Cosmos DB, usando o driver MongoDB Node.js driver. Os serviços não compartilham dados e você pode implantar cada serviço em seu próprio banco de dados independente.

  • O Application Insights, um recurso do Azure Monitor, relata o desempenho, o uso, a disponibilidade e o comportamento do aplicativo para detetar e ajudar a diagnosticar anomalias.

    As falhas na arquitetura baseada em microsserviços geralmente são distribuídas por uma variedade de componentes e não podem ser diagnosticadas observando os serviços isoladamente. A capacidade de correlacionar a telemetria entre componentes é vital para diagnosticar esses problemas. A telemetria do Application Insights centraliza o registro em log em todo o pipeline de solicitações para detetar anomalias de desempenho. A telemetria compartilha um ID de operação comum, permitindo a correlação entre componentes.

    O APIM e o tempo de execução do Azure Functions têm suporte interno para o Application Insights para gerar e correlacionar uma ampla variedade de telemetria, incluindo saída de aplicativo padrão. Os aplicativos de função usam o SDK do Application Insights Node.js para rastrear manualmente dependências e outras telemetrias personalizadas.

    Para obter mais informações sobre o rastreamento de telemetria distribuída nesta solução, consulte Telemetria distribuída.

Alternativas

  • A solução atual requer uma chave de assinatura para acessar o ponto de extremidade do APIM, mas você também pode usar a autenticação do Microsoft Entra.
  • Além de exigir chaves de acesso à API, você pode usar a autenticação interna do Serviço de Aplicativo do Azure Functions para habilitar a autorização do Microsoft Entra para as identidades gerenciadas das APIs.
  • Você pode substituir o ponto de extremidade do Azure Cosmos DB nesta solução por outro serviço MongoDB sem alterar o código.
  • Para segurança adicional do Azure Cosmos DB, você pode bloquear o tráfego dos bancos de dados do Azure Cosmos DB para os aplicativos de função.
  • Componentes como o Azure Cosmos DB podem enviar telemetria para o Azure Monitor, onde podem ser correlacionados com a telemetria do Application Insights.
  • Em vez do Terraform, você pode usar o portal do Azure ou a CLI do Azure para tarefas de rotação de chaves do Cofre da Chave.
  • Em vez do Terraform, você pode usar um sistema como o Azure DevOps ou o GitHub Actions para automatizar a implantação da solução.
  • Para maior disponibilidade, essa solução pode ser implantada em várias regiões. Defina o Azure Cosmos DB como multimestre, use o suporte interno a várias regiões do APIM e implante os aplicativos do Azure Function em regiões emparelhadas.

Detalhes do cenário

Este artigo descreve uma solução integrada para gerenciamento de registros de pacientes. Uma organização de saúde precisa armazenar digitalmente grandes quantidades de dados de testes médicos de pacientes altamente confidenciais na nuvem. Os sistemas internos e de terceiros devem ser capazes de ler e gravar os dados com segurança através de uma interface de programação de aplicações (API). Todas as interações com os dados devem ser registadas num registo de auditoria.

Potenciais casos de utilização

  • Aceda a dados altamente sensíveis a partir de terminais externos designados.
  • Implemente auditorias seguras para operações de acesso a dados.
  • Integre aplicativos de microsserviços interdependentes com acesso e segurança comuns.
  • Use recursos de segurança de rede virtual enquanto aproveita a economia de custos e a flexibilidade sem servidor.

Benefícios

Alguns benefícios de aplicativos sem servidor, como o Azure Functions, são a economia de custos e a flexibilidade de usar apenas os recursos de computação necessários, em vez de pagar antecipadamente por servidores dedicados. Essa solução permite que o Azure Functions use restrições de acesso à rede virtual para segurança, sem incorrer no custo e na sobrecarga operacional de ASEs (Ambientes do Serviço de Aplicativo do Azure) completos.

O APIM controla o acesso interno e de terceiros a um conjunto de microsserviços de API criados no Azure Functions. A API do paciente fornece operações de criação, leitura, atualização e exclusão (CRUD) para pacientes e seus resultados de teste. O aplicativo de função API de auditoria fornece operações para criar entradas de auditoria.

Cada aplicativo de função armazena seus dados em um banco de dados independente do Azure Cosmos DB . O Cofre de Chaves do Azure armazena com segurança todas as chaves, segredos e cadeias de conexão associados aos aplicativos e bancos de dados. A telemetria do Application Insights e o Azure Monitor centralizam o log em todo o sistema.

Considerações

Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

Considere os seguintes aspetos ao implementar esta solução.

Segurança

A segurança oferece garantias contra ataques deliberados e o abuso de seus valiosos dados e sistemas. Para obter mais informações, consulte Visão geral do pilar de segurança.

Devido à sensibilidade dos dados, a segurança é primordial nesta solução. A solução utiliza vários mecanismos para proteger os dados:

  • Gerenciamento de gateway APIM
  • Restrições de acesso à rede virtual
  • Chaves de acesso de serviço e cadeias de conexões
  • Gerenciamento de chaves e cadeias de conexão no Cofre de Chaves
  • Rotação de chaves do Cofre da Chave
  • Identidades de serviço gerenciado

Você pode proteger sua instância de Gerenciamento de API do Azure contra ataques distribuídos de negação de serviço (DDoS) usando a proteção contra DDoS do Azure. A Proteção contra DDoS do Azure fornece recursos aprimorados de mitigação de DDoS para defesa contra ataques DDoS volumétricos e de protocolo.

Para obter mais detalhes sobre o padrão de segurança desta solução, consulte Padrão de segurança para comunicação entre Gerenciamento de API, aplicativos Functions e Azure Cosmos DB.

Gerenciamento de gateway de API

O sistema é acessível publicamente somente por meio do único endpoint APIM gerenciado. A sub-rede APIM restringe o tráfego de entrada aos endereços IP do nó de gateway especificado.

O APIM permite uma fácil integração com diferentes mecanismos de autenticação. A solução atual requer uma chave de assinatura, mas você também pode usar o Microsoft Entra ID para proteger o ponto de extremidade APIM sem precisar gerenciar chaves de assinatura no APIM.

Rede virtual

Para evitar expor APIs e funções publicamente, a Rede Virtual do Azure restringe o acesso à rede para APIs e funções a endereços IP ou sub-redes específicos. O Gerenciamento de API e o Azure Functions dão suporte à restrição de acesso e à implantação em redes virtuais.

Os aplicativos de função podem restringir o acesso à sub-rede IPv4, IPv6 e rede virtual. Por padrão, um aplicativo de função permite todo o acesso, mas depois que você adiciona uma ou mais restrições de endereço ou sub-rede, o aplicativo nega todo o tráfego de rede.

Nesta solução, os aplicativos de função permitem interações apenas dentro de sua própria rede virtual. A API do paciente permite chamadas da sub-rede APIM adicionando a sub-rede APIM à sua lista de permissões de restrição de acesso. A API de auditoria permite a comunicação com a API de paciente adicionando a sub-rede da API de paciente à sua lista de permissões de restrição de acesso. As APIs rejeitam o tráfego de outras fontes.

A solução usa a integração de rede virtual regional para integrar o APIM e os aplicativos de função com a mesma rede virtual e região do Azure. Há várias considerações importantes para usar a integração de rede virtual regional:

  • Você precisa usar a SKU Premium do Azure Functions para ter integração de rede virtual regional e escalabilidade.
  • Você precisa usar o APIM Developer ou Premium SKU para habilitar a conectividade VNET
  • Como você implanta os aplicativos de função em uma sub-rede da rede virtual, configura as restrições de acesso dos aplicativos de função para permitir o tráfego de outras sub-redes na rede virtual.
  • A integração de rede virtual regional limita apenas o tráfego de saída da Função do Azure para a rede virtual. O tráfego de entrada ainda é roteado fora da rede virtual, embora limitado pela lista de acesso do aplicativo.

Somente os Ambientes do Serviço de Aplicativo oferecem isolamento de rede virtual completo no nível da rede. Os ASEs podem exigir consideravelmente mais despesas e esforços para implementar do que o Azure Functions que oferece suporte à integração de rede virtual regional. A escala ASE também é menos elástica.

Access keys

Você pode chamar APIM e aplicativos de função sem usar teclas de acesso. No entanto, desativar as chaves de acesso não é uma boa prática de segurança, portanto, todos os componentes desta solução exigem chaves para acesso.

  • O acesso ao APIM requer uma chave de assinatura, portanto, os usuários precisam incluir Ocp-Apim-Subscription-Key cabeçalhos HTTP.
  • Todas as funções no aplicativo de função API do paciente exigem uma chave de acesso da API, portanto, o APIM deve incluir x-functions-key no cabeçalho HTTP ao chamar a API do paciente.
  • Chamar CreateAuditRecord o aplicativo de função API de auditoria requer uma chave de acesso à API, portanto, a API do paciente precisa ser incluída x-functions-key no cabeçalho HTTP ao chamar a CreateAuditRecord função.
  • Ambos os aplicativos do Functions usam o Azure Cosmos DB como armazenamento de dados, portanto, eles devem usar cadeias de conexão para acessar os bancos de dados do Azure Cosmos DB.

Armazenamento do Cofre de Chaves

Embora seja possível manter chaves de acesso e cadeias de conexão nas configurações do aplicativo, não é uma boa prática, porque qualquer pessoa que possa acessar o aplicativo pode ver as chaves e cadeias de caracteres. A prática recomendada, especialmente para ambientes de produção, é manter as chaves e cadeias de caracteres no Cofre de Chaves do Azure e usar as referências do Cofre da Chave para chamar os aplicativos. O Cofre da Chave permite o acesso apenas a identidades gerenciadas especificadas.

O APIM usa uma política de entrada para armazenar em cache a chave de host da API do paciente para melhorar o desempenho. Para tentativas subsequentes, o APIM procura a chave em seu cache primeiro.

  • O APIM recupera a chave de host da API do paciente do Cofre da chave, armazena-a em cache e a coloca em um cabeçalho HTTP ao chamar o aplicativo de função API do paciente.
  • O aplicativo de função API de paciente recupera a chave de host da API de auditoria do Cofre de chaves e a coloca em um cabeçalho HTTP ao chamar o aplicativo de função de API de auditoria.
  • O tempo de execução do Azure Function valida as chaves nos cabeçalhos HTTP em solicitações de entrada.

Rotação de chaves

A rotação das chaves do Cofre da Chave ajuda a tornar o sistema mais seguro. Você pode girar as teclas automaticamente periodicamente, ou você pode girar as chaves manualmente ou sob demanda em caso de vazamento.

A rotação de chaves envolve a atualização de várias configurações:

  • A própria chave de host do aplicativo de função
  • O segredo no Cofre da Chave que armazena a chave do host
  • A referência Key Vault nas configurações do aplicativo de função, para fazer referência à versão secreta mais recente
  • A referência do Cofre de Chaves na política de cache do APIM para a API do Paciente

A solução atual usa Terraform para a maioria das tarefas de rotação de chaves. Para obter mais informações, consulte Padrão de rotação de chaves com Terraform.

Identidades geridas

Nesta solução, o APIM e os aplicativos de função usam identidades de serviço gerenciado (MSIs) atribuídas pelo sistema do Azure para acessar os segredos do Cofre da Chave. O Cofre da Chave tem as seguintes políticas de acesso individuais para a identidade gerenciada de cada serviço:

  • APIM pode obter a chave de host do aplicativo de função API do paciente.
  • O aplicativo de função API do paciente pode obter a chave de host da API de auditoria e a cadeia de conexão do Azure Cosmos DB para seu armazenamento de dados.
  • O aplicativo de função API de auditoria pode obter a cadeia de conexão do Azure Cosmos DB para seu armazenamento de dados.

Otimização de custos

A otimização de custos consiste em procurar formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.

Um dos principais benefícios de aplicativos sem servidor, como o Azure Functions, é a economia de custos de pagar apenas pelo consumo, em vez de pagar antecipadamente por servidores dedicados. O suporte de rede virtual requer o plano Azure Functions Premium , por um custo adicional. O Azure Functions Premium tem suporte para integração de rede virtual regional, ao mesmo tempo que suporta dimensionamento dinâmico. O Azure Functions Premium SKU inclui integração de rede virtual no APIM.

Para obter detalhes e calculadora de preços, consulte Preços do Azure Functions.

As funções também podem ser hospedadas em máquinas virtuais do Serviço de Aplicativo. Apenas os Ambientes do Serviço de Aplicativo (ASEs) oferecem isolamento de rede virtual completo no nível da rede. Os ASEs podem ser consideravelmente mais caros do que um plano do Azure Functions que dá suporte à integração de rede virtual regional, e o dimensionamento do ASE é menos elástico.

Implementar este cenário

O código-fonte desta solução está em Azure VNet-Integrated Serverless Microservices.

O código-fonte TypeScript para a API PatientTest e a API de auditoria estão na /src pasta. A fonte de cada API inclui um contêiner de desenvolvimento que tem todos os pré-requisitos instalados, para ajudá-lo a avançar rapidamente.

Ambas as APIs têm um conjunto completo de integração automatizada e testes de unidade para ajudar a evitar regressões quando você faz alterações. O projeto também é configurado para forrar com ESLint, para manter estilos de código e ajudar a proteger contra erros não intencionais. Os respetivos arquivos README dos serviços contêm informações sobre como executar os testes e linting.

Implantação de Terraform

A pasta /env do projeto de código inclui scripts e modelos para implantação do Terraform. O Terraform implanta o APIM e os aplicativos de função e os configura para usar a instância implantada do Application Insights. O Terraform também fornece todos os recursos e configurações, incluindo o bloqueio de rede e o padrão de segurança da chave de acesso.

O LEIA-ME de implantação explica como implantar o ambiente Terraform em sua própria assinatura do Azure. A /env pasta também inclui um contêiner de desenvolvimento que tem todos os pré-requisitos instalados para a implantação do Terraform.

Teste de carga de gafanhotos

Para avaliar o desempenho da API, você pode executar testes de carga em relação às APIs com os testes de carga de gafanhotos incluídos. Locust é uma ferramenta de teste de carga de código aberto, e os testes são escritos em Python. Você pode executar os testes de carga localmente ou remotamente em um cluster do Serviço Kubernetes do Azure (AKS). Os testes executam uma variedade de operações no ponto de extremidade APIM e verificam comportamentos em relação aos critérios de sucesso e falha.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Autor principal:

  • Hannes Nel - Brasil | Líder Principal de Engenharia de Software

Para ver perfis não públicos do LinkedIn, inicie sessão no LinkedIn.

Próximos passos

As arquiteturas a seguir abrangem os principais cenários de Gerenciamento de API:

Os seguintes artigos abrangem cenários de funções principais: