A Amazon anunciou o lançamento final do Bottlerocket , uma distribuição especializada para executar e gerenciar contêineres com eficiência.
Bottlerocket (a propósito, é assim que eles chamam de pequenos foguetes de pólvora) não é o primeiro sistema operacional para contêineres, mas é provável que se espalhe devido à integração padrão com os serviços da AWS. Embora o sistema seja focado na nuvem da Amazon, o código aberto permite que você construa em qualquer lugar: localmente em um servidor, em um Raspberry Pi, em qualquer nuvem concorrente e até mesmo em um ambiente sem contêiner.
É um substituto bastante válido para a distribuição CoreOS que a Red Hat enterrou.
Em geral, a Amazon Web Services já tem o Amazon Linux, que saiu recentemente em sua segunda versão: é uma distribuição de uso geral que pode ser executada em um contêiner Docker ou com hipervisores Linux KVM, Microsoft Hyper-V e VMware ESXi. Ele foi otimizado para ser executado na nuvem AWS, mas com o Bottlerocket, todos são incentivados a atualizar para um novo sistema que seja mais seguro, mais moderno e use menos recursos.
AWS anuncia Bottlerocket em março de 2020... Ela imediatamente reconheceu que este não era o primeiro "Linux para contêineres", citando CoreOS, Rancher OS e Project Atomic como fontes de inspiração. Os desenvolvedores escreveram que o sistema operacional é "o resultado das lições que aprendemos ao longo dos serviços de produção na escala da Amazon e da experiência que ganhamos nos últimos seis anos sobre como executar contêineres".
Minimalismo extremo
O Linux foi retirado de tudo que não é necessário para executar contêineres. Esse projeto, de acordo com a empresa, reduz a superfície de ataque.
Isso significa que menos pacotes são instalados no sistema básico, o que torna mais fácil manter e atualizar o sistema operacional, e também reduz a probabilidade de problemas devido a dependências e reduz o uso de recursos. Basicamente, tudo aqui funciona dentro de contêineres separados, e o sistema básico está praticamente vazio.
A Amazon também removeu todos os shells e intérpretes, eliminando o risco de os usuários os usarem ou escalar privilégios acidentalmente. A imagem base carece de um shell de comando, servidor SSH e linguagens interpretadas como Python para fins de minimalismo e segurança. As ferramentas do administrador foram movidas para um container de serviço separado, que está desabilitado por padrão.
O gerenciamento do sistema é fornecido de duas maneiras: via API e orquestração.
Em vez de um gerenciador de pacotes que atualiza partes individuais do software, o Bottlerocket baixa uma imagem completa do sistema de arquivos e recarrega nela. Se o download falhar, ele será revertido automaticamente e uma falha de carga de trabalho pode acionar um rollback manual (comando via API).
O TUF (The Update Framework) baixa atualizações baseadas em imagens para partições alternativas ou "desmontadas". Duas partições de disco são alocadas para o sistema, uma das quais contém o sistema ativo e a atualização é copiada para a segunda. Nesse caso, a partição raiz é montada no modo somente leitura e a partição
/etcé montada com o sistema de arquivos na RAM tmpfse restaura seu estado original após reiniciar. A modificação direta dos arquivos de configuração /etcnão é suportada: para salvar as configurações, use a API ou mova a funcionalidade para contêineres separados.
Esquema de atualização de API
Segurança
Os contêineres são criados por mecanismos do kernel Linux padrão - cgroups, namespaces e seccomp, e o SELinux é usado no modo " forçado " como um sistema de controle de acesso forçado, ou seja, para isolamento adicional .
Por padrão, as políticas são habilitadas para compartilhar recursos entre contêineres e o kernel. Os binários são protegidos por sinalizadores para evitar que usuários ou programas os executem. E se alguém conseguiu entrar no sistema de arquivos, Bottlerocket oferece uma ferramenta para verificar e rastrear todas as alterações feitas.
O modo de "inicialização verificada" é implementado através da função device-mapper-verity ( dm-verity), que verifica a integridade da partição raiz no momento da inicialização. A AWS descreve o dm-verity como "um recurso do kernel Linux que fornece verificação de integridade para evitar que malware seja executado no sistema operacional, como sobrescrever o software do sistema subjacente".
O sistema também possui um eBPF (BPF estendido, desenvolvido por Alexey Starovoitov ), que permite a substituição dos módulos do kernel por programas BPF mais seguros para operações de sistema de baixo nível.
| Modelo de execução | Usuário definido | Compilação | Segurança | Modo de falha | Acesso a recursos | |
| Do utilizador | tarefa | sim | qualquer | direitos de uso | interromper a execução | chamada de sistema, falha |
| Testemunho | tarefa | não | estático | não | núcleo de pânico | direto |
| BPF | evento | sim | JIT, CO-RE | verificação, JIT | mensagem de erro | ajudantes limitados |
Diferentemente do BPF do código normal no nível do usuário ou no nível do kernel, uma fonte da
AWS afirmou que Bottlerocket “adota um modelo operacional que aumenta ainda mais a segurança ao impedir que privilégios de administrador se conectem a servidores de produção” e “é adequado para grandes sistemas distribuídos onde o controle é limitado. acima de cada hospedeiro individual ".
Para administradores de sistema, um contêiner de administrador é fornecido. Mas a AWS não acha que os administradores muitas vezes terão que trabalhar dentro do Bottlerocket: “O ato de fazer login em uma instância separada do Bottlerocket se destina a operações raras: depuração avançada e solução de problemas”, escrevem os desenvolvedores.
A linguagem Rust
O conjunto de ferramentas do SO no topo do kernel é escrito principalmente em Rust. Essa linguagem, por natureza, reduz as chances de acesso inseguro à memória e também elimina condições de corrida entre threads .
Se os sinalizadores de construção padrão forem aplicados
--enable-default-piee --enable-default-ssppermitir a randomização do espaço de endereço dos arquivos executáveis ( independente da posição do executável , PIE) e proteção contra estouro de pilha.
Para os pacotes para C / C ++ inclui ainda bandeiras
-Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONSe -fstack-clash-protection.
Além de Rust e C / C ++, alguns pacotes são escritos na linguagem Go.
Integração com serviços AWS
A diferença de sistemas operacionais de contêiner semelhantes é que a Amazon otimizou o Bottlerocket para executar na AWS e se integrar a outros serviços da AWS.
O orquestrador de contêineres mais popular é o Kubernetes, portanto, a AWS implementou a integração com seu próprio Enterprise Kubernetes Service (EKS). As ferramentas de orquestração vêm em um container bottlerocket-control-control , que é habilitado por padrão e gerenciado por meio da API e do Agente SSM da AWS.
Será interessante ver se Bottlerocket decolou devido ao fracasso de algumas dessas iniciativas no passado. Por exemplo, o PhotonOS da Vmware fechou, e a RedHat comprou o CoreOS e encerrou um projeto que era considerado um pioneiro no campo.
A integração do Bottlerocket nos serviços da AWS torna este sistema único em sua própria maneira. Esta é talvez a principal razão pela qual alguns usuários podem preferir Bottlerocket a outras distribuições, como CoreOS ou Alpine. O sistema foi originalmente projetado para funcionar com EKS e ECS, mas, novamente, isso não é necessário. Primeiro, Bottlerocket pode ser construído de forma independente e usado, por exemplo, como uma solução hospedada. Em segundo lugar, os usuários de EKS e ECS ainda terão a opção de sistema operacional.
O código-fonte do Bottlerocket é publicado no GitHub sob a licença Apache 2.0. Os desenvolvedores já estão respondendo a relatórios de bugs e solicitações de recursos .
Publicidade
A VDSina oferece VDS com pagamento diário . É possível instalar qualquer sistema operacional, inclusive de sua própria imagem. Cada servidor está conectado a um canal de Internet de 500 Megabits e é protegido contra ataques DDoS gratuitamente!
