Většina obrázků Docker je distribuována bez jakéhokoli ověření, že jsou tím, za co se vydávají. Důvěru ve své obrázky můžete zvýšit jejich digitálním podpisem. To uživatelům dokazuje, že jste obrázek publikovali vy, nikoli podvodník.
Podepisovací systém Docker je známý jako důvěryhodnost obsahu. Zpřístupňuje se prostřednictvím docker trust
příkaz CLI. Content Trust používá sady klíčů, které umožňují registrům ověřit identitu potenciálních vydavatelů. Uživatelé podepsaných obrázků si mohou být jisti, že pocházejí z očekávaného zdroje.
Generování klíčů
Abyste mohli začít používat Content Trust, budete potřebovat pár klíčů. Páry klíčů mohou být vydány certifikačními autoritami nebo vygenerovány rozhraním CLI Docker.
Spusťte docker trust key generate your-name
vytvořit klíč. Budete vyzváni k zadání přístupové fráze. Ten bude nutné zadat pokaždé, když použijete klíč k podepisování nebo ověřování obrázků. Pokračujte stisknutím klávesy Enter při každé výzvě.
Až budete hotovi, vygenerují se dva soubory v ~/.docker/trust
:soukromý klíč a jeho odpovídající veřejný klíč. Podobně jako u SSH klíčů by soukromý klíč neměl být nikdy sdílen a nesmí být ztracen. Pokud se potřebujete přesouvat mezi počítači, můžete importovat soubor soukromého klíče do jiné instalace Dockeru pomocí docker trust key load my-key.pem
.
Přidání veřejného klíče do vašeho registru
Docker Hub podporuje všechny funkce docker trust
. Pokud používáte soukromý server registru Docker, je vyžadován složitější proces nastavení.
Server registru nenabízí integrovanou podporu podpisů. Potřebujete samostatnou službu Docker Notary, která se postará o ověření podpisu pro odesílání a stahování obrázků. Notary má tři součásti, server, podepisovací službu a databázi MySQL. Měl by být nasazen na stejné adrese URL jako váš server registru.
Notary můžete spustit a spustit pomocí jeho souboru Docker Compose:
git clone https://github.com/theupdateframework/notary.git
docker-compose up -d
Toto základní nasazení poběží s certifikátem TLS s vlastním podpisem. Je určen pouze pro vývojářské použití. Budete muset důvěřovat souboru certifikační autority fixtures/root-ca.crt
v úložišti, než se klienti budou moci úspěšně připojit.
sudo mkdir -p /usr/share/ca-certificates/extra
sudo cp fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt
sudo update-ca-certificates
Výše uvedené příkazy zkopírují soubor certifikátu do ca-certificates
umístění skladu. update-ca-certificates
znovu načte všechny certifikáty a přidá do vašeho systému notářské oprávnění.
Pokud budete Notary provozovat v produkci, budete muset nastavit ověřování, aby nové klíče mohli přidávat pouze oprávnění uživatelé. NOTARY_AUTH
proměnná prostředí by měla být nastavena při spouštění služby pomocí docker-compose
. Toto přijímá přihlašovací údaje zakódované v Base64 v username:password
formát. Budete vyzváni k jejich poskytnutí při interakci s Notary.
export NOTARY_AUTH=$(echo "username" | base64):$(echo "password" | base64)
docker-compose up -d
Nyní jste připraveni přidat svůj veřejný klíč na server Notary. Klíče jsou přidávány na základě jednotlivých úložišť. To vám umožní izolovat obrázky od sebe a umožňuje podporu pro delegované přispěvatele třetích stran. Další osoby s právy k publikování můžete přidat později tak, že je přimějete opakovat příkaz se svým soukromým klíčem.
docker trust signer add your-key-name registry.example.com/my-image
Budete muset zadat přístupovou frázi klíče. Poté bude k dispozici na vašem registru serveru.
Podepisování obrázků
Jakmile je váš klíč v registru, můžete začít podepisovat obrázky. Použijte docker trust sign
příkaz. Ujistěte se, že každý obrázek je označen správnou adresou URL registru.
docker trust sign registry.example.com/my-image:latest
Tento příkaz podepíše obrázek vaším klíčem a poté jej vloží přímo do registru. Není třeba ručně spouštět docker push
později. Budete muset nastavit klíč úložiště a přístupovou frázi, abyste chránili důvěryhodná data jednotlivých obrázků. Podle každé výzvy nastavte své podpisové klíče.
Pokud máte existující pracovní postupy pomocí docker push
, můžete se rozhodnout pro tento příkaz namísto docker trust
. Dokončením předchozích kroků vytvořte klíč a přidejte jej do Notary. Nastavte DOCKER_CONTENT_TRUST
prostředí, aby příkazy Docker CLI detekovaly Content Trust a automaticky jej aplikovaly.
export DOCKER_CONTENT_TRUST=1
docker push registry.example.com/my-image:latest
Uvidíte, že výstup shellu odpovídá docker trust sign
vyrábí. Docker provádí stejné akce jako explicitnější příkaz.
Ověřování důvěryhodných obrázků
DOCKER_CONTENT_TRUST
proměnná se znovu objeví s větší důležitostí, pokud jde o ověřování vytažených obrázků. Docker se ve výchozím nastavení nepokouší ověřovat obrázky, i když obsahují důvěryhodná data. Chcete-li aktivovat ověření důvěryhodnosti obsahu, musíte ve svém prostředí nastavit proměnnou prostředí.
export DOCKER_CONTENT_TRUST=1
docker pull registry.example.com/my-image:latest
Když je proměnná nastavena, všechna stahování obrázků budou zkontrolována proti notářskému serveru jejich registru. Pokud Notary nemůže poskytnout žádná důvěryhodná data, bude se s obrázkem nakládat jako s nepodepsaným a stahování bude přerušeno. To vás chrání před obrázky publikovanými zlomyslnými herci vydávajícími se za skutečného vydavatele.
Uživatelé Docker Enterprise mohou nakonfigurovat volitelné nastavení démona, aby zabránili Docker Engine pracovat s nedůvěryhodnými obrázky, které jsou již na hostiteli. Ty mohly být doručeny v tar
archivy z nebezpečného zdroje.
Upravte /etc/docker/daemon.json
a přidejte následující klíč:
{
"content-trust": {
"mode": "enforced"
}
}
Znovu načtěte konfiguraci démona Docker pomocí systemctl reload docker
aplikujte změnu.
Stav důvěryhodnosti obrázku můžete zkontrolovat pomocí docker trust inspect
. Zobrazí se podpisy spojené s obrázkem, což vám umožní zkontrolovat, zda byl podepsán.
docker trust inspect registry.example.com/my-image:latest
Pokud jste publikovali obrázek, který již nechcete podepisovat, použijte docker trust revoke
příkaz. Tím se vymažou důvěryhodná data obrázku, což způsobí, že selžou všechna následná ověření klienta Docker.
docker trust revoke registry.example.com/my-image:latest
Přehled
Docker Content Trust přidává digitální podpisy do ekosystému Docker, čímž zvyšuje bezpečnost při používání obrázků. Pokud posíláte obrázky do Docker Hub, máte již vše, co potřebujete k použití této funkce. Nastavte DOCKER_CONTENT_TRUST
prostředí a používejte příkazy Docker jako obvykle.
Pro uživatele registru s vlastním hostitelem je nastavení složitější, ale stále stojí za námahu v prostředí kritickém pro důvěru. V době psaní tohoto článku Notary stále nemá oficiální stabilní verzi a dokumentace je uložena v jeho úložišti GitHub.