GitOps para Azure Kubernetes Service

Kubernetes Service
GitHub

As operações das empresas empresariais devem seguir muitos requisitos regulamentares, regulamentos de privacidade de dados e normas de segurança. A segurança deve seguir o princípio do acesso menos privilegiado. As auditorias têm de saber quem mudou o quê e quando em todos os sistemas de produção.

As organizações que usam kubernetes para executar as suas cargas de trabalho de aplicação têm de seguir estes requisitos ao assegurar os seus clusters. Kubernetes não é seguro por padrão, mas os operadores podem usar as suas funcionalidades para torná-lo seguro.

O GitOps é um quadro operacional para a gestão de clusters kubernetes e entrega de aplicações. O GitOps aplica práticas de desenvolvimento como controlo de versão, colaboração, conformidade e integração contínua/implementação contínua (CI/CD) à automatização de infraestruturas.

Kubernetes descreve tudo, desde o estado do cluster até implementações de aplicações declarativamente com código. Em GitOps, a infraestrutura como código (IaC) utiliza código para declarar o estado desejado de componentes de infraestrutura como máquinas virtuais (VMs), redes e firewalls. Este código é controlado e auditável.

GitOps para Kubernetes coloca a infraestrutura de cluster desejada estado sob controlo de versão. Um componente dentro do cluster sincroniza continuamente o código. Em vez de ter acesso direto ao cluster, a maioria das operações acontecem através de alterações de código que podem ser revistas e auditadas. Esta abordagem apoia o princípio de segurança do acesso menos privilegiado.

O GitOps não só aplica políticas dentro do cluster, como também ajuda a apoiar a segurança, fornecendo feedback para as alterações políticas propostas. O feedback precoce é mais conveniente para os desenvolvedores e reduz o risco e os custos.

Este artigo descreve uma solução para a utilização de GitOps com um cluster Azure Kubernetes Services (AKS). Esta solução fornece capacidades de auditoria completas, aplicação de políticas e feedback precoce.

Potenciais casos de utilização

Esta solução beneficia qualquer organização que queira as vantagens de implementar aplicações e infraestruturas como código, com um rasto de auditoria de cada mudança. A solução é especialmente adequada para indústrias altamente regulamentadas, como seguros, banca e finanças.

Arquitetura

Diagram of GitOps for AKS, with GitHub source control, Flux GitOps controller, Syncier Security Tower GitOps control kit, and Gatekeeper admission controller.

Transfira um ficheiro do Visio desta arquitetura.

Esta solução segue uma abordagem forte do GitOps.

  1. O único ponto da verdade é o repositório GitHub que contém as configurações de cluster AKS a provisionadas. O repositório armazena todos os manifestos de aplicação da AKS e os estados desejados pela infraestrutura de cluster. Cada mudança no cluster acontece sob controlo de versão. GitHub funcionalidade:

    • Garante a revisão para alterações.
    • Previne alterações não intencionais ou não autorizadas.
    • Aplica os controlos de qualidade desejados.
  2. O Fluxo é o operador e controlador gitOps, e é o único componente que pode fazer alterações no cluster. O fluxo puxa as alterações de estado desejadas do GitHub e sincroniza-as em AKS. Fluxo:

    • Puxa as mudanças desejadas a partir de GitHub.
    • Deteta qualquer deriva de configuração.
    • Reconcilia o estado no aglomerado de Kubernetes.
    • Gere o Gatekeeper e as aplicações.
    • Atualizações si mesmo.
  3. O Gatekeeper (Open Policy Agent) Gatekeeper aplica políticas com um webhook de validação de admissão. Gatekeeper valida alterações de configuração de cluster contra políticas previstas, e aplica as alterações apenas se cumprirem as políticas.

  4. Syncier Security Tower é um kit de controlo GitOps que fornece uma visão geral de todos os clusters AKS e ajuda a gerir políticas. Torre de Segurança Sincronizada:

    • Monta todas as imagens do cluster numa visão geral que mostra quais versões são implementadas e identifica imagens desatualizadas.
    • Fornece feedback sobre violações de políticas através do feedback do pull request (PR) antes de serem aplicadas alterações.
    • Introduz a aceitação do risco sempre que as políticas não podem ser aplicadas por boas razões.
    • Fornece políticas de segurança ao Gatekeeper da OPA.

Componentes

Esta solução utiliza os seguintes componentes:

  • Azure Kubernetes Service (AKS) é um serviço Kubernetes altamente disponível, seguro e totalmente gerido em Azure. Em AKS, a Azure gere o servidor API de Kubernetes, e os proprietários e operadores de clusters acedem e gerem os nós e piscinas de nó kubernetes.

  • GitHub é uma plataforma de hospedagem de códigos para controlo de versão e colaboração. GitHub oferece controlo de versão distribuído pela Git, gestão de código fonte e outras funcionalidades.

  • O Fluxo é uma coleção de ferramentas de código aberto para manter os clusters kubernetes sincronizados com fontes de configuração como repositórios de Git. O fluxo automatiza as atualizações de configuração quando há um novo código para implementar.

  • O OPA Gatekeeper é um projeto que integra o controlador de admissão OPA de código aberto com Kubernetes. Os controladores de admissão kubernetes aplicam políticas em objetos durante a criação, atualização e eliminação de operações, e são fundamentais para a aplicação da política de Kubernetes.

  • A Syncier Security Tower é uma ferramenta que a Syncier desenvolveu e disponibiliza publicamente para ajudar a superar os desafios de segurança e conformidade do GitOps. Para ajudar a garantir que apenas imagens fidedignas são executadas no cluster, a Syncier Security Tower vem com um conjunto de políticas de boas práticas que são agrupadas por padrões de segurança bem conhecidos.

Alternativas

Nesta arquitetura, o Flux é o operador de GitOps que concilia o estado de cluster desejado no repositório de Git com os recursos implantados no cluster AKS. Uma alternativa ao Flux é o projeto argo CD de código aberto, uma ferramenta de entrega contínua declarativa, GitOps para Kubernetes. Tanto o ARGO CD como o Flux são amplamente utilizados, e estão listados como projetos de incubação da Cloud Native Computing Foundation (CNCF).

Considerações

As seguintes considerações aplicam-se a esta solução.

Escalabilidade

GitOps tem muitos benefícios, mas à medida que as paisagens de cluster crescem, o mesmo acontece com o número de repositórios. Esta solução ajuda a enfrentar desafios como:

  • Mantendo uma visão geral de todos os ambientes e aglomerados.
  • A seguir imagens críticas.
  • Verificar se certas políticas estão ativas em todos os clusters.

Segurança

Esta solução proporciona vários benefícios relacionados com a segurança. Com a abordagem GitOps, desenvolvedores ou administradores individuais não acedem diretamente aos clusters Kubernetes para aplicar alterações ou atualizações. Em vez disso, os utilizadores empurram alterações para um repositório git, e o operador de GitOps, Flux neste caso, lê-os e aplica-os ao cluster. Esta abordagem segue as melhores práticas de segurança de menor privilégio ao não dar às equipas de DevOps que escrevam permissões para a API de Kubernetes. Em cenários de diagnóstico ou resolução de problemas, pode conceder permissões de cluster por um período limitado numa base casuística.

Para garantir que os clusters AKS estão a usar as melhores práticas de segurança, esta solução aplica as políticas de OPA com um webhook de admissão validado. A Syncier Security Tower inclui um conjunto de políticas baseadas nos padrões de segurança de Kubernetes, que podes prever num âmbito de cluster. A Syncier Security Tower fornece feedback precoce através de revisão de relações públicas se os manifestos propostos de Kubernetes violarem as políticas.

Para além da tarefa de criar permissões de repositório, considere a implementação das seguintes medidas de segurança nos repositórios de Git que sincronizam com os clusters AKS:

  • Proteção do ramo: Proteja os ramos que representam o estado dos aglomerados de Kubernetes de terem mudanças empurradas diretamente para eles. Exija que cada alteração seja proposta por um RP que seja revisto por pelo menos uma outra pessoa. Utilize também PRs para fazer verificações automáticas. Por exemplo, a Syncier Security Tower valida os manifestos de Kubernetes que um PR cria ou modifica. A Syncier Security Tower verifica as alterações contra as políticas a provisionadas antes de poderem ser sincronizadas no cluster.

  • Revisão de Relações Públicas: Exigir que os PRs tenham pelo menos um revisor, para impor o princípio dos quatro olhos. Também pode usar a funcionalidade GitHub de código para definir indivíduos ou equipas responsáveis pela revisão de ficheiros específicos num repositório.

  • História imutável: Só permita novos compromissos para além das alterações existentes. A história imutável é especialmente importante para fins de auditoria.

  • Outras medidas de segurança: Exija que os utilizadores GitHub ativem a autenticação de dois fatores. Além disso, permita apenas compromissos assinados, que não podem ser alterados após o facto.

Operações

GitOps pode aumentar a produtividade dos DevOps. Uma das funcionalidades mais úteis é a capacidade de reverter rapidamente as mudanças que se estão a comportar de forma inesperada, apenas através da realização de operações de Git. O gráfico de compromisso ainda contém todos os compromissos, para que possa ajudar na análise pós-morte.

As equipas do GitOps geralmente gerem vários ambientes para a mesma aplicação. É típico ter várias fases de uma aplicação implantada em diferentes clusters de Kubernetes ou espaços de nome. O repositório git, que é a única fonte da verdade, mostra quais versões de aplicações são atualmente implantadas num cluster.

A Syncier Security Tower extrai esta informação do repositório e exibe-a de forma amigável. Uma visão geral mostra quais imagens e versões de contentores são implantadas em cada ambiente.

As equipas de DevOps podem usar funcionalidades avançadas da Syncier Security Tower para obter informações sobre quem mudou o que e quando numa aplicação, ou navegar e filtrar com base em fatores como tipo de alteração ou tipo de recurso. A Syncier Security Tower fornece um centro de controlo para ativar políticas e comparar o estado de conformidade com diferentes clusters.

Implementar este cenário

Tome as seguintes medidas para prever uma configuração GitOps para AKS:

  1. Crie um cluster AKS seguindo o guia de arranque rápido através de Ligação para o cluster. Pare antes de executar a aplicação, e não coloque nada no cluster ainda.

  2. Instale o Fluxo CLI seguindo as instruções de instalação do Fluxo.

  3. Executar os seguintes comandos numa concha bash. Desaprote as variáveis GITHUB_TOKEN, GITHUB_USERe GITHUB_REPO de acordo com o seu ambiente.

    export GITHUB_TOKEN="<your token>"
    export GITHUB_USER="<your username>"
    export GITHUB_REPO="<your repository>"
    
    flux bootstrap github \
       --owner=$GITHUB_USER \
       --repository=$GITHUB_REPO \
       --branch=main \
       --path=./cluster \
       --personal
    
    git clone https://github.com/$GITHUB_USER/$GITHUB_REPO
    cd $GITHUB_REPO
    
    mkdir -p .securitytower
    cat << EOF > .securitytower/cluster.yaml
    apiVersion: securitytower.io/v1alpha1
    kind: Cluster
    metadata:
       name: $GITHUB_REPO
    spec:
       policies:
          path: /policies
    EOF
    
    flux create kustomization policies \
       --source=flux-system \
       --path="./policies" \
       --prune=true \
       --validation=none \
       --interval=1m \
       --export > ./cluster/policies.yaml
    
    git add .
    git commit -m "Create Syncier Security Tower cluster config and add policy Kustomization"
    git push
    
    kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.4/deploy/gatekeeper.yaml
    
  4. Instale o Gatekeeper seguindo o guia de instalação do Gatekeeper. Para configurar corretamente o Gatekeeper, consulte as políticas de execução com o Gatekeeper da OPA.

  5. Instale a Syncier Security Tower no seu repositório a partir do mercado GitHub.

  6. Para configurar todos os ficheiros de configuração necessários, siga o guia Introdução da Torre de Segurança Syncier.

Agora forneceste com sucesso uma configuração de GitOps em execução. A partir daqui, pode:

  • Adicione mais agrupamentos.
  • Use a Syncier Security Tower para obter uma visão geral das imagens que os seus clusters estão a usar.
  • Disposição de políticas com a Syncier Security Tower para cumprir os seus padrões de segurança.

Preços

  • Utilize a calculadora de preços do Azure para prever os custos.

  • A AKS oferece gestão gratuita de clusters. Os custos são limitados aos recursos de computação, armazenamento e networking que a AKS utiliza para acolher nós. Consulte a Azure Virtual Machine ou Azure Container Instances preços para rever detalhes de preços específicos para cada serviço de computação.

  • GitHub oferece um serviço gratuito, mas para usar funcionalidades avançadas relacionadas com a segurança, como os proprietários de códigos ou revisores necessários, precisa do plano da Equipa. Para mais informações, consulte a página de preços GitHub.

Passos seguintes