Tárolórendszerképek aláírása a Notation és az Azure Key Vault használatával önaláírt tanúsítvány használatával
A tárolólemezképek aláírása olyan folyamat, amely biztosítja azok hitelességét és integritását. Ez úgy érhető el, hogy hozzáad egy digitális aláírást a tároló lemezképéhez, amely az üzembe helyezés során érvényesíthető. Az aláírás segít ellenőrizni, hogy a rendszerkép megbízható közzétevőtől származik-e, és nem lett-e módosítva. A Notation egy nyílt forráskód ellátási lánc biztonsági eszköze, amelyet a Közjegyzői projekt közössége fejlesztett ki, és amelyet a Microsoft támogat, amely támogatja a tárolólemezképek és egyéb összetevők aláírását és ellenőrzését. Az Azure Key Vault (AKV) a Notation AKV beépülő modullal (azure-kv) használható aláírókulcsokkal rendelkező tanúsítványok tárolására szolgál a tárolólemezképek és egyéb összetevők aláírásához és ellenőrzéséhez. Az Azure Container Registry (ACR) lehetővé teszi, hogy aláírásokat csatoljon a tárolórendszerképekhez és más összetevőkhöz, valamint megtekintheti ezeket az aláírásokat.
Ebben az oktatóanyagban:
- Notation CLI és AKV beépülő modul telepítése
- Önaláírt tanúsítvány létrehozása az AKV-ban
- Tárolórendszerkép létrehozása és leküldése az ACR Tasks használatával
- Tárolólemezkép aláírása a Notation CLI és az AKV beépülő modullal
- Tárolórendszerkép érvényesítése az aláírással a Notation CLI használatával
- Időbélyegző
Előfeltételek
- Tárolólemezképek és -aláírások tárolására szolgáló Azure Container Registry létrehozása vagy használata
- Azure Key Vault létrehozása vagy használata tanúsítványok kezeléséhez
- Telepítse és konfigurálja a legújabb Azure CLI-t, vagy futtassa a parancsokat az Azure Cloud Shellben
Notation CLI és AKV beépülő modul telepítése
Telepítse a Notation 1.2.0-s verzióját Linux amd64-környezetben. Kövesse a Notation telepítési útmutatóját a csomag letöltéséhez más környezetekhez.
# Download, extract and install curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.2.0/notation_1.2.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
Telepítse a Notation Azure Key Vault 1.2.0-s beépülő modult
azure-kv
Linux amd64-környezetben.Feljegyzés
A Notation Azure Key Vault beépülő modul URL-címe és SHA256 ellenőrzőösszege a beépülő modul kiadási oldalán található.
notation plugin install --url https://github.com/Azure/notation-azure-kv/releases/download/v1.2.0/notation-azure-kv_1.2.0_linux_amd64.tar.gz --sha256sum 06bb5198af31ce11b08c4557ae4c2cbfb09878dfa6b637b7407ebc2d57b87b34
Sorolja fel az elérhető beépülő modulokat, és győződjön meg arról, hogy a
azure-kv
verziójú1.2.0
beépülő modul szerepel a listában.notation plugin ls
Környezeti változók konfigurálása
Feljegyzés
Az oktatóanyag parancsainak egyszerű végrehajtásához adjon meg értékeket az Azure-erőforrások számára, hogy megfeleljenek a meglévő ACR- és AKV-erőforrásoknak.
Konfigurálja az AKV-erőforrásneveket.
AKV_SUB_ID=myAkvSubscriptionId AKV_RG=myAkvResourceGroup # 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
Konfigurálja az ACR- és képerőforrás-neveket.
ACR_SUB_ID=myAcrSubscriptionId ACR_RG=myAcrResourceGroup # 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
Bejelentkezés az Azure CLI használatával
az login
Ha többet szeretne megtudni az Azure CLI-ről és arról, hogyan jelentkezhet be vele, olvassa el a Bejelentkezés az Azure CLI-vel című témakört.
Biztonságos hozzáférési engedélyek az ACR-hez és az AKV-hoz
Az ACR és az AKV használatakor elengedhetetlen a megfelelő engedélyek megadása a biztonságos és szabályozott hozzáférés biztosításához. Az adott forgatókönyvek függvényében engedélyezheti a hozzáférést különböző entitásokhoz, például felhasználói tagokhoz, szolgáltatásnevekhez vagy felügyelt identitásokhoz. Ebben az oktatóanyagban a hozzáférés egy bejelentkezett Azure-felhasználó számára engedélyezett.
Hozzáférés engedélyezése az ACR-hez
AcrPush
A AcrPull
tárolólemezképek ACR-ben való aláírásához és a szerepkörökre van szükség.
Az ACR-erőforrást tartalmazó előfizetés beállítása
az account set --subscription $ACR_SUB_ID
Szerepkörök hozzárendelése
USER_ID=$(az ad signed-in-user show --query id -o tsv) az role assignment create --role "AcrPull" --role "AcrPush" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
Hozzáférés engedélyezése az AKV-hoz
Ebben a szakaszban az AKV-hozzáférés engedélyezésének két lehetőségét ismertetjük.
Az Azure RBAC használata (ajánlott)
Az önaláírt tanúsítványok használatával történő aláíráshoz a következő szerepkörök szükségesek:
Key Vault Certificates Officer
tanúsítványok létrehozásához és olvasásáhozKey Vault Certificates User
meglévő tanúsítványok olvasásáhozKey Vault Crypto User
aláírási műveletekhez
Az Azure RBAC-hez való Key Vault-hozzáférésről további információt az Azure RBAC használata a hozzáférés kezeléséhez című témakörben talál.
Az AKV-erőforrást tartalmazó előfizetés beállítása
az account set --subscription $AKV_SUB_ID
Szerepkörök hozzárendelése
USER_ID=$(az ad signed-in-user show --query id -o tsv) az role assignment create --role "Key Vault Certificates Officer" --role "Key Vault Crypto User" --assignee $USER_ID --scope "/subscriptions/$AKV_SUB_ID/resourceGroups/$AKV_RG/providers/Microsoft.KeyVault/vaults/$AKV_NAME"
Hozzáférési szabályzat hozzárendelése az AKV-ban (örökölt)
Az identitáshoz a következő engedélyek szükségesek:
Create
tanúsítványok létrehozásához szükséges engedélyekGet
meglévő tanúsítványok olvasására vonatkozó engedélyekSign
aláírási műveletekhez szükséges engedélyek
Ha többet szeretne tudni a szabályzat egyszerűhöz való hozzárendeléséről, olvassa el a Hozzáférési szabályzat hozzárendelése című témakört.
Állítsa be az AKV-erőforrást tartalmazó előfizetést:
az account set --subscription $AKV_SUB_ID
A hozzáférési szabályzat beállítása az AKV-ban:
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
Fontos
Ez a példa a tanúsítvány létrehozásához és egy tárolólemezkép aláírásához szükséges minimális engedélyeket mutatja be. A követelményektől függően előfordulhat, hogy további engedélyeket kell adnia.
Önaláírt tanúsítvány létrehozása az AKV-ban (Azure CLI)
Az alábbi lépések bemutatják, hogyan hozhat létre önaláírt tanúsítványt tesztelési célra.
Hozzon létre egy tanúsítványszabályzatfájlt.
A tanúsítványházirend-fájl alább ismertetett végrehajtása után létrehoz egy érvényes tanúsítványt, amely kompatibilis a Közjegyzői Projekt tanúsítványkövetelményével az AKV-ban. Ennek értéke
ekus
kódaláírás, de nem szükséges az összetevők aláírásához. A tulajdonos később megbízható identitásként lesz használva, amelyet a felhasználó az ellenőrzés során megbízik.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
Hozza létre a tanúsítványt.
az keyvault certificate create -n $CERT_NAME --vault-name $AKV_NAME -p @my_policy.json
Tárolólemezkép aláírása a Notation CLI és az AKV beépülő modullal
Hitelesítés az ACR-ben az egyéni Azure-identitás használatával.
az acr login --name $ACR_NAME
Fontos
Ha a Docker telepítve van a rendszeren, és használja az acr login
vagy docker login
hitelesíti az ACR-t, a rendszer már tárolja és elérhetővé teszi a hitelesítő adatait a jelöléshez. Ebben az esetben nem kell újra futtatnia notation login
az ACR-hitelesítéshez. A jelölések hitelesítési lehetőségeiről további információt az OCI-kompatibilis regisztrációs adatbázisokkal való hitelesítés című témakörben talál.
Új rendszerkép létrehozása és leküldése az ACR Tasks használatával. Mindig használja a kivonatoló értéket a rendszerkép aláíráshoz való azonosításához, mivel a címkék nem módosíthatók, és felülírhatók.
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
Ebben az oktatóanyagban, ha a rendszerkép már elkészült, és a beállításjegyzékben van tárolva, a címke a rendszerkép azonosítójaként szolgál a kényelem érdekében.
IMAGE=$REGISTRY/${REPO}:$TAG
Kérje le az aláírókulcs kulcsazonosítóját. Az AKV-tanúsítványok több verzióval is rendelkezhetnek, az alábbi parancs a legújabb verzió kulcsazonosítóját kapja meg.
KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv)
Írja alá a tárolórendszerképet COSE aláírási formátummal az aláírókulcs azonosítójával. Ha önaláírt tanúsítvánnyal szeretne bejelentkezni, be kell állítania a beépülő modul konfigurációs értékét
self_signed=true
.notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true $IMAGE
Az AKV-val való hitelesítéshez alapértelmezés szerint a következő hitelesítőadat-típusok lesznek kipróbálva, ha engedélyezve van, sorrendben:
- Környezeti hitelesítő adatok
- Számítási feladat identitásának hitelesítő adatai
- Felügyelt identitás hitelesítő adatai
- Azure CLI-hitelesítő adatok
Ha hitelesítő adattípust szeretne megadni, használjon egy további, úgynevezett beépülő modulkonfigurációt
credential_type
. Például explicit módon beállíthatjacredential_type
azazurecli
Azure CLI-hitelesítő adatok használatát, az alábbiak szerint:notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true --plugin-config credential_type=azurecli $IMAGE
Az alábbi táblázat a
credential_type
különböző hitelesítő adatok értékeit ismerteti.Hitelesítő adatok típusa Érték a következőhöz: credential_type
Környezeti hitelesítő adatok environment
Számítási feladat identitásának hitelesítő adatai workloadid
Felügyelt identitás hitelesítő adatai managedid
Azure CLI-hitelesítő adatok azurecli
Tekintse meg az aláírt képek és a társított aláírások grafikonját.
notation ls $IMAGE
Tárolólemezkép ellenőrzése a Notation parancssori felülettel
A tároló lemezképének ellenőrzéséhez adja hozzá a levéltanúsítványt aláíró főtanúsítványt a megbízhatósági tárolóhoz, és hozzon létre megbízhatósági szabályzatokat az ellenőrzéshez. Az oktatóanyagban használt önaláírt tanúsítvány esetében a főtanúsítvány maga az önaláírt tanúsítvány.
Nyilvános tanúsítvány letöltése.
az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
Adja hozzá a letöltött nyilvános tanúsítványt az elnevezett megbízhatósági tárolóhoz aláírás-ellenőrzés céljából.
STORE_TYPE="ca" STORE_NAME="wabbit-networks.io" notation cert add --type $STORE_TYPE --store $STORE_NAME $CERT_PATH
Listázhatja a megerősítendő tanúsítványt.
notation cert ls
Az ellenőrzés előtt konfigurálja a megbízhatósági szabályzatot.
A megbízhatósági szabályzatok lehetővé teszik a felhasználók számára, hogy finomhangolt ellenőrzési szabályzatokat adjanak meg. Az alábbi példa egy névvel ellátott
wabbit-networks-images
megbízhatósági szabályzatot konfigurál, amely az összes összetevőre$REGISTRY/$REPO
vonatkozik, és a névvel ellátott megbízhatósági tárolót$STORE_NAME
$STORE_TYPE
használja. Azt is feltételezi, hogy a felhasználó megbízik egy adott identitásban az X.509 tárgyával$CERT_SUBJECT
. További részletekért lásd : Megbízhatósági tároló és megbízhatósági szabályzat specifikációja.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
A
notation policy
korábban létrehozott JSON-fájlból importálhatja a megbízhatósági szabályzat konfigurációját.notation policy import ./trustpolicy.json notation policy show
Annak ellenőrzésére használható
notation verify
, hogy a tároló lemezképe nem módosult-e a létrehozási idő óta.notation verify $IMAGE
A rendszerkép megbízhatósági szabályzattal történő sikeres ellenőrzése után az ellenőrzött rendszerkép sha256-kivonata egy sikeres kimeneti üzenetben jelenik meg.
Időbélyegző
A Notation 1.2.0-s verziójának megjelenése óta a Notation támogatja az RFC 3161-kompatibilis időbélyegzést. Ez a fejlesztés kibővíti a tanúsítvány érvényességi időszakában létrehozott aláírások megbízhatóságát egy időbélyegző szolgáltató (TSA) megbízhatóságával, amely lehetővé teszi a sikeres aláírás-ellenőrzést még a tanúsítványok lejárta után is. Rendszerkép-aláíróként gondoskodnia kell arról, hogy megbízható TSA által generált időbélyegekkel írja alá a tárolólemezképeket. A rendszerkép-ellenőrzőként az időbélyegek ellenőrzéséhez meg kell győződnie arról, hogy a rendszerkép-aláíróban és a kapcsolódó TSA-ban is megbízik, és megbízhatósági tárolókon és megbízhatósági szabályzatokon keresztül hozza létre a bizalmat. Az időbélyegzés azáltal csökkenti a költségeket, hogy nem kell rendszeresen újra aláírni a rendszerképeket a tanúsítvány lejárata miatt, ami különösen fontos a rövid élettartamú tanúsítványok használatakor. Az aláírással és a munkaidő-ellenőrzéssel kapcsolatos részletes útmutatásért tekintse meg a Közjegyzői Projekt időbélyegző útmutatójában.
Következő lépések
A Notation CI-/CD-megoldásokat is kínál az Azure Pipeline és a GitHub Actions munkafolyamatában:
- Tárolórendszerkép aláírása és ellenőrzése a Notation használatával az Azure Pipeline-ban
- Tárolórendszerkép aláírása és ellenőrzése a Notation használatával a GitHub Actions munkafolyamatában
Az aláírt rendszerkép üzembe helyezésének ellenőrzése az AKS-ben vagy a Kubernetesben: