Sdílet prostřednictvím


Podepisování imagí kontejnerů pomocí notace a důvěryhodného podepisování (Preview)

Tento článek je součástí série o zajištění integrity a pravosti imagí kontejnerů a dalších artefaktů OCI (Open Container Initiative). Pro úplný obrázek začněte přehledem, který vysvětluje, proč podepisování záleží a popisuje různé scénáře.

Tento článek se zaměřuje na podepisování pomocí nástrojů notárního projektu, notace a důvěryhodného podepisování:

  • Dozvíte se tady: Jak pomocí rozhraní příkazového řádku notace (CLI) podepisovat artefakty pomocí důvěryhodného podepisování.
  • Kde se hodí: Důvěryhodné podepisování je alternativou ke službě Azure Key Vault. Služba Key Vault sice organizacím poskytuje úplnou kontrolu nad správou životního cyklu certifikátů, ale důvěryhodné podepisování poskytuje zjednodušené prostředí pro podepisování se správou životního cyklu certifikátů s nulovým dotykem a krátkodobými certifikáty.
  • Proč je důležité: Důvěryhodné podepisování zjednodušuje vývojářské prostředí a zároveň poskytuje silné záruky identit. Pomáhá týmům snižovat provozní složitost bez ohrožení zabezpečení.

Požadavky

Než budete moct podepsat a ověřit image kontejnerů pomocí notace a důvěryhodného podepisování, musíte nastavit požadované prostředky Azure a nainstalovat potřebné nástroje. Tato část vás provede přípravou služby Azure Container Registry, konfigurací důvěryhodného podepisování a nastavením Azure CLI jako vývojového prostředí.

Poznámka:

V tuto chvíli je důvěryhodné podepisování k dispozici pouze organizacím založeným ve Spojených státech a Kanadě, které mají ověřitelnou historii tří let nebo více.

Příprava imagí kontejnerů ve službě Azure Container Registry

  1. Vytvořte nebo použijte registr kontejneru k ukládání imagí kontejnerů, artefaktů OCI a podpisů.
  2. Nahrát nebo použít obraz kontejneru do registru kontejneru.

Nastavení důvěryhodného podepisování

Nastavte v předplatném Azure profil důvěryhodného podpisového účtu a certifikátu .

Váš profil certifikátu musí obsahovat zemi/oblast (C), stát nebo kraj (ST nebo S) a organizaci (O) v předmětu certifikátu. Specifikace notářského projektu vyžaduje tato pole.

Nastavení Azure CLI

Nainstalujte Azure CLI nebo použijte Azure Cloud Shell.

Instalace pluginu Notation CLI a důvěryhodného podpisového pluginu

Tato příručka spouští příkazy v systémech Linux AMD64 a Windows jako příklady.

  1. Instalace Notation CLI v1.3.2:

    curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.3.2/notation_1.3.2_linux_amd64.tar.gz
    # Validate the checksum
    EXPECTED_SHA256SUM="e1a0f060308086bf8020b2d31defb7c5348f133ca0dba6a1a7820ef3cbb6dfe5"
    echo "$EXPECTED_SHA256SUM  notation.tar.gz" | sha256sum -c -
    # Continue if sha256sum matches
    tar xvzf notation.tar.gz
    cp ./notation /usr/local/bin
    

    Pro informace o dalších platformách si přečtěte průvodce instalací notačního systému.

  2. Nainstalujte modul plug-in Důvěryhodné podepisování:

    notation plugin install --url "https://github.com/Azure/trustedsigning-notation-plugin/releases/download/v1.0.0-beta.1/notation-azure-trustedsigning_1.0.0-beta.1_linux_amd64.tar.gz" --sha256sum 538b497be0f0b4c6ced99eceb2be16f1c4b8e3d7c451357a52aeeca6751ccb44
    

    Najděte nejnovější adresu URL modulu plug-in a kontrolní součet na stránce vydané verze.

  3. Ověřte instalaci modulu plug-in:

    notation plugin ls
    

    Příklad výstupu:

    NAME                   DESCRIPTION                                            VERSION   CAPABILITIES                ERROR
    azure-trustedsigning   Sign OCI artifacts using the Trusted Signing Service   0.3.0     [SIGNATURE_GENERATOR.RAW]   <nil>
    

Konfigurace proměnných prostředí

Nastavte následující proměnné prostředí pro použití v následných příkazech. Zástupné symboly nahraďte skutečnými hodnotami.

Požadované hodnoty najdete na webu Azure Portal:

  • Informace o důvěryhodném podpisových účtech získáte tak, že přejdete na svůj účet a pak vyberete Přehled.
  • Informace o profilu certifikátu získáte tak, že přejdete na svůj účet a pak vyberete Objekty>Profily certifikátů.
# Trusted Signing environment variables
TS_SUB_ID="<subscription-id>"
TS_ACCT_RG=<ts-account-resource-group>
TS_ACCT_NAME=<ts-account-name>
TS_ACCT_URL=<ts-account-url>
TS_CERT_PROFILE=<ts-cert-profile>
TS_CERT_SUBJECT=<ts-cert-subject>
TS_SIGNING_ROOT_CERT="https://www.microsoft.com/pkiops/certs/Microsoft%20Enterprise%20Identity%20Verification%20Root%20Certificate%20Authority%202020.crt"
TS_TSA_URL="http://timestamp.acs.microsoft.com/"
TS_TSA_ROOT_CERT="http://www.microsoft.com/pkiops/certs/microsoft%20identity%20verification%20root%20certificate%20authority%202020.crt"

# Azure Container Registry and image environment variables
ACR_SUB_ID="<acr-subscription-id>"
ACR_RG=<acr-resource-group>
ACR_NAME=<registry-name>
ACR_LOGIN_SERVER=$ACR_NAME.azurecr.io
REPOSITORY=<repository>
TAG=<tag>
IMAGE=$ACR_LOGIN_SERVER/${REPOSITORY}:$TAG

Přihlásit se do Azure

Pomocí Azure CLI se přihlaste pomocí identity uživatele:

az login
USER_ID=$(az ad signed-in-user show --query id -o tsv)

Poznámka:

Tato příručka ukazuje přihlášení pomocí uživatelského účtu. Další možnosti identity, včetně spravované identity, najdete v tématu Ověřování v Azure pomocí Azure CLI.

Přiřazení oprávnění ke službě Azure Container Registry a důvěryhodnému podepisování

Udělte identitě potřebné role pro přístup ke službě Container Registry:

  • Pro registry, které mají povolené řízení přístupu na základě atributů (ABAC), přiřaďte:
    • Container Registry Repository Reader
    • Container Registry Repository Writer
  • Pro registry jiného typu než ABAC přiřaďte:
    • AcrPull
    • AcrPush
az role assignment create --role "Container Registry Repository Reader" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
az role assignment create --role "Container Registry Repository Writer" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"

Přiřaďte roli Trusted Signing Certificate Profile Signer k vaší identitě, abyste ji mohli podepsat pomocí důvěryhodného podepisování:

az role assignment create --assignee $USER_ID --role "Trusted Signing Certificate Profile Signer" --scope "/subscriptions/$TS_SUB_ID/resourceGroups/$TS_ACCT_RG/providers/Microsoft.CodeSigning/codeSigningAccounts/$TS_ACCT_NAME/certificateProfiles/$TS_CERT_PROFILE"

Podepište obraz kontejneru

# Authenticate to Azure Container Registry
az acr login --name $ACR_NAME

# Download the timestamping root certificate
curl -o msft-tsa-root-certificate-authority-2020.crt $TS_TSA_ROOT_CERT

# Sign the image
notation sign --signature-format cose --timestamp-url $TS_TSA_URL --timestamp-root-cert "msft-tsa-root-certificate-authority-2020.crt" --id $TS_CERT_PROFILE --plugin azure-trustedsigning --plugin-config accountName=$TS_ACCT_NAME --plugin-config baseUrl=$TS_ACCT_URL --plugin-config certProfile=$TS_CERT_PROFILE $IMAGE

Vysvětlení klíčových příznaků:

  • --signature-format cose: Pro podpisy používá formát podepisování a šifrování objektů CBOR (COSE).
  • --timestamp-url: Používá server časového razítka, který podporuje důvěryhodné podepisování.
  • --plugin-config: Předá konfiguraci modulu plug-in Důvěryhodné podepisování.

Výpis podepsaných obrázků a podpisů:

notation ls $IMAGE

Příklad výstupu:

myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
└── application/vnd.cncf.notary.signature
    └── sha256:d3a4c9fbc17e27b19a0b28e7b6a33f2c0f541dbdf8d2e5e8d0d79a835e8a76f2a

Ověřit kontejnerovou image

  1. Stažení a přidání kořenových certifikátů:

    curl -o msft-root-certificate-authority-2020.crt $TS_SIGNING_ROOT_CERT
    SIGNING_TRUST_STORE="myRootCerts"
    notation cert add --type ca --store $SIGNING_TRUST_STORE msft-root-certificate-authority-2020.crt
    
    curl -o msft-tsa-root-certificate-authority-2020.crt $TS_TSA_ROOT_CERT
    TSA_TRUST_STORE="myTsaRootCerts"
    notation cert add -t tsa -s $TSA_TRUST_STORE msft-tsa-root-certificate-authority-2020.crt
    notation cert ls
    

  1. Vytvořte soubor JSON zásad důvěryhodnosti:

    cat <<EOF > trustpolicy.json
    {
        "version": "1.0",
        "trustPolicies": [
            {
                "name": "myPolicy",
                "registryScopes": [ "$ACR_LOGIN_SERVER/$REPOSITORY" ],
                "signatureVerification": {
                    "level" : "strict"
                },
                "trustStores": [ "ca:$SIGNING_TRUST_STORE", "tsa:$TSA_TRUST_STORE" ],
                "trustedIdentities": [
                    "x509.subject: $TS_CERT_SUBJECT"
                ]
            }
        ]
    }
    EOF
    

    Importujte a zkontrolujte politiku.

    notation policy import trustpolicy.json
    notation policy show
    

  1. Ověřte obrázek:

    notation verify $IMAGE
    

    Příklad výstupu:

    Successfully verified signature for myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
    

    Pokud se ověření nezdaří, ujistěte se, že jsou správně nakonfigurované zásady důvěryhodnosti a certifikáty.