No momento, o Juju não está otimizado para vários administradores. Dentro Em particular, alguns dos problemas de segurança que são vistos atualmente em Juju se torna mais pronunciada quando trabalha com múltiplos admins. No entanto, com algumas ressalvas, isso ainda pode ser útil opção para um grupo pequeno e confiável de administradores.
Com isso em mente, vamos ver a configuração relevante
itens no arquivo ~/.juju/environment.yaml
.
O item authorized-keys
é usado no bootstrap do ambiente para
definir as chaves SSH públicas para o usuário do Ubuntu no nó de bootstrap
(máquina 0, na qual o ZooKeeper é executado) e todos os provisionados subseqüentemente
nós. Basta listar uma chave pública autorizada por linha. Vai parecer
como o seguinte:
authorized-keys: |
ssh-rsa AAAblahblahZZZZ user@domain
ecdsa-sha2-nistp256 AAAAfoobarZZZZ= user2@domain
Essa abordagem é preferível ao uso de authorized-keys-path
- ou sua
padrão ( ~/.ssh/
) - que é adequado apenas para um administrador, dado que
você teria que compartilhar as chaves SSH (não faça isso!). Simplesmente coloque
isso é apenas uma limitação de como authorized-keys-path
é
implementado.
Em seguida, os provedores de nuvem definem suas credenciais de segurança específicas,
que Juju então usa. Por exemplo, vamos dar uma olhada no EC2,
especificamente AWS. Para a AWS, duas chaves são usadas para determinar o acesso:
access-key
e secret-key
, correspondentes às variáveis de ambiente
AWS_ACCESS_KEY_ID
e AWS_SECRET_ACCESS_KEY
(estes são os
padrões, se não especificados no arquivo de configuração). O desafio aqui para
um ambiente administrativo múltiplo - ou até mesmo o ambiente administrativo único -
é que esta informação é copiada para o ZooKeeper e é facilmente visível
no nó ZK /environment
. Veja Juju bug # 907094 .
No exemplo da AWS, um certo grau de controle pode ser fornecido em seu teclas de acesso através do uso das Perguntas frequentes sobre o AWS Identity and Access Management (procure por isso), mas atualmente não há mecanismo para fornecer mais controle refinado para um determinado administrador em um ambiente Juju.
Um padrão adicional visto em nosso próprio uso, especialmente em testes,
Vale a pena notar: um ambiente Juju ("controle") configurado em um determinado nó
para controlar outros ambientes Juju; Basta implantar o charme juju
ter isso configurado. É preciso uma opção de configuração
environment.yaml
a ser usado. Administradores adicionais podem ser mais tarde
autorizado como o usuário ubuntu
adicionando manualmente suas chaves
~ubuntu/.ssh/authorized-keys
.
Isso permite que um único ponto gerencie algumas dessas preocupações, enquanto minimizando a dor de cabeça. Não faz nada para resolver alguns dos preocupações de segurança mencionadas anteriormente - você ainda deve ter uma profunda confiança de seus outros administradores.
O Juju irá ressincronizar environments.yaml
para o nó% Z /environment
o uso de determinados comandos ( juju add-unit
, juju constraints-get
,
juju constraints-set
, juju deploy
, juju terminate-machine
). Dentro
prática, isso não será muito útil - exceto pelo seu real
uso pretendido, de restrições de suporte. No entanto, isso pode ajudar
minimizar a necessidade de atualizar arquivos de chaves autorizadas como qualquer
máquinas provisionadas depois que a sincronização vai conseguir isso; você então apenas
responsável por atualizar as máquinas provisionadas anteriormente.
Enquanto estou neste ponto, vale a pena notar como e onde
~ubuntu/.ssh/authorized-keys
são realmente usados:
-
Todos os comandos de controle do Juju, com duas exceções, usam um túnel SSH para a instância do ZooKeepeer para gerenciar ou pesquisar informações do Juju meio Ambiente. (
juju bootstrap
ejuju destroy-environment
trabalhar diretamente com a API do provedor de nuvem subjacente.) definitivamente precisa manter oauthorized-keys
na corrente da máquina 0. -
juju ssh
ejuju scp
permitem trabalhar diretamente com uma máquina e eles também precisam terauthorized-keys
atual que você tem que considerar a atualização no caso de vários admin. Estes Por padrão, os comandos usam o usuárioubuntu
na máquina de destino.