Jak należy obsługiwać prywatne linki zależności w setup.py

10

W pracy korzystamy z prywatnego serwera pypi. Ten serwer pypi jest określony jako łącze zależności:

...
from setuptools import setup

config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
    'https://{}:{}@<private_url>'.format(
        config.get('dc', 'username'), config.get('dc', 'password'))]

setup(
    dependency_links=dependency_links,
    ...)

Działa to dobrze w większości naszych przypadków. Jednak jakiś czas temu musieliśmy instalować pakiety na serwerze klienta. W tym celu musieliśmy skopiować ważny, .pypirczanim będziemy mogli zainstalować jakiekolwiek pakiety.

Również powyższy kod wydaje się po prostu brudnym włamaniem.

Jaki jest właściwy sposób określania bezpiecznych łączy zależności bez poświadczeń na stałe?

Remco Haszing
źródło
1
Rozumiem, co masz na myśli. Nie jest to takie brudne jak włamanie, ale oznacza to, że łączysz uwierzytelnianie z zarządzaniem zależnościami w zależności od pakietu. To podejście nie jest przenośne ani skalowalne.
Joel Cornett

Odpowiedzi:

1

To wydaje się rozsądnym i wcale nie brudnym włamaniem.

  1. Istnieje plik konfiguracyjny dla poświadczeń
  2. Istnieje sposób na wstrzyknięcie niestandardowego adresu URL + poświadczeń do zależności

Praca jest wykonywana i wykonywana dobrze, jedynym sposobem, aby to poprawić, jest udokumentowanie jej i wypróbowanie na wielu różnych konfiguracjach lub na wielu serwerach pypi i rozwiązanie problemów, które z tego wynikają.

Rudolf Olah
źródło
0

Jedną z możliwości byłoby ustawienie zmiennych środowiskowych . Można to zrobić za pomocą narzędzi do wdrażania, takich jak Ansible . Przechowywanie twoich sekretów za pomocą Blackbox Stack Vault lub Vault Ansible

Alternatywnie: Pomógłby w konteneryzacji, ponieważ wszystko, co potrzebne do uruchomienia oprogramowania jest wbudowane.

Thomas Junk
źródło
0

Korzystając z tego rozwiązania, należy zachować szczególną ostrożność. Jak stwierdzono w dokumentacji :

Zostaną również zapisane w metadanych jaja, aby mogły być używane przez narzędzia takie jak EasyInstall podczas instalowania pliku .egg.

To znaczy, twoje poświadczenia zostaną rozpowszechnione w .egg. Po zrootowaniu setuptoolskodu źródłowego dowiedziałem się, że wewnętrznie wydaje się, że używa easy_installpolecenia do zainstalowania zależności. Dlatego dodanie do twoich setup.cfgpowoduje, że pobiera prywatne repozytorium:

[easy_install]
index_url=https://username:password@your.repo/simple

Nadal ma to snafu, że twoje poświadczenia są drukowane na terminalu podczas jego instalacji, ale przynajmniej nie kończą się w twojej dystrybucji. Pamiętaj, że to rozwiązanie zastępuje adres URL indeksu, więc Twoje prywatne repozytorium musi także odzwierciedlać publiczne. Nie widziałem obsługi dodawania adresów URL indeksu w żaden oczywisty sposób.

scranen
źródło