Podepisování imagí kontejnerů pomocí notace a služby Azure Key Vault pomocí certifikátu podepsaného svým držitelem
Podepisování imagí kontejnerů je proces, který zajišťuje jejich pravost a integritu. Toho dosáhnete přidáním digitálního podpisu do image kontejneru, kterou je možné ověřit během nasazování. Podpis pomáhá ověřit, zda je image od důvěryhodného vydavatele a nebyla změněna. Zápis je opensourcový nástroj dodavatelského řetězce vyvinutý notárním projektem, který podporuje podepisování a ověřování imagí kontejnerů a dalších artefaktů. Azure Key Vault (AKV) slouží k ukládání certifikátů s podpisovými klíči, které se dají používat v notaci s modulem plug-in Notation AKV (azure-kv) k podepisování a ověřování imagí kontejnerů a dalších artefaktů. Azure Container Registry (ACR) umožňuje připojit podpisy k imagím kontejnerů a dalším artefaktům a také zobrazit tyto podpisy.
V tomto kurzu:
- Instalace modulu plug-in Notation CLI a AKV
- Vytvoření certifikátu podepsaného svým držitelem v AKV
- Sestavení a nasdílení image kontejneru pomocí ACR Tasks
- Podepsání image kontejneru pomocí notačního rozhraní příkazového řádku a modulu plug-in AKV
- Ověření image kontejneru u podpisu pomocí rozhraní příkazového řádku notace
Požadavky
- Vytvoření nebo použití služby Azure Container Registry k ukládání imagí a podpisů kontejnerů
- Vytvoření nebo použití služby Azure Key Vault ke správě certifikátů
- Instalace a konfigurace nejnovějších příkazů Azure CLI nebo spuštění v Azure Cloud Shellu
Instalace modulu plug-in Notation CLI a AKV
Nainstalujte notaci v1.1.0 v prostředí Linux amd64. Pokud chcete stáhnout balíček pro jiná prostředí, postupujte podle průvodce instalací notace.
# Download, extract and install curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.1.0/notation_1.1.0_linux_amd64.tar.gz tar xvzf notation.tar.gz # Copy the Notation binary to the desired bin directory in your $PATH, for example cp ./notation /usr/local/bin
Nainstalujte modul plug-in
azure-kv
Azure Key Vault v1.1.0 v linuxovém prostředí amd64.Poznámka:
Kontrolní součet ADRESY URL a SHA256 modulu plug-in Notation Azure Key Vault najdete na stránce verze modulu plug-in.
notation plugin install --url https://github.com/Azure/notation-azure-kv/releases/download/v1.1.0/notation-azure-kv_1.1.0_linux_amd64.tar.gz --sha256sum 2fc959bf850275246b044203609202329d015005574fabbf3e6393345e49b884
Uveďte dostupné moduly plug-in a potvrďte, že je modul
azure-kv
plug-in s verzí1.1.0
součástí seznamu.notation plugin ls
Konfigurace proměnných prostředí
Poznámka:
Pro snadné provádění příkazů v kurzu zadejte hodnoty prostředků Azure tak, aby odpovídaly existujícím prostředkům ACR a AKV.
Nakonfigurujte názvy prostředků AKV.
# Name of the existing AKV used to store the signing keys AKV_NAME=myakv # Name of the certificate created in AKV CERT_NAME=wabbit-networks-io CERT_SUBJECT="CN=wabbit-networks.io,O=Notation,L=Seattle,ST=WA,C=US" CERT_PATH=./${CERT_NAME}.pem
Nakonfigurujte názvy prostředků ACR a image.
# Name of the existing registry example: myregistry.azurecr.io ACR_NAME=myregistry # Existing full domain of the ACR REGISTRY=$ACR_NAME.azurecr.io # Container name inside ACR where image will be stored REPO=net-monitor TAG=v1 IMAGE=$REGISTRY/${REPO}:$TAG # Source code directory containing Dockerfile to build IMAGE_SOURCE=https://github.com/wabbit-networks/net-monitor.git#main
Přihlášení pomocí Azure CLI
az login
Další informace o Azure CLI a o tom, jak se k němu přihlásit, najdete v tématu Přihlášení pomocí Azure CLI.
Přiřazení zásad přístupu v AKV (Azure CLI)
Objekt zabezpečení uživatele se správnými oprávněními zásad přístupu je potřeba k vytvoření certifikátu podepsaného svým držitelem a artefaktů podpisu. Tento objekt zabezpečení může být instanční objekt, instanční objekt nebo spravovaná identita. Minimálně tento objekt zabezpečení potřebuje následující oprávnění:
Create
oprávnění pro certifikátyGet
oprávnění pro certifikátySign
oprávnění pro klíče
V tomto kurzu se zásady přístupu přiřadí přihlášeným uživatelům Azure. Další informace o přiřazování zásad k objektu zabezpečení najdete v tématu Přiřazení zásad přístupu.
Nastavení předplatného obsahujícího prostředek AKV
az account set --subscription <your_subscription_id>
Nastavení zásad přístupu v AKV
USER_ID=$(az ad signed-in-user show --query id -o tsv)
az keyvault set-policy -n $AKV_NAME --certificate-permissions create get --key-permissions sign --object-id $USER_ID
Důležité
Tento příklad ukazuje minimální oprávnění potřebná k vytvoření certifikátu a podepsání image kontejneru. V závislosti na vašich požadavcích možná budete muset udělit další oprávnění.
Vytvoření certifikátu podepsaného svým držitelem v AKV (Azure CLI)
Následující kroky ukazují, jak vytvořit certifikát podepsaný svým držitelem pro účely testování.
Vytvořte soubor zásad certifikátu.
Jakmile se soubor zásad certifikátu spustí, jak je uvedeno níže, vytvoří platný certifikát kompatibilní s požadavkem na certifikát notárního projektu v AKV. Hodnota
ekus
pro podepisování kódu, ale není vyžadována pro zápis artefaktů. Předmět se použije později jako identita důvěryhodnosti, kterou uživatel při ověřování důvěřuje.cat <<EOF > ./my_policy.json { "issuerParameters": { "certificateTransparency": null, "name": "Self" }, "keyProperties": { "exportable": false, "keySize": 2048, "keyType": "RSA", "reuseKey": true }, "secretProperties": { "contentType": "application/x-pem-file" }, "x509CertificateProperties": { "ekus": [ "1.3.6.1.5.5.7.3.3" ], "keyUsage": [ "digitalSignature" ], "subject": "$CERT_SUBJECT", "validityInMonths": 12 } } EOF
Vytvořte certifikát.
az keyvault certificate create -n $CERT_NAME --vault-name $AKV_NAME -p @my_policy.json
Podepsání image kontejneru pomocí notačního rozhraní příkazového řádku a modulu plug-in AKV
Ověřte se ve službě ACR pomocí vaší individuální identity Azure.
az acr login --name $ACR_NAME
Důležité
Pokud máte ve svém systému nainstalovaný Docker a používáte az acr login
nebo docker login
se ověřuje ve službě ACR, vaše přihlašovací údaje jsou už uložené a dostupné pro zápis. V takovém případě nemusíte znovu spouštět notation login
, abyste se ověřili ve službě ACR. Další informace o možnostech ověřování pro zápis najdete v tématu Ověřování pomocí registrů kompatibilních s OCI.
Sestavte a nasdílíte novou image pomocí ACR Tasks. Vždy použijte hodnotu digest k identifikaci obrázku pro podepisování, protože značky jsou proměnlivé a lze je přepsat.
DIGEST=$(az acr build -r $ACR_NAME -t $REGISTRY/${REPO}:$TAG $IMAGE_SOURCE --no-logs --query "outputImages[0].digest" -o tsv) IMAGE=$REGISTRY/${REPO}@$DIGEST
Pokud už je image v tomto kurzu sestavená a uložená v registru, slouží značka jako identifikátor pro tuto image, aby byla pro usnadnění použití.
IMAGE=$REGISTRY/${REPO}:$TAG
Získejte ID klíče podpisového klíče. Certifikát v AKV může mít více verzí, následující příkaz získá ID klíče nejnovější verze.
KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv)
Podepište image kontejneru pomocí formátu podpisu COSE pomocí ID podpisového klíče. Pokud chcete podepsat certifikát podepsaný svým držitelem, musíte nastavit hodnotu
self_signed=true
konfigurace modulu plug-in .notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true $IMAGE
Pokud se chcete ve výchozím nastavení ověřit pomocí AKV, zkusí se v pořadí vyzkoušet následující typy přihlašovacích údajů:
- Přihlašovací údaje prostředí
- Přihlašovací údaje identit úloh
- Přihlašovací údaje spravované identity
- Přihlašovací údaje Azure CLI
Pokud chcete zadat typ přihlašovacích údajů, použijte další konfiguraci modulu plug-in s názvem
credential_type
. Můžete například explicitně nastavitcredential_type
azurecli
použití přihlašovacích údajů Azure CLI, jak je znázorněno níže:notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true --plugin-config credential_type=azurecli $IMAGE
Hodnoty různých typů přihlašovacích
credential_type
údajů najdete v následující tabulce.Typ přihlašovacích údajů Hodnota pro credential_type
Přihlašovací údaje prostředí environment
Přihlašovací údaje identit úloh workloadid
Přihlašovací údaje spravované identity managedid
Přihlašovací údaje Azure CLI azurecli
Zobrazte graf podepsaných obrázků a přidružených podpisů.
notation ls $IMAGE
Ověření image kontejneru pomocí rozhraní příkazového řádku notace
Pokud chcete ověřit image kontejneru, přidejte kořenový certifikát, který podepíše listový certifikát do úložiště důvěryhodnosti, a vytvořte zásady důvěryhodnosti pro ověření. Pro certifikát podepsaný svým držitelem použitý v tomto kurzu je kořenový certifikát samotný certifikát podepsaný svým držitelem.
Stáhněte si veřejný certifikát.
az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
Přidejte stažený veřejný certifikát do pojmenovaného úložiště důvěryhodnosti pro ověření podpisu.
STORE_TYPE="ca" STORE_NAME="wabbit-networks.io" notation cert add --type $STORE_TYPE --store $STORE_NAME $CERT_PATH
Vypíše certifikát, který chcete potvrdit.
notation cert ls
Před ověřením nakonfigurujte zásady důvěryhodnosti.
Zásady důvěryhodnosti umožňují uživatelům zadat jemně vyladěné zásady ověřování. Následující příklad nakonfiguruje zásadu důvěryhodnosti s názvem
wabbit-networks-images
, která se vztahuje na všechny artefakty v$REGISTRY/$REPO
a používá pojmenované úložiště$STORE_NAME
důvěryhodnosti typu$STORE_TYPE
. Předpokládá také, že uživatel důvěřuje konkrétní identitě s předmětem$CERT_SUBJECT
X.509 . Další podrobnosti najdete v tématu Specifikace zásad důvěryhodnosti a úložiště důvěryhodnosti.cat <<EOF > ./trustpolicy.json { "version": "1.0", "trustPolicies": [ { "name": "wabbit-networks-images", "registryScopes": [ "$REGISTRY/$REPO" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "$STORE_TYPE:$STORE_NAME" ], "trustedIdentities": [ "x509.subject: $CERT_SUBJECT" ] } ] } EOF
Slouží
notation policy
k importu konfigurace zásad důvěryhodnosti ze souboru JSON, který jsme vytvořili dříve.notation policy import ./trustpolicy.json notation policy show
Slouží
notation verify
k ověření, že se image kontejneru od doby sestavení nezměnila.notation verify $IMAGE
Po úspěšném ověření image pomocí zásady důvěryhodnosti se hodnota hash sha256 ověřeného obrázku vrátí v úspěšné výstupní zprávě.
Další kroky
Před nasazením podepsaných imagí do clusterů Azure Kubernetes Service (AKS ) a Před nasazením podepsaných imagí do AKS se můžete seznámit s ověřováním a auditováním podepsaných imagí v Azure .