Jak zabronić dostępu do elementów wewnętrznych kontenera Docker?

14

Chcę dostarczyć moją aplikację klientom w formie obrazu dokera. Ważne jest jednak, aby użytkownik końcowy nie zmienił niczego w pojemniku. Użytkownik powinien mieć możliwość uruchamiania / zatrzymywania kontenera i interakcji z nim przez sieć.

Czy można zabronić dostępu do elementów wewnętrznych kontenera? Czy można zweryfikować integralność obrazu, z którego wykonany jest kontener?

Victor Mezrin
źródło
2
Chyba że nie zarządzasz hostem dokera. Jaki problem chcesz rozwiązać, uniemożliwiając ten dostęp?
Tensibai
Jak wspomina Tensibai, to zależy. Jeśli trzeba wiedzieć, że pojemnik jest niemodyfikowana ze względów bezpieczeństwa, zasadniczo trzeba uruchomić go na własnych serwerach. Jeśli chcesz po prostu zniechęcić ludzi do modyfikowania go, aby nie psowali rzeczy, prawdopodobnie są na to sposoby. Pomoże tu opisanie przypadku użycia.
Aurora0001

Odpowiedzi:

11

Krótko mówiąc, nie można uniemożliwić klientom modyfikowania kontenerów, które działają we własnej infrastrukturze. Kontenery nie są jak pliki binarne, które można zaciemnić; są to środowiska wykonawcze. Kod dystrybuowany w kontenerze może jednak zostać zaciemniony.

Twoje pytanie odnosi się do problemu wsparcia zewnętrznego: klienci modyfikują oprogramowanie, które działają we własnym środowisku. Jeśli udostępniasz narzędzia do obsługi dostarczanych przez siebie kontenerów (np. Monitorowanie i rejestrowanie), klienci powinni wyrazić zgodę (w ramach licencji na oprogramowanie), aby nie wprowadzać w nich nieautoryzowanych modyfikacji. Dotyczy to wszystkich rodzajów oprogramowania innych firm, nie tylko kontenerów.

W zależności od sytuacji możesz mieć również opcję dostarczenia aplikacji jako oprogramowania jako usługi (SaaS) działającej w infrastrukturze chmurowej.

Jeśli Twój klient wymaga, aby Twoje kontenery były uruchomione w jego infrastrukturze i odmawia przestrzegania ograniczeń modyfikacji, prawdopodobnie nie chcesz próbować wspierać korzystania z Twojego oprogramowania.

Dave Swersky
źródło
6

Docker nie zapewnia żadnych środków uniemożliwiających dostęp użytkownika do kontenera, jednak jako programista obrazu można zastosować kilka strategii

  • Ukryj swoje oprogramowanie (ruby, python itp.)
  • Zbuduj obraz z obrazu podstawowego, który nie ma powłoki, oraz innych plików binarnych, których użytkownik może użyć do zepsucia obrazu.

Oczywiście zawsze mogą wyeksportować kontener i przepakować go, ale są to ekstremalne środki ...

Jeeva
źródło
Dlaczego Ruby i Python podano jako przykłady zaciemniającego kodu? Kod w tych językach jest zwykle przechowywany jako pliki źródłowe w postaci czystego tekstu w systemie operacyjnym. Czy nie byłoby preferowane użycie skompilowanego języka, takiego jak C ++, C #, Java lub takiego, który można „zminimalizować” jak JS?
AjaxLeung
5

Możesz usunąć użytkowników z grupy dokerów i utworzyć sudos dla docker starti docker stop.

użytkownik2590
źródło
3
możliwe / skuteczne tylko, jeśli posiadasz te serwery ...
Dan Cornilescu
5

Jeśli Twój klient jest gotowy zainwestować pieniądze, powinieneś wybrać wersję Docker Enterprise Edition. W Docker EE masz jedno narzędzie, którym jest UCP(Universal Control Plane) UCP . Za pomocą UCP możesz tworzyć role i prawa dostępu oraz ograniczać użytkownika do zmiany / modyfikacji kontenerów.

Jeśli chcesz przetestować UCP niż DDC (Docker Data Center) posiadający miesięczną licencję próbną, która pomoże ci opracować te rzeczy zgodnie z twoimi wymaganiami.

Mam nadzieję, że to pomoże!

Dziękuję Ci!

Chintan Thakar
źródło
1
Jako rozwiązanie dotyczące grup dokerów, działa to, jeśli zarządzasz tylko systemem hosta dokerów, OP brzmi bardziej jak dystrybucja obrazu ...
Tensibai
2

Podaj swoją dostawę za pomocą skryptów ansible. Zachowaj wszystkie ograniczenia i kontrole w skrypcie ansible.

lakshayk
źródło
2
Jak zapobiegnie to dostępowi do kontenera? Spróbuj wyjaśnić, w jaki sposób twoja propozycja rozwiązałaby problem OP.
Michael Le Barbier Grünewald