Usługi IT wymagają konfiguracji. Częścią konfiguracji są sekrety, które nie powinny być ujawniane. Powszechnymi przykładami są poświadczenia bazy danych lub losowe wartości, które chronią ciasteczka sesji lub poświadczenia uwierzytelniające. Jeśli rozwijasz oprogramowanie, sytuacja może się pogorszyć z pipeline'ami budowania, certyfikatami dystrybucji i kluczami dostępu.
Kompromitacja sekretów może prowadzić do przejęcia kont użytkowników, kradzieży danych, ataków na łańcuch budowania oraz innych kosztownych problemów. Zła reputacja, utrata własności intelektualnej oraz potencjalnie ogromne opłaty prawne to tylko ułamek możliwych kosztów.
Psono oferuje w najnowszej wersji psonoci chronione środowiska. Chronione środowiska pozwalają na uruchamianie procesów i ich konfigurację za pośrednictwem zmiennych środowiskowych bez ich ujawniania systemowi. Te zmienne środowiskowe są bezpiecznie ładowane z Psono, nigdy nie są nigdzie przechowywane na serwerze i są ujawniane tylko pojedynczemu procesowi.
Najpierw trzeba utworzyć sekret zmiennych środowiskowych. Pamiętaj, że pojedynczy sekret może zawierać wiele zmiennych środowiskowych, więc można grupować zmienne środowiskowe według np. środowiska lub po prostu dlatego, że należą do siebie jak użytkownik bazy danych i hasło do bazy danych.
Następnie tworzysz klucz API i pozwalasz temu kluczowi API na dostęp do nowego sekretu zmiennych środowiskowych.
Teraz zanotuj tajne dane klucza API, ponieważ te parametry są jedynymi, które są bezpośrednio ujawniane systemowi.
Zainstaluj psono ci na swoim serwerze lub w swojej pipeline budowania za pomocą pojedynczego polecenia:
curl https://get.psono.com/psono/psono-ci/x86_64-linux/psonoci --output psonoci && chmod +x psonoci
I zamiast po prostu uruchamiać ./some_command
uruchom proces w ten sposób:
psonoci \
--api-key-id eaee77c6-169f-4873-9be3-f2613149baa9 \
--api-secret-key-hex c8321d7a8e5b1f5ec3d969ecb5054c7548a1c709ddab2edae2ff7ff028538917 \
--server-url https://example.com/server \
run -- ./some_command
Dla uproszczenia przekazujemy parametry takie jak --api-key-id
lub --api-secret-key-hex
jako argumenty, ale można również
skonfigurować plik konfiguracyjny zamiast tego.
Dla celów demonstracyjnych stworzyliśmy ten mały skrypt pythonowy service.py
, który drukuje wszystkie zmienne środowiskowe i argumenty przekazane do skryptu.
#!/usr/bin/python3
import os
import sys
print("args: {}".format(sys.argv))
print("environment: {}".format(os.environ))
Zamiast wykonywać na przykład ./service.py --whatever=argument_1
możemy wykonać to w ten sposób:
psonoci \
--api-key-id eaee77c6-169f-4873-9be3-f2613149baa9 \
--api-secret-key-hex c8321d7a8e5b1f5ec3d969ecb5054c7548a1c709ddab2edae2ff7ff028538917 \
--server-url https://example.com/server \
run -- ./service.py --whatever=argument_1
Otrzymujemy następujące wyjście:
args: ['service.py', '--whatever', 'argument_1']
environment: environ({'db_host': 'prd-db.example.com:5432', 'db_password': 'Df55sr2UQm7Wshv7', 'db_username': 'production'})
Jak widać, wszystkie argumenty zostały poprawnie przekazane, a wszystkie zmienne środowiskowe, które wcześniej skonfigurowaliśmy, były dostępne dla procesu. Istnieją flagi, które pozwalają na przekazywanie normalnych zmiennych środowiskowych systemu i rozszerzanie ich o te z Psono. Bardziej szczegółowe informacje można znaleźć w naszej dokumentacji dla psonoci.
Mam nadzieję, że spodobała Ci się nasza mała wycieczka pokazująca, jak Psono może pomóc chronić Twoją infrastrukturę. Wszystko to nie byłoby możliwe bez Bernda, mózgu stojącego za tą funkcją, więc dziękuję ci bardzo, Bernd!