Segmentando com segurança os segredos das caixas durante o provisionamento

2

Durante uma implantação totalmente automatizada em hardware físico (usando o pxeboot / preseed / kickstart para instalar e configurar um sistema mínimo de bootstrapping), precisamos implantar certos segredos - como a chave de validação do Chef e uma chave secreta para acessar o aplicativo seguro dados.

Em nossos ambientes de VM, podemos pré-assar imagens com essas já existentes. Quando o nó é implantado, ele já tem os arquivos localmente e eles nunca precisam atravessar a rede, no entanto, para servidores físicos onde estamos construindo diretamente do imagens de netboot não temos a capacidade de fazer isso.

Estou tentando criar uma maneira segura e automatizada de implantar esses segredos em servidores provisionados, de forma que sabemos que eles não podem acabar no lugar errado.

Nosso ambiente de provisionamento tem conhecimento de todos os nossos servidores físicos e se eles foram provisionados ou não - criamos definições de nós em nosso servidor Chef, que incluem o endereço MAC da interface primária usada para PXEBooting e, em seguida, definimos um sinalizador nó, uma vez que foi provisionado. Usamos isso para oferecer apenas arquivos PXEBoot para nós que ainda não foram provisionados e, portanto, podemos especificar em nossas definições de nós o release / os / roles das caixas.

Nossa idéia de trabalho atual é um serviço web muito simples que (via HTTPS) serviria os segredos para os nós que ainda não foram provisionados. No entanto, isso tem vários inconvenientes e problemas que posso ver. Minha principal preocupação é que nossa única proteção é a validação do endereço MAC, e os endereços MAC podem ser falsificados (eu sou strongmente da opinião de que você nunca deve considerar sua rede interna segura, embora seja provavelmente uma discussão diferente).

Nosso atual ambiente de provisionamento é o Ubuntu 12.04 e o 14.04 com o PXEboot / Preseeding em servidores de provisionamento dedicados - embora pudéssemos adaptar outras soluções para o nosso ambiente.

Estou principalmente preocupado com alguns segredos globais que todos os nós também precisam acessar, nosso objetivo final ideal é não ter esses segredos globais e ter segredos por nó, estou atualmente investigating uma ferramenta para realizar isso mas no momento temos que lidar com a configuração atual.

Então, como as pessoas estão distribuindo de forma segura e automaticamente os segredos globais nos ambientes de provisionamento? Quaisquer sugestões ou sugestões de maneiras de fazer isso?

    
por Smudge 21.09.2015 / 12:56

1 resposta

2

Pre-OS-boot não tem muitos smarts vivos além do BMC (o pequeno subsistema da placa-mãe que implementa IPMI / iDRAC / iLO / etc.), mas pode ser o suficiente, dependendo de quanto você quiser para confiar.

Você poderia escrever uma chave para ele (pela rede usando um canal IPMI 2.0 criptografado, ou se essa não é uma opção esperada em uma LAN ou VLAN de gerenciamento) durante a seqüência de pré-inicialização e, em seguida, ter o servidor Inicializar-se com um SO vanilla / stub que simplesmente inicializa um sistema operacional e não contém segredos ou informações confidenciais dentro dele.

Após a inicialização, o proto-servidor pode se comunicar com seu próprio BMC (root não precisa de auth localmente), ler a chave usando ipmitool ou qualquer outra coisa, e então retornar à mothership com as chaves lidas fornecendo a garantia de que é quem diz que é; então o provisionamento final pode começar. Usando isso (livremente admitido :) hack você também pode usar chaves individuais para cada sistema.

Possíveis locais para armazenamento de chaves no BMC incluem o endereço MAC (~ 48 bits de espaço de chave por porta ethernet deve ser suficiente para qualquer um (sic!)), a cadeia de comunidade SNMP, etc. Tudo pode ser redefinido para razoável valores após o provisionamento inicial e são facilmente modificados.

A implementação é simples, com um script para gerar chaves em uma base por servidor, um comando ipmitool para definir as chaves apropriadas nos destinos, um script na pequena imagem básica do sistema operacional. que lê as chaves locais e as usa para se autenticar na nave mãe e, em seguida, no provisionamento final. Mais complexo do que o provisionamento usual, sem dúvida, mas às vezes você tem que pagar pela paz de espírito.

    
por 26.11.2015 / 06:33