12 diretrizes para aprimorar a segurança e o desenvolvimento de operações.

As empresas de software como serviço (SaaS) se destacam em termos de confiabilidade, capacidade de escalonamento, segurança e satisfação do cliente. Abaixo estão 12 princípios que os líderes de devsecops podem adotar dessas empresas SaaS.

Uma vez mudei de função de CTO de uma empresa de SaaS para me tornar CIO de uma unidade de negócios em uma das empresas Fortune 100. Meu objetivo era introduzir processos de desenvolvimento de startup, tecnologia e cultura na organização. Os líderes reconheceram a necessidade de criar aplicativos focados no cliente, recursos analíticos inovadores e fluxos de trabalho mais automatizados.
Vamos dizer que nós, juntamente com minha equipe, ensinamos bastante sobre o desenvolvimento ágil e arquiteturas claras. No entanto, também tivemos muito a descobrir sobre como implementar aplicativos altamente confiáveis, eficientes e seguros em nossos data centers. Isso tudo aconteceu antes da era da computação em nuvem e devsecops.
Atualmente, embora muitas organizações tenham recursos avançados para desenvolvimento de software e devops, as empresas de software como serviço (SaaS) adquiriram uma grande expertise em aplicativos de grande escala, conseguindo lidar com uma variedade de necessidades dos clientes e detectando problemas de desempenho e segurança antes que afetem os usuários.
“Os CTOs reconhecem a importância de um produto que seja robusto não apenas em termos funcionais, mas também que seja consistentemente disponível, rápido e seguro contra ameaças. Eles podem orientar equipes corporativas a alcançar essa combinação ideal de confiabilidade, desempenho e segurança, destacando a necessidade de equilíbrio entre esses três aspectos e utilizando abordagens iterativas.”
Neste artigo, são apresentados 12 princípios sugeridos por líderes de tecnologia SaaS que gestores de TI empresarial podem utilizar em devsecops. Esses princípios foram organizados em três categorias.
- Implementação de práticas operacionais Shift-left em requisitos e desenvolvimento, iniciando com a incorporação de uma abordagem centrada no cliente.
- Reconheça que as equipes de devsecops precisam aumentar a automação dos testes, indo além dos testes de unidade, a fim de assegurar a confiabilidade e o desempenho do aplicativo, principalmente em situações de uso intenso e uma variedade de tipos de usuários.
- Melhorar a eficiência e a segurança ao estabelecer metas de desempenho (SLOs) e utilizar ferramentas para supervisionar, monitorar e automatizar serviços na nuvem.
1. Tenha uma postura de prioridade ao cliente.
É essencial cultivar uma mentalidade focada no cliente e estar atento às suas necessidades, a fim de manter os clientes satisfeitos e impulsionar o progresso. Mesmo que muitas empresas se dediquem a criar soluções direcionadas aos clientes, as equipes de devsecops devem também considerar seus colegas como clientes ao desenvolver ferramentas internas.
Uma abordagem centrada no cliente envolve dar prioridade à identificação e resolução rápida de problemas dos clientes, segundo Claire Vo, diretor de produto da LaunchDarkly. Engenheiros devem ter o mesmo foco no cliente que em produto, design, vendas e suporte, interagindo diretamente com os clientes, usando o produto como eles e mantendo altos padrões em nome dos clientes. De acordo com Vo, a proximidade com os clientes está fortemente ligada a culturas empresariais de alta qualidade e resilientes.
Sugestão: Equipes de Devsecops devem marcar encontros frequentes com usuários finais para acompanhar sua interação com os aplicativos e receber feedback sobre possíveis melhorias no desempenho dos mesmos.
Estabelecer uma ligação entre o controle de versão e as histórias de usuário ágeis.
Muitas empresas implementaram controle de versão, no entanto, David Brooks, SVP de evangelismo na Copado, observa que os desenvolvedores costumam focar excessivamente na administração de ramos em seus repositórios. Ele destaca que o desenvolvimento atual é ágil e que muitas ferramentas devops lidam com mudanças com base nas histórias de usuários.
Brooks afirma que seguir a evolução das mudanças, a partir das histórias do usuário, facilita às equipes de desenvolvimento ágil focar em entregar valor, promover o desenvolvimento orientado para testes e viabilizar a resolução automatizada de conflitos de merge.
Recomendação: As equipes de devsecops devem não só integrar processos entre ferramentas ágeis e controle de versão, mas também adotar a uniformização de pipelines CI/CD, implementar funcionalidades gradativamente e utilizar estratégias de liberação de canário.
Introduzir novos recursos para grupos líderes.
Investir em automação no desenvolvimento de DevSecOps oferece a possibilidade de liberar recursos de forma flexível para grupos de usuários menores e realizar testes A/B em novas funcionalidades. Além de facilitar a implementação contínua, a automação também permite validar recursos antes de investir demasiadamente e obter feedback dos usuários durante o desenvolvimento.
Novas funcionalidades alfas estão sendo experimentadas rapidamente e de forma aberta para obter opiniões dos clientes, afirma Elliot Wood, CTO e co-fundador da CallRail. As equipes têm a capacidade de agir com rapidez ao enviar pequenas alterações para grupos específicos de clientes, reduzindo assim o risco de cada experimento realizado.
Recomenda-se realizar os testes alfa e beta, sendo o teste alfa interno na organização e o teste beta focado no ambiente do usuário, uma prática antiga no desenvolvimento de software. O Devsecops introduz métodos automatizados e escaláveis para operacionalizar as operações de tecnologia. No entanto, o segredo para alcançar sucesso nos programas alfa e beta é recrutar participantes, comunicar objetivos, obter feedback útil e promover uma colaboração gratificante.
Necessita de segurança integrada desde o início.
Embora muitas empresas possuam programas sólidos de segurança da informação, ainda é difícil integrar a segurança por design no desenvolvimento de software. Recomenda-se práticas como a automatização de testes de penetração, a digitalização de código nos pipelines CI/CD e a proteção de APIs contra diferentes vulnerabilidades, como injeções, falhas de autenticação, problemas de cross-site, vazamentos de API e controles de acesso deficientes.
Steve Touw, CTO da Immuta, menciona que ao incorporar medidas de segurança desde o início do desenvolvimento de produtos, a empresa observou uma significativa diminuição na manutenção e gestão do back-end em termos de vulnerabilidades.
Sugestão: É importante que os CIOs, CISOs e gerentes de entrega estabeleçam de forma precisa os requisitos essenciais relacionados às práticas de segurança, testes e métricas ao implementar automatizações para os processos de produção.
O teste de reconhecimento de unidade é inadequado.
Você pode realizar uma série de testes no motor do seu carro, como verificar a pressão dos pneus e o nível do óleo. No entanto, o veículo atende às suas expectativas em termos de desempenho em curvas, colisões e diferentes condições de estrada?
O mesmo se aplica às aplicações de software, e embora os testes de unidade sejam úteis para validar componentes e interfaces, não são eficazes para avaliar a funcionalidade completa ou a experiência do usuário.
Segundo Peter McKee, chefe de relações de desenvolvedor e comunidade da Sonar, os desenvolvedores que adotam uma abordagem à esquerda costumam dar prioridade aos testes de unidade para assegurar o funcionamento correto de recursos e funcionalidades. Porém, depender exclusivamente desses testes pode resultar em lacunas na garantia de qualidade, o que possibilita a passagem despercebida de bugs. Isso acaba comprometendo tanto a qualidade quanto a segurança do software após a sua implementação.
Paráfrase: É importante que equipes de desenvolvimento ágil atribuam responsabilidade, desenvolvam habilidades e invistam tempo na garantia de testes funcionais robustos, pois diversas ferramentas estão disponíveis para automatizar os testes de experiência do usuário front-end.
Automatize a realização de testes conduzidos por especialistas no assunto.
Uma ênfase em testes mais práticos é tão importante quanto a criação de casos de teste. Os engenheiros de qualidade são capazes de encontrar condições extremas e testar erros, porém é essencial que recebam orientações dos usuários finais para compreender seus objetivos, processos e jornadas de forma mais clara.
Brooks, da empresa Copado, afirma que os desenvolvedores se concentram na entrega de código funcional, mas para garantir a robustez do software em diferentes configurações de cliente, especialistas em assuntos devem conduzir testes que representem o uso real dos recursos pelos usuários. Uma abordagem eficaz é permitir que esses especialistas realizem testes exploratórios, registrando os passos com uma ferramenta e, posteriormente, criando testes automatizados.
Sugestão: Utilize os grupos alfa e beta existentes para participar da comunidade de testes de aplicativos, porém não conte com os testadores para repetir os testes de aceitação do usuário. Empregue ferramentas para registrar seus métodos de teste, automatizar os testes cruciais, criar uma abordagem de teste contínuo e utilizar dados sintéticos para ampliar os padrões de teste.
Verificar o código para garantir segurança e qualidade.
A utilização de assistentes de programação e ferramentas de geração de código com inteligência artificial tem destacado a necessidade de realizar revisões minuciosas no código em busca de vulnerabilidades e problemas evidentes que poderiam se transformar em ônus técnico no futuro. Além disso, é fundamental identificar questões de qualidade no código, como a adequação da documentação, tratamento de erros, registro e padrões de nomenclatura, antes que o código seja implantado em produção.
De acordo com McKee da Sonar, é importante que os desenvolvedores incorporem a análise de código estático em seu processo de desenvolvimento para fortalecer as iniciativas de garantia de qualidade. A análise estática automatizada avalia a estrutura interna de um aplicativo, o que complementa os testes de unidade ao revelar possíveis problemas adicionais. Ao combinar essas duas abordagens, os desenvolvedores conseguem monitorar proativamente a qualidade do código ao longo de todo o ciclo de vida do projeto, detectar e corrigir rapidamente falhas, e aprimorar a confiabilidade e a segurança do software de forma global.
Sugestão: É crucial para as empresas a redução da dívida técnica, por isso é fundamental buscar ferramentas que automatizem a segurança e qualidade do código, e incorporar essas etapas no processo de integração contínua/distribuição contínua é imprescindível.
Definir critérios de desempenho não relacionados às operações.
Para manter um equilíbrio entre desempenho, confiabilidade e segurança no desenvolvimento de sistemas, é fundamental definir requisitos que descrevam as condições operacionais aceitáveis. Muitas vezes, esses requisitos são chamados de não funcionais e podem ser incorporados às histórias de usuários em metodologias ágeis como critérios para aceitação. Além disso, os requisitos não funcionais auxiliam na escolha e no gerenciamento dos componentes de infraestrutura.
David Coffey, VP de gestão de produtos em redes de software e diretor de produtos NS1 da IBM, destaca a importância dos requisitos operacionais não funcionais, ressaltando que eles são tão essenciais quanto os requisitos funcionais. Ele enfatiza que todos os elementos em uma infraestrutura tecnológica para serviços em nuvem devem ser considerados, incluindo aspectos como serviços de DNS e conectividade de rede, que podem impactar a disponibilidade e a escalabilidade de um serviço em nuvem.
Sugestão: Arquitetos, operações e especialistas em segurança devem criar diretrizes relacionadas aos requisitos não funcionais e critérios de aceitação que as equipes de desenvolvimento ágeis possam consultar com base em suas histórias de usuários.
Canal de SLOs e alertas prioritários de grande importância.
Uma maneira ultrapassada de definir as expectativas de desempenho de um aplicativo é estabelecer acordos de nível de serviço alvo (SLAs) com base em métricas operacionais, como por exemplo, 99,9% de tempo de atividade. Uma abordagem mais atualizada envolve a definição de SLOs e limites de erro, que determinam quando as equipes de devsecops devem focar em melhorias operacionais.
“Se os engenheiros abordam a melhoria de desempenho sem considerar adequadamente a importância dos SLOs relacionados ao lucro e à satisfação do usuário, estaremos limitando o potencial de sucesso de uma plataforma de observabilidade”, explica Asaf Yigal, co-fundador e VP de produto na Logz.io. Ele destaca que os CTOs têm a responsabilidade de não apenas obter resultados significativos da equipe de engenharia, mas também de reduzir a pressão sobre os engenheiros, estabelecendo prioridades de alerta que destacam o papel crucial que desempenham no êxito do negócio.
Paráfrase: É aconselhável que os gestores de produto participem na elaboração dos SLOs e utilizem segmentos de clientes, diferentes etapas da jornada e momentos críticos para determinar quando as interrupções ou a baixa performance têm repercussões mais relevantes no negócio.
10. Aplicar a observação e monitoramento dos fluxos de dados.
Hoje em dia, a maioria dos aplicativos utiliza fluxos de dados para integrar diferentes fontes e transferir informações dentro e fora da aplicação. A eficácia dos processos pode ser afetada e existem possibilidades de erro ao lidar com atrasos nos fluxos de dados e questões de qualidade das informações.
Segundo Ashwin Rajeeva, cofundador e CTO da Acceldata, a prática de realizar verificações de confiabilidade de dados à esquerda possibilita validar a qualidade e integridade dos dados desde a sua origem, prevenindo custos elevados. O acompanhamento constante e a gestão de incidentes ajudam a reagir de forma proativa a possíveis problemas com os dados, assegurando um fluxo contínuo e confiável ao longo de toda a cadeia de fornecimento de dados.
Sugestão: Rajeeva propõe a adoção de um sistema de monitoramento completo em todas as etapas da cadeia de suprimentos de dados, utilizando controles e alertas automatizados para detectar possíveis problemas de desempenho e irregularidades na qualidade dos dados.
Impedir configurações de administrador e acesso de fora.
As empresas que oferecem software como serviço restringem o acesso de administradores às suas plataformas para proteger as informações dos clientes e garantir a disponibilidade do aplicativo. Isso também se aplica às empresas em geral, sendo essencial que os profissionais de segurança analisem as funções administrativas dos sistemas internos, os privilégios de acesso e os mecanismos de auditoria, principalmente quando envolvem dados sensíveis.
“Segundo Igor Jablokov, fundador e CEO da Pryon, é importante implementar controles de administração dupla em funções críticas dos aplicativos para evitar erros que afetem a disponibilidade da plataforma.”
Jablokov sugere adotar outros princípios básicos, como a utilização de autenticação multifatorial e a restrição do acesso externo não essencial.
Recomenda-se que os profissionais de segurança da informação analisem as vulnerabilidades mais atuais, como aquelas apresentadas no OWASP Top 10 e nos 25 erros de software mais perigosos identificados pela SANS. Essas informações podem ser utilizadas para criar listas de segurança, oferecer treinamento e dar suporte às equipes de devsecops.
Preparar espaços de espera com temperatura elevada.
Empresas que desenvolvem aplicativos precisam assegurar uma infraestrutura de nuvem eficiente, implementando infraestrutura por meio de código, utilizando automação na nuvem para ajustar ambientes, configurando implantações em várias zonas e automatizando a recuperação de falhas. Embora essas sejam práticas comuns para a implementação de aplicativos empresariais, é possível que muitos aplicativos desenvolvidos em setores e departamentos específicos tenham sido implantados sem seguir tais melhores práticas de infraestrutura.
Jablokov de Pryon sugere que é importante ter sua aplicação pronta para ser ativada rapidamente em outro provedor de nuvem, pois, mesmo que os hiperscalers tenham redundância e mecanismos de falha, ainda estão sujeitos a falhas.
Paráfrase: Equipes de Devsecops que criam arquiteturas, plataformas e configurações padrão podem incorporar com mais facilidade práticas de alta disponibilidade em suas infraestruturas padronizadas.
A chave está no equilíbrio.
As diretrizes e práticas recomendadas neste documento são voltadas para equipes de devsecops. Uma das principais dificuldades ao buscar aprimorar a confiabilidade, o desempenho e a segurança de uma aplicação é determinar quais áreas operacionais devem receber investimento prioritário e equilibrar esse esforço com os requisitos funcionais. Equipes de desenvolvimento ágeis que acompanham métricas operacionais, debatem prioridades e monitoram os investimentos feitos têm mais chances de proporcionar experiências e desempenho operacional superiores.