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.