Este blog se concentrará na integração do IBM Cloud Code Engine e do IBM Cloud Event Notifications junto com o IBM Cloud Secrets Manager para construir um caso de uso robusto que automatizará seu processo de renovação de certificado para aplicativos em seu projeto de mecanismo de código. Construiremos um aplicativo simples usando o IBM Cloud Code Engine para atualizar seus segredos em um projeto do Code Engine.
Os serviços que usaremos são:
IBM Cloud Code Engine Notificações de eventos do IBM Cloud IBM Cloud Secrets Manager
Não é necessário ter um conhecimento prévio sobre estes serviços – embora um breve conhecimento seja bom. Você pode simplesmente seguir as instruções e poderá construir este aplicativo de exemplo. Todo o código é fornecido na URL do Github. Antes de continuarmos, deixe-me dar um breve conhecimento sobre esses serviços.
O que é o IBM Cloud Code Engine?
O IBM Cloud Code Engine é uma plataforma totalmente gerenciada e sem servidor que executa cargas de trabalho em contêineres, incluindo aplicativos da web, microsserviços, funções orientadas a eventos e tarefas em lote com características de execução até a conclusão. A experiência do Code Engine foi projetada para que você possa se concentrar na escrita do código e não na infraestrutura necessária para hospedá-lo.
O que são notificações de eventos do IBM Cloud?
O IBM Cloud Event Notifications é um serviço de roteamento que fornece informações sobre eventos críticos que ocorrem em sua conta do IBM Cloud. É possível filtrar e rotear notificações de eventos de serviços IBM Cloud como IBM Cloud Monitoring, Security and Compliance Center, Secrets Manager, IBM Cloud Projects e Toolchain para canais de comunicação como email, webhook, slack, IBM Code Engine, et al.
O que é o IBM Cloud Secrets Manager?
O IBM Cloud Secrets Manager é um serviço no qual é possível criar, arrendar e gerenciar centralmente segredos que são usados em serviços do IBM Cloud ou em seus aplicativos customizados. Os segredos são armazenados em uma instância dedicada do Secrets Manager, construída em código aberto.
Embarcando na jornada com aplicativos e certificados
Digamos que você tenha seu aplicativo Code Engine que possui seu próprio segredo: certificado TLS e chave privada. Geralmente, você manteria esses segredos em algo como um cofre que os administraria. Suponha que você armazene esse segredo no Secrets Manager. Você também armazenará o mesmo segredo em seu projeto Code Engine onde o aplicativo reside. Até agora, tudo bem, seu aplicativo poderá usar esse segredo e estará funcional.
No entanto, os segredos podem expirar após um determinado período de tempo e, portanto, precisam ser renovados. Tudo estava funcionando bem até o segredo expirar, seu aplicativo que usa esse segredo será interrompido, afetando assim seus clientes.
Se você conhece o Secrets Manager, sabe que ele também pode alternar os segredos para novos automaticamente quando eles expirarem. Digamos que você alterne os segredos no Secrets Manager. Então, e quanto ao seu projeto Code Engine? Os segredos não serão atualizados lá, a menos que você faça isso manualmente. Digamos que você construiu outro aplicativo Code Engine que recuperará os segredos do Secrets Manager e os atualizará no projeto.
Até aí tudo bem, mas ainda há um problema: como seu aplicativo saberá quando atualizar o segredo? A menos que haja alguma maneira de o aplicativo ser notificado quando os segredos forem alternados no Secrets Manager. Nesse cenário, você pode usar Notificações de Eventos para enviar notificações ao seu aplicativo sempre que o segredo for alternado no Secrets Manager. Quando o aplicativo for notificado, ele poderá fazer a atualização.
É isso que faremos, utilizaremos esses diversos serviços e automatizaremos nosso processo secreto de renovação. Portanto, você, como usuário, não precisa atualizar manualmente os segredos e evitar interrupções em seus aplicativos devido a certificados expirados
Vamos mergulhar de cabeça
Clone o repositório e entre no diretório “app-n-event-notification”. Você teria que criar uma chave de API em sua conta do IBM Cloud. Você teria que inserir a chave API no script. Você deve efetuar login na IBM Cloud e selecionar o projeto do Code Engine no qual deseja trabalhar. Depois disso execute o script de execução e é isso que acontecerá após a execução.
O script de execução irá:
Crie uma instância no Secrets Manager e Event Notifications Crie um segredo no Secrets Manager Crie um aplicativo Code Engine (o código já é fornecido) Crie o mesmo segredo no projeto Code Engine Crie fontes, tópicos, destinos necessários, etc., em Event Notifications Bind todos esses componentes juntos Rotacione os segredos no Secrets Manager Por fim, verificaremos os logs dos aplicativos para verificar se o segredo foi atualizado no Code Engine Project
Indo mais fundo: desvendando o processo
Aqui está uma arquitetura que o ajudará a visualizar os componentes com os quais estamos trabalhando.
Ao executar o script de execução nas amostras, ele cria a instância de notificações de eventos e a instância do Secrets Manager do plano Lite em sua conta do IBM Cloud. Criamos certificados personalizados usando comandos openssl e armazenamos em um diretório temporário. Um segredo é criado no Secret Manager e preenchido com este certificado e chave. Componentes necessários como tópicos, fontes, destinos e assinaturas são criados na instância de notificação de eventos. Um aplicativo Code Engine é construído usando código-fonte local e um segredo do Code Engine também é criado contendo o mesmo segredo (certificado e chave). Tanto o aplicativo quanto o segredo residirão no mesmo projeto selecionado. Por fim, alternamos o segredo no Secrets Manager com um novo certificado.
Quando o segredo for alternado, seu Secrets Manager atuará como uma fonte e enviará uma carga útil de notificação da estrutura JSON para o Tópico de Notificação de Evento. O Tópico terá um filtro que é configurado de forma que irá extrair os dados da notificação e verificar se aquele determinado certificado foi rotacionado. Se, e somente se, esse certificado específico tiver sido alternado, ele poderá passar para o tópico. Haveria um destino criado com o URL do aplicativo. Uma assinatura seria feita entre o tema e o destino. Quando a notificação chegar ao tópico, a Notificação de Evento invocará o Aplicativo Code Engine enviando uma solicitação POST para ele com os dados sendo a carga útil da notificação. O aplicativo está configurado de forma que irá recuperar o segredo do Secrets Manager e depois atualizará o segredo do mecanismo de código com o segredo recuperado.
Uma palavra de cautela
Como vimos, a Notificação de Evento invocará nosso aplicativo enviando uma solicitação POST para ele com a notificação. Mas há uma ressalva aqui: há um tempo limite de resposta das Notificações de Eventos que é de 60 segundos. Para saber mais sobre isso consulte a documentação da política de novas tentativas.
Simplificando, o aplicativo deve ser ampliado e processar a resposta (ou seja, recuperar o segredo do Secrets Manager e atualizá-lo no projeto) em 60 segundos. Se você considerar executar uma carga de trabalho mais longa, poderá usar o trabalho do Code Engine para o mesmo. Consulte esta documentação para saber mais sobre os trabalhos do Code Engine.
Adeus
Aprendemos e criamos uma ferramenta de automação para renovação de certificados. Se você tiver certificados de fornecedores terceirizados, poderá consultar esta documentação sobre como conectar autoridades de certificação terceirizadas ao Secrets Manager.
Saiba mais sobre o IBM Cloud Code Engine