Meus EDBs são separados por:
Carregamos todas as chaves com um sufixo especial em todas as novas instâncias do EC2 à medida que as inicializamos e, em seguida, removemos todas as chaves que não foram usadas por nenhuma das receitas da run_list no final da primeira vez que o chef-cliente é executado (que será logo que a instância inicia.)
Todos os arquivos são carregados como proprietário e grupo "root" e com apenas permissões de leitura.
Toda receita que usa um EDB gera o nome do EDB e o nome do arquivo de chave no tempo de execução da receita concatenando 'edb_' + o ambiente dos nós + receita / nome específico do item + '.key' e, em seguida, procura a chave com esse nome . (Se não existir, isso gera uma exceção por padrão.)
Portanto, para o nosso servidor couchdb, executando uma função chamada 'couch', para obter as credenciais que estamos usando para o (s) usuário (s) do administrador no ambiente dev, a receita procura uma chave chamada 'edb_dev_couch.key'
Em seguida, ele procura em um pacote de dados chamado 'edb_dev' um item chamado 'couch_credentials'.
Para gerenciar chaves, atualmente estou usando a abordagem simples de:
- faça o upload de todas as chaves EDB via script de autoinicialização e acrescente '_x' aos nomes das chaves
- Faça com que cada receita que use um EDB procure no diretório de chaves a chave necessária.
- se a chave existir com um sufixo '_x', renomeie a chave para remover o sufixo '_x'.
- adicione uma receita no final de cada lista de execução que exclua todas as chaves com o sufixo '_x'
Felizmente, isso limita o tempo em que as chaves fora do escopo de um único nó são suscetíveis até que a máquina seja inicializada e tenha a primeira execução do chef_client.
Esta é a nossa primeira rodada de testes de como proteger as chaves, mas, até o momento, atende às nossas necessidades atuais, pois evita que um servidor de desenvolvimento root consiga acessar imediatamente quaisquer outras credenciais de servidor armazenadas em um EDB.
Para manter uma receita no final de cada lista de execução, eu uso um trabalho de exec de faca que garante que esta receita delete_keys seja exatamente a última receita em cada nó.