Czy Puppet lub Chef nadaje się do zarządzania bardzo podstawową konfiguracją serwera w środowisku wielu dzierżawców?

9

Dotyczy to środowisk z wieloma dzierżawcami, takich jak mała firma hostingowa.

Czy Puppet (lub podobny) jest odpowiednią technologią do radzenia sobie z podstawowymi, ale krytycznymi zmianami masy? Na przykład:

  • Aktualizowanie resolverów DNS (resolv.conf)
  • Ustawianie kluczy SSH
  • Aktualizacja konfiguracji NTP
  • Konfigurowanie snmpd
  • Wdrażanie skryptów monitorowania, takich jak rozszerzenia SNMP Perl lub skrypty Nagios

Moje obawy dotyczą bezpieczeństwa i inwazyjności:

  1. Nie chcę, aby jakikolwiek serwer mógł zobaczyć konfigurację, której nie powinien
  2. Martwię się, że mistrz marionetek może być narażony na atak atakowanego serwera
  3. Nie chcę, aby Puppet wprowadzał zmiany, których nie powinien, ani nie cofał żadnych ręcznych zmian wprowadzonych na serwerze.

Powinienem to ostrzec, mówiąc, że nigdy nie używałem Puppet w produkcji, miałem tylko szybką zabawę w laboratorium testowym, więc możliwe, że myślę o tym w niewłaściwy sposób!

SimonJGreen
źródło

Odpowiedzi:

6

Wypróbuj Ansible (ansible.cc). Może być dla ciebie. Na twoich klientach nie działa agent. Rośnie bardzo szybko.

Inną bardzo dobrą alternatywą jest Salt Stack.

Ansible i Salt są łatwe do zrozumienia, możesz użyć ich jako narzędzia wiersza poleceń, jeśli chcesz, jak rozproszona powłoka.

Afsin Toparlak
źródło
1
Wiem, że zapytałem o to dawno temu. Z przyjemnością dowiesz się, że to była NAJLEPSZA odpowiedź. Teraz używamy Ansible do automatycznego wdrażania 10 serwerów dziennie i zarządzamy tysiącami w stylu typu „zapomnij”. To jest świetne od ponad roku.
SimonJGreen,
9

Tak, z pewnością jest to możliwe. Jednak decyzja, czy powinieneś to zrobić, czy nie, zależy od ciebie.

Jeśli chodzi o twoje zapytania:

1) wystarczająco uczciwy. Ruch oparty jest na ssl, więc zarządzanie certyfikatami jest ważne. Nie ufaj też żadnym „faktom” dostarczanym przez klienta w związku z jego tożsamością, ponieważ mogą one zostać zmienione przez klienta. Chcesz polegać na certyfikacie ssl klienta, aby zapewnić uwierzytelnianie tego, kim jest serwer. Szczerze mówiąc, jeśli właściwie używasz takich rzeczy jak hiera i unikasz dużych bloków if-blocków w kodzie w swoim kodzie (co naprawdę powinieneś), nic ci nie będzie.

2) Nie powinno tak być, zakładając, że będziesz go załatał. Właściwie skonfigurowany, istnieje tylko mały wektor, na który lalkarz może zostać zaatakowany przez klientów. To powiedziawszy, efekty, które zostały skompromitowane, są duże, więc staraj się je zablokować.

3) To naprawdę problem z testowaniem i wdrażaniem. Jeśli masz solidny kod lalek, nie psuje twoich plików. Posortowanie tego zajmuje trochę czasu, ale podstawy (tak jak potrzebujesz) nie są długie.

Sirex
źródło
4

Czy Puppet (lub podobny) jest odpowiednią technologią do radzenia sobie z podstawowymi, ale krytycznymi zmianami masy?

Tak, można go używać w ten sposób. Używam tego do obsługi systemów klientów zewnętrznych.

Nie chcę, aby jakikolwiek serwer mógł zobaczyć konfigurację, której nie powinien

Jeśli używasz marionetką, to nie musi umożliwiać autosign wtedy. Autosign pozwala hostom na automatyczne żądanie certyfikatu. Twoja konfiguracja i uprawnienia będą prawie na pewno związane bezpośrednio z CN w certyfikacie. Nie chcesz, aby przypadkowy komputer pojawiał się w Internecie i mógł twierdzić, że w rzeczywistości jest to system z wszystkimi tajnymi funkcjami wysokiego bezpieczeństwa.

Jeśli jesteś naprawdę paranoikiem, możesz dostosować ustawienia serwera plików marionetek, aby utworzyć udziały, do których dostęp mają tylko niektóre systemy. Dostęp do serwera plików oparty jest na certyfikatach.

Nie chcę, aby Puppet wprowadzał zmiany, których nie powinien, ani nie cofał żadnych ręcznych zmian wprowadzonych na serwerze.

Istnieje kilka różnych podejść do zezwalania na lokalne zmiany.

Jedną z metod, której często używam, jest poniżej. Zasadniczo, jeśli przekażesz listę do source, a następnie marionetka wypróbuje każdy element na liście. Więc dodaję pierwszy element na liście, aby wskazywał na plik lokalny.

  file { '/etc/ssh/sshd_config':
    ensure => present,
    source => ["/etc/ssh/sshd_config_local",
               "puppet:///modules/ssh/$ssh_config_file"],
    ...
  }

Inną opcją byłoby użycie dowiązań symbolicznych. Jeśli ktoś chce użyć wersji marionetkowej, symbolizuje dowiązanie do marionetkowej wersji pliku. Jeśli chcą zachować konfigurację lokalnie, nie tworzą dowiązania symbolicznego.

  file { '/etc/ssh/sshd_config_puppet':
    ensure => present,
    source => "puppet:///modules/ssh/$ssh_config_file",
    ...
  }

Inną możliwością jest użycie augeas do wprowadzenia zmian na poziomie linii zamiast zmiany całych plików. Bądź bardzo konserwatywny w kwestii tego, co zmienisz.

Zoredache
źródło
1

3> Nie ma automatycznego cofania w Puppet ani w takich narzędziach. Musisz napisać wyraźny kod, aby cofnąć. Ponadto możesz zbadać funkcję lalek w środowisku, mieć laboratorium testowe, w którym testowany jest nowy kod (mogą to być maszyny wirtualne), i korzystać z recenzji kodu.

Nie teraz
źródło
Nie do końca prawda. Szef kuchni tworzy kopię zapasową każdego pliku, w /var/lib/chefktórym domyślnie się zmienia (chyba że zasób jest skonfigurowany tak, aby nie pozostawiał kopii zapasowych, np. Dla poufnych danych), a przy użyciu docformatera widać różnicę na wyjściu terminala.
Maciej Pasternacki
Cóż, tak, Puppet może również tworzyć wiele kopii zapasowych. Ale skąd wiesz, którą kopię zapasową przywrócić? Musiałbyś napisać kod Chef / Puppet lub zewnętrzny skrypt, aby faktycznie wykonać tę akcję? Co z zasobami innymi niż pliki, takimi jak przywracanie poprzedniego pakietu z określoną wersją? Co z usługami? Jeśli masz kod z napisem „upewnij się, że działa” i chcesz go zmienić, musisz zmienić kod, aby „zapewnić zatrzymanie”.
Nie teraz
Chodzi o to, że uruchomienie zarządzania konfiguracją jest jednokierunkowe. Nie ma obsługiwanej procedury wycofywania ani w pełni funkcjonującego „biegu na sucho” (w programie Chef występuje tryb Whyrun, który jest jedynie sugestią / sprawdzeniem rozsądku, a nie pełną symulacją (patrz blog.afistfulofservers.net/post/2012/12/21/ … Dla dłuższego wyjaśnienia). Nie można cofnąć zmiany hasła użytkownika itp. Dlatego napisałem „nie do końca prawda” - nie ma obsługiwanego wycofania, ale istnieje sieć bezpieczeństwa / debugowania, która pozwala zobaczyć kopię zapasową, jeśli coś poszło nie tak i trzeba rzucić okiem. Nic więcej, ale wciąż przydatne
Maciej Pasternacki
I okazuje się, że źle odczytałem twój komentarz - to prawda, że ​​nie ma automatycznego cofania i musisz napisać wyraźny (i najprawdopodobniej wadliwy) kod, jeśli próbowałeś go zautomatyzować. Nie mogę edytować mojego oryginalnego komentarza, ponieważ na który udzielono odpowiedzi - myślałem raczej o odzyskiwaniu po awarii niż o automatycznym przywracaniu. Jeśli chcesz zobaczyć automatyczne wycofywanie, spójrz na nixos.org , BTW.
Maciej Pasternacki
1

Nie chcę, aby Puppet wprowadzał zmiany, których nie powinien, ani nie cofał żadnych ręcznych zmian wprowadzonych na serwerze.

W przypadku plików konfiguracyjnych tworzonych przy użyciu typu pliku marionetek można to osiągnąć, ustawiając:

replace => false,

Używam tego do generowania niektórych plików konfiguracyjnych przy pierwszym wdrożeniu aplikacji na serwerze, ale żadne zmiany w tym pliku konfiguracyjnym nie zostaną zastąpione przez Puppet.

Jest to jednak sprzeczne z filozofią Puppet, aby być idempotentnym skryptem wdrażania.

Może być lepiej, jeśli możesz, mieć osobne pliki do edycji przez administratora, które nie są zarządzane przez marionetkę, które są zawarte w plikach zarządzanych przez marionetkę.

Danack
źródło
0

Puppet działa najlepiej na wielu serwerach o identycznej konfiguracji. Np. Napisz całą konfigurację udostępnionego serwera WWW dostarczoną przez twoją firmę, a następnie utwórz N instancji tego serwera. Później dokonanie zmian we wszystkich instancjach jednocześnie (np. Dowiesz się, że musisz zmienić AllowOverride dla wszystkich wirtualnych hostów Apache) będzie naprawdę łatwe. Będziesz także mógł przechowywać wszystkie informacje o konfiguracji w jednym miejscu i mieć je pod kontrolą wersji. W idealnym przypadku będziesz w stanie poradzić sobie z awarią sprzętu, wyrzucając uszkodzony host, zastępując go nowym, ustawiając tę ​​samą nazwę hosta i podpisując potrzebny certyfikat. Wszystko inne może zrobić Puppet.

Ale jeśli skończy się prawie brak współdzielenia konfiguracji między dwoma hostami, użycie marionetki może być mniej wydajne niż ręczne konfigurowanie. Również zarządzanie połową konfiguracji serwera za pomocą marionetki, a druga połowa ręcznie, może nie mieć większego sensu.

Podsumowanie : Jeśli możesz stworzyć jednolitą i ustrukturyzowaną konfigurację hostów, którymi zamierzasz zarządzać, Puppet jest twoim najlepszym przyjacielem, ale jeśli będziesz musiał obsługiwać każdą usługę (host, wirtualny host, baza danych) specjalnie Puppet nie doda duża wartość.

skarap
źródło