GNU/Linux >> Znalost Linux >  >> Linux

Zkoumání nového tajného příkazu Podman

Všichni při práci s počítačovými systémy zacházíme s citlivými informacemi. Systémoví správci přesouvají klíče SSH a weboví vývojáři se musí starat o tokeny API. Problém s citlivými informacemi je, že jsou citlivé , což znamená, že by mohla způsobit bezpečnostní katastrofu, pokud by se nějak dostala do nesprávných rukou. Kontejnery nejsou v tomto problému výjimkou – uživatelé potřebují využívat citlivé informace uvnitř kontejnerů a zároveň je musí uchovávat v bezpečí.

[ Mohlo by se vám také líbit čtení: Kontejnery bez kořenů pomocí aplikace Podman ]

Proč tajemství?

Co když někdo potřebuje spustit databázi v kontejneru a přihlašovací údaje pro databázi je třeba vložit do kontejneru? To lze provést několika způsoby. Při spuštění kontejneru můžete jednoduše vytvořit soubor a uložit tam přihlašovací údaje. To je však nebezpečné. Pokud je kontejner exportován do obrázku, budou exportovány také přihlašovací údaje. Každý, kdo má kontrolu nad obrázkem, bude mít přístup k databázi. Další možností je předat přihlašovací údaje pomocí CLI, ale to vyžaduje pokaždé zadávat data, což může být únavné.

Co kdyby existovala metoda pro centrální správu citlivých informací?

Nový příkaz podman secret , je sada dílčích příkazů a voleb, která spravuje citlivé informace snadno použitelným a bezpečným způsobem. Umožňuje uživatelům snadno používat citlivý obsah uvnitř kontejneru, ale zabraňuje tomu, aby skončil někde mimo kontejner, například v registru obrázků. Implementovali jsme celou sadu dílčích příkazů pro podman secret :create , rm , ls a inspect , vytvářet a manipulovat s tajemstvími, stejně jako --secret příznak pro vložení tajemství do kontejneru.

Jak se to používá?

Při podman secret create je spuštěn, Podman očekává uložení souboru s daty.

$ echo "secretdata" > secretfile
$ podman secret create secretname secretfile
e17465c9772b38f336fc4cbac

podman secret inspect příkaz nezobrazí uložená data, ale pouze metadata tajného klíče.

$ podman secret inspect secretname
[
    {
        "ID": "e17465c9772b38f336fc4cbac",
        "CreatedAt": "2021-02-12T09:05:49.661504248-05:00",
        "UpdatedAt": "2021-02-12T09:05:49.661504248-05:00",
        "Spec": {
            "Name": "secretname",
            "Driver": {
                "Name": "file",
                "Options": null
            }
        }
    }
]

Samozřejmě můžete také uvést svá tajemství a odstranit je.

$ podman secret ls
ID                         NAME        DRIVER      CREATED       UPDATED       
e17465c9772b38f336fc4cbac  secretname  file        1 second ago  1 second ago  

$ podman secret rm secretname
e17465c9772b38f336fc4cbac

Za účelem použití tajného klíče a přístupu k tajným datům lze vytvořit kontejner nebo jej spustit s --secret vlajka. Uvnitř kontejneru lze k tajným datům přistupovat v souboru na adrese /run/secrets/secretname . Můžete použít --secret vícenásobným příznakem přidáte do kontejneru četná tajemství.

$ podman run --secret secretname --name foo alpine cat /run/secrets/secretname
secretdata

Tajemství nebudou potvrzena do obrázku ani exportována pomocí podman commit nebo podman export příkaz. Tím se zabrání tomu, aby byly citlivé informace náhodně přeneseny do veřejného registru nebo poskytnuty nesprávné osobě.

$ podman commit foo secrimg
Getting image source signatures
Copying blob 1119ff37d4a9 skipped: already exists  
Copying blob 3dd965b4468a done  
Copying config 263fcafb79 done  
Writing manifest to image destination
Storing signatures
263fcafb790dfdf6a7312953d3600ff9d990a664ec341ded7d0a6dfa1e71bb5d

$ podman run secrimg cat /run/secrets/mysecret
cat: can't open '/run/secrets/mysecret': No such file or directory

Jak to funguje?

Když uživatel použije --secret flag, Podman načte tajná data a uloží je do tmpfs . Poté připojí soubor do kontejneru na /run/secrets/secretname . Odtud může být tajný klíč použit uvnitř kontejneru jako obvykle, ať už se jedná o databázové klíče nebo certifikáty TLS.

Tajemství existují pouze na počítači tvůrce tajemství nebo uvnitř kontejneru, když je připraven ke spuštění. Tajemství jsou speciálně navržena tak, aby ne existují v obrázcích:podman commit nezadá tajemství do obrázku ani podman export . Pokud by někdo vytvořil obrázek z kontejneru s tajemstvím, spusťte kontejner z uvedeného obrázku, soubor na adrese /run/secret/mysecret by neexistovalo. Tím se zabrání náhodnému přesunutí tajných dat do registru, čímž se zabrání tomu, aby citlivé a kompromitující informace existovaly tam, kde by neměly být.

Budoucí práce

Toto řešení zatím zajišťuje správu tajemství. Jediným implementovaným ovladačem pro ukládání citlivých informací je však v současnosti souborový ovladač, což znamená, že data budou uložena na disku v nešifrovaných souborech řízených hostitelem kontejneru. Plánujeme další vylepšení, jako je implementace šifrování nebo používání jiných ovladačů. Rádi bychom také podporovali tajné proměnné prostředí, což jsou proměnné prostředí, které se nastavují uvnitř kontejneru, ale nejsou zaznamenány v obrázku. Zapojení komunity do těchto úkolů bude vděčně přijato.

[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]

V pohodě. Chci to.

Tajemství Podman je k dispozici v Podman 3.1.0. Pokud byste to chtěli vyzkoušet, můžete si Podman získat podle těchto pokynů k instalaci. Pokud již máte Podman, můžete získat tajnou funkci upgradem na Podman 3.1.0. V případě jakýchkoli dotazů nebo zpětné vazby se také neváhejte obrátit na tým Podman. Vývojáři Podman se často scházejí na kanálu freenode #podman. Můžete nám poslat e-mail pomocí mailing listu podman. Máme také měsíční komunitní setkání. Neváhejte se tam také stavit a pozdravit.


Linux
  1. Praktický pohled na příkaz xargs

  2. Příkaz „eval“ v Bash?

  3. Vysvětlete možnosti příkazu Readlink?

  1. Zvládněte příkaz Linux ls

  2. Úvod do příkazu alternatives v Linuxu

  3. Účel hash příkazu?

  1. Úvod do příkazu diff

  2. Jak používat příkaz basename?

  3. Účel příkazu „install“?