
Empresa Amazon sobre o lançamento final — uma distribuição especializada para executar contêineres e gerenciá-los de forma eficiente.
Bottlerocket (aliás, este é o nome dado a pequenos foguetes caseiros com pólvora) não é o primeiro SO para contêineres, mas é bem provável que ganhe ampla adoção graças à integração padrão com os serviços da AWS. Embora o sistema seja voltado para a nuvem da Amazon, o código-fonte aberto permite que ele seja compilado em qualquer lugar: localmente em um servidor, em um Raspberry Pi, em qualquer nuvem concorrente e até mesmo em um ambiente sem contêineres.
É uma substituição bastante digna da distribuição CoreOS, que foi descontinuada pela Red Hat.
De fato, a unidade da Amazon Web Services já possui o Amazon Linux, que recentemente lançou sua segunda versão: é uma distribuição de uso geral que pode ser executada em contêineres Docker ou com hipervisores Linux KVM, Microsoft Hyper-V e VMware ESXi. Ela foi otimizada para funcionar na nuvem da AWS, mas com o lançamento do Bottlerocket, todos são aconselhados a fazer upgrade para o novo sistema, que é mais seguro, moderno e consome menos recursos.
A AWS anunciou o Bottlerocket . A empresa imediatamente reconheceu que este não é o primeiro "Linux para contêineres", mencionando como fontes de inspiração o CoreOS, Rancher OS e Project Atomic. Os desenvolvedores afirmaram que o sistema operacional é "resultado das lições que aprendemos ao longo de muito tempo operando serviços em escala na Amazon, e considerando a experiência que adquirimos nos últimos seis anos sobre como executar contêineres."
Minimalismo extremo
O Linux é limpo de tudo que não é necessário para executar contêineres. Esse design, segundo a empresa, reduz a superfície de ataque.
Isso significa que menos pacotes são instalados no sistema básico, o que simplifica o suporte e a atualização do SO, além de diminuir a probabilidade de problemas devido a dependências e reduzir o uso de recursos. Basicamente, tudo aqui funciona dentro de contêineres separados, e o sistema básico é praticamente nu.
A Amazon também removeu todas as shells e interpretadores, eliminando o risco de seu uso ou de elevação acidental de privilégios pelos usuários. Na imagem base, por questões de minimalismo e segurança, não há shell, servidor SSH e linguagens interpretadas como Python. As ferramentas para administradores foram transferidas para um contêiner de serviço separado, que está desativado por padrão.
O gerenciamento do sistema é realizado de duas maneiras: através da API e da orquestração.
Em vez de um gerenciador de pacotes que atualiza partes específicas do software, o Bottlerocket carrega uma imagem completa do sistema de arquivos e reinicia para ela. Em caso de falha na inicialização, ele reverte automaticamente, e uma falha na carga de trabalho pode iniciar a reversão manualmente (comando pela API).
Framework (The Update Framework) carrega atualizações baseadas em imagens em partições alternativas ou 'desmontadas'. São alocados dois partições de disco para o sistema, uma contendo o sistema ativo e a outra copiando a atualização. A partição raiz é montada em modo somente leitura, enquanto a partição /etc é montada com o sistema de arquivos na memória e restaura o estado original após a reinicialização. A modificação direta dos arquivos de configuração em /etc não é suportada: para salvar as configurações, deve-se usar a API ou transferir funcionalidades para contêineres separados.

Esquema de atualização através da API
Segurança
Os contêineres são criados pelos mecanismos nativos do núcleo do Linux — cgroups, namespaces e seccomp, enquanto que a força de controle de acesso, ou seja, para isolamento adicional, utiliza-se em modo 'enforcing'.
Por padrão, são ativadas políticas para a separação de recursos entre os contêineres e o núcleo. Os binários são protegidos por flags, de modo que usuários ou programas não possam executá-los. E se alguém acessar o sistema de arquivos, o Bottlerocket oferece uma ferramenta para verificar e rastrear quaisquer alterações feitas.
O modo 'boot verificado' é implementado através da função device-mapper-verity (), que verifica a integridade da partição raiz durante a inicialização. A AWS descreve o dm-verity como "uma função do kernel Linux que fornece verificação de integridade para evitar a execução de malware no sistema operacional, como a reescrita do software de sistema base."
Também há um filtro no sistema (BPF estendido, ), que permite substituir módulos do kernel por programas BPF mais seguros para operações sistêmicas de baixo nível.
Modelo de execução
Definido pelo usuário
Compilação
Segurança
Modo de falha
Acesso a recursos
Usuário
tarefa
sim
qualquer
permissões de usuários
interrupção da execução
chamada de sistema, falha
Kernel
tarefa
não
estática
não
pânico do kernel
direto
BPF
evento
sim
JIT, CO-RE
verificação, JIT
mensagem de erro
ajudantes limitados
A diferença entre o BPF e o código de nível de usuário ou kernel comum,
a AWS afirmou que Bottlerocket "aplica um modelo operacional que aumenta ainda mais a segurança, impedindo a conexão a servidores de produção com privilégios de administrador" e "é adequado para grandes sistemas distribuídos, onde o controle sobre cada host individual é limitado."
Para os administradores de sistema, foi previsto um contêiner de administrador. Mas a AWS não acredita que o administrador precise trabalhar frequentemente dentro do Bottlerocket: "O ato de entrar em uma instância do Bottlerocket é destinado a operações raras: depuração avançada e resolução de problemas", - os desenvolvedores.
A linguagem Rust
As ferramentas do sistema operacional sobre o kernel são principalmente escritas em Rust. Esta linguagem, por sua natureza, , além de .
Durante a construção, são aplicadas as flags --enable-default-pie e --enable-default-ssp para habilitar a randomização do espaço de endereço de executáveis (, PIE) e proteção contra estouro de pilha.
Para pacotes em C/C++, são adicionais as flags -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS e -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 em relação a sistemas operacionais de contêineres semelhantes é que a Amazon otimizou o Bottlerocket para operar na AWS e integrar-se a outros serviços da AWS.
O orquestrador de containers mais popular é o Kubernetes, por isso a AWS implementou a integração com seu próprio Enterprise Kubernetes Service (EKS). As ferramentas de orquestração vêm em um container de gerenciamento separado. , que vem ativado por padrão e é gerenciado através da API e do AWS SSM Agent.
Será interessante ver se o Bottlerocket decola, considerando o fracasso de algumas iniciativas semelhantes no passado. Por exemplo, o PhotonOS da VMware acabou sendo descontinuado, e a RedHat adquiriu a CoreOS e , que era considerado um pioneiro nesta área.
A integração do Bottlerocket aos serviços da AWS torna este sistema único em seu tipo. É possivelmente a principal razão pela qual alguns usuários podem preferir o Bottlerocket a outras distribuições, como CoreOS ou Alpine. O sistema foi projetado desde o início para trabalhar com EKS e ECS, mas devemos reiterar que isso não é obrigatório. Primeiro, o Bottlerocket pode ser e usado, por exemplo, como uma solução hospedada. Em segundo lugar, usuários de EKS e ECS ainda manterão a opção de escolher o sistema operacional.
O código fonte do Bottlerocket foi publicado no GitHub sob a licença Apache 2.0. Os desenvolvedores já .
Em nome da publicidade
VDSina oferece . Qualquer sistema operacional pode ser instalado, inclusive a partir da sua própria imagem. Cada servidor está conectado a um canal de internet de 500 Megabits e protegido gratuitamente contra ataques DDoS!
Fonte: habr.com
