Podle zprávy Sysdig 2021 Container Security and Usage Report je zabezpečení kontejnerů rostoucím problémem mnoha organizací. Stále však existují určité mezery. Skenování obrazu kontejnerů a privilegované kontejnery jsou dva z nejdůležitějších aspektů.
Kontejnery Podman bez rootu (viz Spuštění rootless Podman jako uživatel bez root a kontejnery Rootless s Podmanem:Základy) a OpenShift Container Platform ve výchozím nastavení implementují princip nejmenších oprávnění, což pomáhá správcům prosazovat osvědčené postupy zabezpečení. Nabídky registru kontejnerů Red Hat quay.io a Red Hat quay pomáhají správcům a vývojářům začlenit skenování zranitelnosti obrázků do jejich kanálů CI/CD.
[ Mohlo by se vám také líbit čtení: Vylepšená integrace systému s Podmanem 2.0 ]
Red Hat spravuje quay.io, hostovaný veřejný registr kontejnerů. Jednotlivci nebo podniky mohou používat registr k ukládání a sdílení obrázků kontejnerů (v rámci organizace nebo pro širokou veřejnost). Red Hat Universal Base Images (UBI) jsou založeny na RHEL a nabízejí způsob, jak volně vytvářet a sdílet obrázky aplikací.
Registr má vestavěný bezpečnostní skener, který kontroluje zranitelnosti obrázků, poskytuje podrobnosti o balíčcích v obrázku a identifikuje zranitelnosti s jejich přidruženými opravami. Organizuje zranitelnosti do kategorií nízké, střední a vysoké závažnosti. Poskytuje také metadata, jako je číslo CVE a odkaz na chyby související s chybami zabezpečení. Jak obrazy kontejnerů stárnou, objevují se nové CVE, takže v tomto článku se podíváme na starší verzi UBI. Například v době psaní tohoto článku mělo jedno z konkrétních sestavení ubi8 (8.2-299) následující výstup zvýrazňující 178 balíčků (10 balíčků s vysokým dopadem) a 38 zranitelností (10 vysoce).
Uživatelské rozhraní quay.io poskytuje informace týkající se zranitelností v uživatelsky přívětivém formátu. Je možné procházet seznam balíčků, zkontrolovat ovlivněné balíčky a zobrazit podrobnosti o zranitelnosti. U organizací zaměřených na DevSecOps je však výhodné získat tyto informace za chodu a využít je před každým nasazením, aby bylo zajištěno, že se do produkčního prostředí dostanou pouze zabezpečené obrazy.
Tento článek předpokládá určitou základní znalost konceptů quay.io, jako jsou úložiště, účty robotů a obecné úkoly, jako je vytváření obrázků (pomocí DockerFiles) a označování obrázků. V případě, že se chcete dozvědět více o těchto konceptech, můžete se podívat do uživatelských příruček quay.io.
Chcete-li získat informace o skenování prostřednictvím příkazového řádku, použijte skopeo
a jq
příkazy. Skopeo umožňuje uživatelům nejen prohlížet obrázky, aniž by je museli nejprve stahovat do místního počítače, ale také podporuje kopírování obrázků z jednoho úložiště (místního nebo vzdáleného) do druhého.
Následující příkaz načte metadata obrázku podobná docker inspect
příkaz provedený proti místnímu obrazu:
# IMAGE_NAME='app-sre/ubi8-ubi'
# IMAGE_TAG='8.2-299'
# skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG
Abychom získali jedinečný výtah obrázku, můžeme analyzovat přijatý výstup json pomocí jq
příkaz.
# IMAGE_DIGEST=`skopeo inspect docker://quay.io/$IMAGE_NAME:$IMAGE_TAG | jq -r .Digest`
Pomocí výtahu můžete získat zprávu o zabezpečení obrázku dotazem na rozhraní API quay.io. Výstup (soubor json) můžeme uložit do lokálního souboru a využít jq
pro filtrování požadovaného obsahu.
# curl -o `basename $IMAGE_NAME`.json https://quay.io/api/v1/repository/$IMAGE_NAME/manifest/$IMAGE_DIGEST/security?vulnerabilities=true
Chcete-li například získat informace týkající se zranitelností s vysokou závažností s přidruženým ID upozornění, adresou URL upozornění, názvem balíčku, jeho ovlivněnou verzí a verzí, která obsahuje opravy, lze použít následující příkaz:
jq '.data.Layer.Features[]' `basename $IMAGE_NAME`.json | jq -c '{"Name":.Name,"Version":.Version,"Advisory":.Vulnerabilities[]} | select(.Advisory.Severity=="High") | {"Advisory":.Advisory.Name,"Link":.Advisory.Link,"PACKAGE":.Name,"CURRENT VERSION":.Version,"FIXED IN VERSION":.Advisory.FixedBy }'
Příkaz vytvoří výstup podobný následujícímu, což znamená, že tento obrázek UBI (app-sre/ubi8-ubi) má 10 upozornění:
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-tools","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-libs","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-common","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus-daemon","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
{"Advisory":"RHSA-2020:2755","Link":"https://access.redhat.com/errata/RHSA-2020:2755","PACKAGE":"libnghttp2","CURRENT VERSION":"1.33.0-1.el8_0.1","FIXED IN VERSION":"0:1.33.0-3.el8_2.1"}
{"Advisory":"RHSA-2020:5476","Link":"https://access.redhat.com/errata/RHSA-2020:5476","PACKAGE":"openssl-libs","CURRENT VERSION":"1:1.1.1c-15.el8","FIXED IN VERSION":"1:1.1.1g-12.el8_3"}
{"Advisory":"RHSA-2020:3658","Link":"https://access.redhat.com/errata/RHSA-2020:3658","PACKAGE":"python3-librepo","CURRENT VERSION":"1.11.0-2.el8","FIXED IN VERSION":"0:1.11.0-3.el8_2"}
{"Advisory":"RHSA-2020:2637","Link":"https://access.redhat.com/errata/RHSA-2020:2637","PACKAGE":"gnutls","CURRENT VERSION":"3.6.8-10.el8_2","FIXED IN VERSION":"0:3.6.8-11.el8_2"}
{"Advisory":"RHSA-2020:3014","Link":"https://access.redhat.com/errata/RHSA-2020:3014","PACKAGE":"dbus","CURRENT VERSION":"1:1.12.8-9.el8","FIXED IN VERSION":"1:1.12.8-10.el8_2"}
[ Volný kurz:Red Hat Satellite Technical Overview. ]
Sbalit
V další části této série článků začleňuji informace z tohoto článku do vzorového kanálu, abych se mohl informovaně rozhodnout, zda pokračovat s tímto obrázkem a nasadit aplikace do produkce.