Megosztás a következőn keresztül:


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

Notation CLI és AKV beépülő modul telepítése

  1. 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
    
  2. 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
    
  3. 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.

  1. 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
    
  2. 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.

  1. Az ACR-erőforrást tartalmazó előfizetés beállítása

    az account set --subscription $ACR_SUB_ID
    
  2. 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 ö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ához
  • Key Vault Certificates Usermeglévő tanúsítványok olvasásához
  • Key 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.

  1. Az AKV-erőforrást tartalmazó előfizetés beállítása

    az account set --subscription $AKV_SUB_ID
    
  2. 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élyek
  • Get meglévő tanúsítványok olvasására vonatkozó engedélyek
  • Sign 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.

  1. Állítsa be az AKV-erőforrást tartalmazó előfizetést:

    az account set --subscription $AKV_SUB_ID
    
  2. 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.

  1. 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
    
  2. 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

  1. 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.

  1. Ú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
    
  2. 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)
    
  3. Í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:

    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íthatja credential_type az azurecli 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
  4. 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.

  1. Nyilvános tanúsítvány letöltése.

    az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
    
  2. 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
    
  3. Listázhatja a megerősítendő tanúsítványt.

    notation cert ls
    
  4. 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-imagesmegbí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_TYPEhaszná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
    
  5. 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
    
  6. 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:

Az aláírt rendszerkép üzembe helyezésének ellenőrzése az AKS-ben vagy a Kubernetesben: