Je gère certains déploiements avec juju. Cependant je ne suis pas une île, j'ai des collègues qui veulent aussi gérer des environnements partagés.
Je sais que je peux utiliser la strophe suivante dans ~/.juju/environments.yaml
pour permettre aux gens d'accéder à mon environnement juju:
authorized-keys: [and then put their ssh IDs in here]
Quelles autres meilleures pratiques sont disponibles pour gérer plusieurs environnements avec plusieurs administrateurs système?
Juju n'est vraiment pas optimisé pour le moment pour plusieurs administrateurs. En particulier, certains des problèmes de sécurité qui sont actuellement observés dans Juju deviennent plus prononcés lorsque vous travaillez avec plusieurs administrateurs. Cependant, avec certaines mises en garde, cela peut toujours rester une option utile pour un groupe d'administrateurs de confiance - et donc probablement petit -.
Dans cet esprit, regardons les éléments de configuration pertinents dans le ~/.juju/environment.yaml
fichier.
Le authorized-keys
l'élément est utilisé dans l'environnement bootstrap pour définir les clés SSH publiques pour l'utilisateur ubuntu sur le nœud bootstrap (machine 0, sur laquelle s'exécute ZooKeeper)) et tous les nœuds provisionnés par la suite. Indiquez simplement une clé publique autorisée par ligne. Elle ressemblera à ceci:
authorized-keys: |
ssh-rsa AAAblahblahZZZZ user@domain
ecdsa-sha2-nistp256 AAAAfoobarZZZZ= user2@domain
Cette approche est préférable à l'utilisation de authorized-keys-path
- ou sa valeur par défaut (~/.ssh/
) - qui ne convient qu'à un seul administrateur, étant donné que vous devrez alors partager les clés SSH (ne faites pas ça!). Autrement dit, ce n'est qu'une limitation de la façon dont authorized-keys-path
est implémenté.
Ensuite, les fournisseurs de cloud définissent leurs informations de sécurité spécifiques, que Juju utilise ensuite. À titre d'exemple, examinons EC2, en particulier AWS. Pour AWS, deux clés sont utilisées pour déterminer l'accès: access-key
et secret-key
, correspondant aux variables d'environnement AWS_ACCESS_KEY_ID
et AWS_SECRET_ACCESS_KEY
(ce sont les valeurs par défaut si elles ne sont pas spécifiées dans le fichier de configuration). Le défi ici pour un environnement à plusieurs administrateurs - ou même à un seul administrateur - est que ces informations sont copiées dans ZooKeeper et sont facilement visibles dans le nœud ZK /environment
. Voir Juju bug # 907094 .
Dans l'exemple AWS, un certain degré de contrôle peut être fourni sur vos clés d'accès via l'utilisation d'AWS Identity and Access Management FAQ (recherchez ceci), mais actuellement il n'y a aucun mécanisme pour fournir plus contrôle fin à un administrateur donné dans un environnement Juju.
Un modèle supplémentaire vu dans notre propre utilisation, en particulier dans les tests, mérite d'être noté: un environnement Juju ("contrôle") installé sur un nœud donné pour contrôler d'autres environnements Juju; déployez simplement juju charm pour que cela soit configuré. Il prend comme option de configuration le environment.yaml
à utiliser. Des administrateurs supplémentaires peuvent ensuite être autorisés ultérieurement en tant qu'utilisateur ubuntu
en ajoutant manuellement leurs clés à ~ubuntu/.ssh/authorized-keys
.
Cela permet à un seul point de gérer certaines de ces préoccupations, tout en minimisant les maux de tête. Cela ne fait rien pour résoudre certains des problèmes de sécurité mentionnés précédemment - vous devez toujours avoir une confiance raisonnablement profonde de vos autres administrateurs.
Juju va se resynchroniser environments.yaml
au nœud ZK /environment
lors de l'utilisation de certaines commandes (juju add-unit
, juju constraints-get
, juju constraints-set
, juju deploy
, juju terminate-machine
). En pratique, cela ne sera pas terriblement utile - à l'exception de son utilisation réelle prévue, des contraintes de support. Cependant, cela peut aider à minimiser la nécessité de mettre à jour les fichiers de clés autorisées car toutes les machines nouvellement approvisionnées après la synchronisation l'obtiendront; vous seriez alors simplement responsable de la mise à jour des machines provisionnées précédemment.
Pendant que je suis sur ce point, il convient de noter comment et où dans ~ubuntu/.ssh/authorized-keys
sont effectivement utilisés:
Toutes les commandes de contrôle Juju, à deux exceptions près, utilisent un tunnel SSH vers l'instance ZooKeepeer pour gérer ou rechercher des informations à partir de l'environnement Juju. (juju bootstrap
et juju destroy-environment
fonctionne directement avec l'API du fournisseur de cloud sous-jacent.) Vous devez donc absolument conserver le authorized-keys
sur la machine 0 en cours.
juju ssh
et juju scp
permettent de travailler directement avec une machine, et ils doivent également disposer de authorized-keys
que vous devrez envisager de mettre à jour dans le cas de plusieurs administrateurs. Ces commandes utilisent par défaut l'utilisateur ubuntu
sur la machine cible.