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, .pypirc
zanim 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?
Odpowiedzi:
To wydaje się rozsądnym i wcale nie brudnym włamaniem.
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ą.
źródło
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.
źródło
Korzystając z tego rozwiązania, należy zachować szczególną ostrożność. Jak stwierdzono w dokumentacji :
To znaczy, twoje poświadczenia zostaną rozpowszechnione w
.egg
. Po zrootowaniusetuptools
kodu źródłowego dowiedziałem się, że wewnętrznie wydaje się, że używaeasy_install
polecenia do zainstalowania zależności. Dlatego dodanie do twoichsetup.cfg
powoduje, że pobiera prywatne repozytorium: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.
źródło