GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak zabezpečit citlivá data pomocí tajemství Docker Compose

Bezpečná správa tajných informací je důležitým aspektem zabezpečení kontejnerů. Pokud vkládáte hesla a klíče API jako proměnné prostředí, riskujete neúmyslné vystavení informací. Proměnné prostředí jsou často protokolovány, předávány podřízeným procesům nebo unikají do služeb hlášení chyb bez vašeho vědomí.

Vložení hodnot jako vyhrazených tajemství tato rizika zmírňuje. Docker má vestavěnou podporu pro bezpečnou správu tajemství, ke které se můžete připojit pomocí Docker Compose. Přístup k tajemstvím je poskytován na základě jednotlivých služeb.

Jak tajemství fungují?

Docker CLI má dávku tajných příkazů správy, ale ty fungují pouze s clustery Swarm. Do samostatných kontejnerů nelze přidávat tajné klíče pouze pomocí rozhraní CLI Docker.

Docker Compose přidal „falešná“ tajemství, aby tyto schopnosti přinesl do úloh bez clusteru. Implementace Compose funguje podobně jako funkce Docker Swarm a funguje s jakýmkoli souborem Compose.

Tajné položky jsou vytvářeny jako běžné textové soubory, které jsou připojeny k vašim kontejnerům. Vaše aplikace přistupuje k hodnotě tajemství čtením obsahu souboru. Tento model umožňuje hodnotám zůstat inertní, dokud nejsou explicitně použity ve vašem kontejneru, na rozdíl od trvale viditelných proměnných prostředí.

Definování tajemství v souborech pro vytváření zpráv

Dostat tajemství do kontejneru je dvoufázový proces. Nejprve musíte definovat tajemství pomocí secrets nejvyšší úrovně pole v souboru Compose. Poté aktualizujete definice služeb, aby odkazovaly na tajná tajemství, která vyžadují.

Zde je příklad, který používá tajné klíče k bezpečnému zadání hesla službě:

version: "3"
services:
  app:
    image: example-app:latest
    secrets:
      - db_password
secrets:
    db_password:
      file: ./db_password.txt

Hodnota tajného klíče bude načtena z db_password.txt vašeho pracovního adresáře soubor při spuštění docker-compose up . Compose připojí soubor k /run/secrets/db_password uvnitř kontejneru. Vaše aplikace může získat přístup k heslu databáze přečtením obsahu tajného souboru.

Použití existujících tajných klíčů Docker

Kromě tajemství založených na souborech vám Compose také umožňuje odkazovat na existující tajemství Docker Swarm. Pokud použijete tento mechanismus, musíte tajné klíče vytvořit v Dockeru před spustíte docker-compose up . docker secrets příkazový prostor bude fungovat pouze tehdy, když je váš aktivní koncový bod Dockeru uzel správce Swarm.

Vytvořte tajný klíč pomocí rozhraní příkazového řádku Docker:

# take value from standard input
echo P@55w0rd | docker secret create db_password -
 
OR 
 
# take value from a file
docker secret create db_password ./db_password.txt

Nyní aktualizujte svůj soubor Docker Compose tak, aby odkazoval na tajný klíč:

version: "3"
services:
  app:
    image: example-app:latest
    secrets:
      - db_password
secrets:
    db_password:
      external: true

Nastavení external tajného klíče pole přikazuje Compose, aby svou hodnotu čerpala z vašich stávajících tajných klíčů Dockeru. Zásobník selže s chybou, pokud se jej pokusíte spustit dříve, než tajný klíč existuje.

Rozšířená tajná syntaxe

Compose podporuje delší syntaxi tajných klíčů, pokud potřebujete podrobnější kontrolu nad procesem vkládání. Přepnutí na tuto syntaxi vám umožní přizpůsobit oprávnění souboru a změnit název připojeného tajného klíče.

K dispozici je pět volitelných polí:

  • source – Název tajného klíče, na který se má odkazovat – musí to být jedna z hodnot definovaných v secrets vašeho souboru Compose sekce.
  • target – Název souboru, který se použije, když je tajný klíč připojen do kontejneru.
  • uid – UID pro nastavení na připojeném tajném souboru. Výchozí hodnota je 0.
  • gid – GID pro nastavení na připojeném tajném souboru. Výchozí hodnota je 0.
  • mode – Oprávnění systému souborů pro použití na připojený tajný soubor, vyjádřená v osmičkové soustavě. Výchozí hodnota je 0444. Pozor, do tajných souborů nelze nikdy zapisovat, protože jsou vždy připojeny do dočasného souborového systému kontejneru.

Zde je upravený příklad, který přejmenuje připojený tajný soubor a změní jeho oprávnění:

version: "3"
services:
  app:
    image: example-app:latest
    secrets:
      - source: db_password
        target: database_password_secret
        mode: 0440
secrets:
    db_password:
      external: true

Jednoduchá syntaxe obvykle postačuje pro většinu nasazení. Pokud máte konkrétnější požadavky, rozšířená verze by vám měla poskytnout kontrolu, kterou potřebujete. Jednotlivé tajné odkazy mohou kombinovat dvě syntaxe ve stejném souboru Compose.

Tajemství a autorství obrázků

Mnoho populárních komunitních obrázků Docker nyní podporuje tajemství namísto proměnných prostředí. Jako autor obrázků je nabízení tajemství nejlepším přístupem k ochraně dat vašich uživatelů.

Oba mechanismy můžete podpořit tím, že umožníte nastavení proměnných prostředí na cestu k souboru. Pokud váš obrázek vyžaduje připojení k databázi, nechte uživatele nastavit DB_PASSWORD proměnná prostředí buď P@55w0rd nebo /run/secrets/db_password . Váš kontejner by měl zkontrolovat, zda hodnota proměnné odkazuje na platný soubor; pokud ano, zahoďte jej a načtěte konečnou hodnotu ze souboru.

Tento model poskytuje uživatelům flexibilitu při výběru nejvhodnějšího mechanismu pro jejich nasazení. Pamatujte, že ne všichni uživatelé budou moci přijmout tajemství – pokud Swarm a Compose nebudou k dispozici, nebudou mít možnost poskytnout své hodnoty.

Závěr

Použití tajemství namísto běžných proměnných prostředí snižuje riziko neúmyslného prozrazení informací. Představte si nejhorší scénář, kdy kontejner odeslal své proměnné prostředí do kompromitované protokolovací služby třetí strany. Útočníci nyní mají heslo k vaší databázi a klíče API.

Omezením tajných dat na přístup k souborovému systému nelze hodnoty neúmyslně číst, protože nejde o trvalou funkci vašeho prostředí. Pamatujte, že tajné soubory mají svá vlastní rizika. Můžete být v pokušení zapojit je do kontroly zdroje, což by znamenalo, že kdokoli s přístupem k vašemu úložišti by mohl číst jejich hodnoty.

Tajemství by měla být „tajná“ po celou dobu životního cyklu vašeho kontejneru. Pro produkční nasazení je obvykle nejlepší automatizovat sestavení pomocí systému CI. Nastavte svá tajemství v nastavení kanálu poskytovatele CI a poté je pomocí skriptu sestavování zapište do souborů, ke kterým má Compose přístup. Tím je zajištěno, že ke skutečným hodnotám budete mít přístup pouze vy prostřednictvím rozhraní vašeho nástroje CI.


Docker
  1. Jak nainstalovat Jenkins pomocí Docker

  2. Jak nasadit mikroslužby s Dockerem

  3. Jak používat Docker Compose

  1. Jak používat Ansible Vault k zabezpečení citlivých dat

  2. Jak nasadit aplikace s Rancherem

  3. Jak zjednodušit soubory Docker Compose s kotvami a rozšířeními YAML

  1. Jak ukládat data kontejneru Docker ve svazcích Dockeru

  2. Začínáme s Docker Compose v Linuxu

  3. Jak nastavit MySQL pomocí Dockeru v Linuxu