Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł jest częścią serii dotyczącej zapewniania integralności i autentyczności obrazów kontenerów oraz innych artefaktów Open Container Initiative (OCI). Aby uzyskać pełny obraz, zacznij od omówienia, co wyjaśnia, dlaczego podpisywanie ma znaczenie i przedstawia różne scenariusze.
Ten artykuł koncentruje się na podpisywaniu przy użyciu narzędzi Notary Project, Notation i Artifact Signing:
- Dowiesz się tutaj: Jak używać interfejsu wiersza polecenia Notation do podpisywania artefaktów.
- Gdzie pasuje: Podpisywanie artefaktów jest alternatywą dla usługi Azure Key Vault. Mimo że usługa Key Vault zapewnia organizacjom pełną kontrolę nad zarządzaniem cyklem życia certyfikatów, podpisywanie artefaktów zapewnia usprawnione środowisko podpisywania z bezobsługowym zarządzaniem cyklem życia certyfikatów i krótkotrwałymi certyfikatami.
- Dlaczego ma to znaczenie: Podpisywanie artefaktów upraszcza doświadczenie deweloperów, zapewniając jednocześnie silne uwierzytelnienie tożsamości. Pomaga zespołom zmniejszyć złożoność operacyjną bez naruszania zabezpieczeń.
Wymagania wstępne
Aby można było podpisać i zweryfikować obrazy kontenerów przy użyciu notacji i podpisywania artefaktów, należy skonfigurować wymagane zasoby platformy Azure i zainstalować niezbędne narzędzia. W tej sekcji opisano proces przygotowania usługi Azure Container Registry, konfigurowania podpisywania artefaktów oraz ustawiania interfejsu wiersza polecenia platformy Azure jako środowiska programistycznego.
Przygotowywanie obrazów kontenerów w usłudze Azure Container Registry
- Utwórz lub użyj rejestru kontenerów do przechowywania obrazów kontenerów, artefaktów OCI i podpisów.
- Wgraj lub użyj obrazu kontenera w rejestrze kontenerów.
Konfigurowanie podpisywania artefaktów
Skonfiguruj konto podpisywania artefaktów i profil certyfikatu w ramach subskrypcji platformy Azure.
Profil certyfikatu musi zawierać kraj/region (C), stan lub prowincję (ST lub S) oraz organizację (O) w temacie certyfikatu.
Specyfikacja projektu Notary wymaga tych pól.
Konfigurowanie Azure CLI
Zainstaluj interfejs wiersza polecenia platformy Azure lub użyj usługi Azure Cloud Shell.
Zainstaluj Notation CLI i wtyczkę do podpisywania artefaktów
Ten przewodnik uruchamia polecenia w systemach Linux AMD64 i Windows jako przykłady.
Zainstaluj Notation CLI w wersji 1.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/binW przypadku innych platform zobacz Przewodnik instalacji notacji.
Zainstaluj wtyczkę do podpisywania artefaktów:
notation plugin install --url "https://github.com/Azure/artifact-signing-notation-plugin/releases/download/v1.0.0/notation-azure-artifactsigning_1.0.0_linux_amd64.tar.gz" --sha256sum 2f45891a14aa9c88c9bee3d11a887c1adbe9d2d24e50de4bc4b4fa3fe595292fZnajdź najnowszy adres URL wtyczki i sumę kontrolną na stronie wydania.
Sprawdź instalację wtyczki:
Przykładowy wynik:
NAME DESCRIPTION VERSION CAPABILITIES ERROR azure-artifactsigning Sign OCI artifacts using the Artifact Signing Service 1.0.0 [SIGNATURE_GENERATOR.RAW] <nil>
Skonfiguruj zmienne środowiskowe
Ustaw następujące zmienne środowiskowe do użycia w kolejnych poleceniach. Zastąp symbole zastępcze rzeczywistymi wartościami.
Wymagane wartości można znaleźć w witrynie Azure Portal:
- Dla informacji o koncie podpisywania artefaktu przejdź do swojego konta, a następnie wybierz pozycję Przegląd.
- Aby uzyskać informacje o profilu certyfikatu, przejdź do konta, a następnie wybierz pozycję Obiekty>Profile certyfikatów.
# Artifact Signing environment variables
AS_SUB_ID="<subscription-id>"
AS_ACCT_RG=<ts-account-resource-group>
AS_ACCT_NAME=<ts-account-name>
AS_ACCT_URL=<ts-account-url>
AS_CERT_PROFILE=<ts-cert-profile>
AS_CERT_SUBJECT=<ts-cert-subject>
AS_SIGNING_ROOT_CERT="https://www.microsoft.com/pkiops/certs/Microsoft%20Enterprise%20Identity%20Verification%20Root%20Certificate%20Authority%202020.crt"
AS_TSA_URL="http://timestamp.acs.microsoft.com/"
AS_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
Zaloguj się do Azure
Użyj interfejsu wiersza polecenia platformy Azure, aby zalogować się przy użyciu tożsamości użytkownika:
Uwaga / Notatka
W tym przewodniku przedstawiono logowanie się przy użyciu konta użytkownika. Aby uzyskać informacje o innych opcjach tożsamości, w tym tożsamości zarządzanej, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Przypisywanie uprawnień do usługi Azure Container Registry i podpisywania artefaktów
Przypisz tożsamości niezbędne role do uzyskania dostępu do Container Registry.
- W przypadku rejestrów z włączoną kontrolą dostępu opartą na atrybutach (ABAC) przypisz:
Container Registry Repository ReaderContainer Registry Repository Writer
- W przypadku rejestrów innych niż ABAC przypisz:
AcrPullAcrPush
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"
Przypisz rolę Artifact Signing Certificate Profile Signer do swojej tożsamości, aby można było podpisać przy użyciu podpisywania artefaktu:
az role assignment create --assignee $USER_ID --role "Artifact Signing Certificate Profile Signer" --scope "/subscriptions/$AS_SUB_ID/resourceGroups/$AS_ACCT_RG/providers/Microsoft.CodeSigning/codeSigningAccounts/$AS_ACCT_NAME/certificateProfiles/$AS_CERT_PROFILE"
Podpisz obraz kontenera
# 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 $AS_TSA_ROOT_CERT
# Sign the image
notation sign --signature-format cose --timestamp-url $AS_TSA_URL --timestamp-root-cert "msft-tsa-root-certificate-authority-2020.crt" --id $AS_CERT_PROFILE --plugin azure-artifactsigning --plugin-config accountName=$AS_ACCT_NAME --plugin-config baseUrl=$AS_ACCT_URL --plugin-config certProfile=$AS_CERT_PROFILE $IMAGE
Objaśniono flagi kluczy:
-
--signature-format cose: używa formatu podpisywania i szyfrowania obiektów CBOR (COSE) dla podpisów. -
--timestamp-url: używa serwera znacznika czasu obsługiwanego przez podpisywanie artefaktów. -
--plugin-config: przekazuje konfigurację do wtyczki do podpisywania artefaktów.
Wylistuj podpisane obrazy i podpisy
Przykładowy wynik:
myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
└── application/vnd.cncf.notary.signature
└── sha256:d3a4c9fbc17e27b19a0b28e7b6a33f2c0f541dbdf8d2e5e8d0d79a835e8a76f2a
Weryfikowanie obrazu kontenera
Pobierz i dodaj certyfikaty główne:
curl -o msft-root-certificate-authority-2020.crt $AS_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 $AS_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
Utwórz plik JSON zasad zaufania:
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: $AS_CERT_SUBJECT" ] } ] } EOFZaimportuj i sprawdź zasady:
notation policy import trustpolicy.json notation policy show
Sprawdź obraz:
Przykładowy wynik:
Successfully verified signature for myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55Jeśli weryfikacja nie powiedzie się, upewnij się, że zasady zaufania i certyfikaty są poprawnie skonfigurowane.
Treści powiązane
- Aby podpisać obrazy kontenerów w przepływie pracy GitHub, zapoznaj się z Podpisywaniem obrazów kontenerów w przepływie pracy GitHub przy użyciu notacji i podpisywania artefaktów.
- Aby uzyskać informacje na temat weryfikacji w przepływie pracy usługi GitHub, zobacz Weryfikowanie obrazów kontenerów w przepływie pracy usługi GitHub przy użyciu notacji i podpisywania artefaktów.
- Aby uzyskać informacje na temat weryfikacji w usłudze Azure Kubernetes Service (AKS), zobacz Weryfikowanie podpisów obrazów kontenera przy użyciu rozwiązania Ratify i usługi Azure Policy.