Użyj integralności obrazu, aby zweryfikować podpisane obrazy przed wdrożeniem ich w klastrach usługi Azure Kubernetes Service (AKS) (wersja zapoznawcza)
Usługa Azure Kubernetes Service (AKS) i jej bazowy model kontenera zapewniają zwiększoną skalowalność i możliwości zarządzania dla aplikacji natywnych dla chmury. Usługa AKS umożliwia uruchamianie elastycznych aplikacji oprogramowania zgodnie z potrzebami środowiska uruchomieniowego systemu. Jednak ta elastyczność może powodować nowe wyzwania.
W tych środowiskach aplikacji użycie podpisanych obrazów kontenerów pomaga sprawdzić, czy wdrożenia zostały skompilowane na podstawie zaufanej jednostki i że obrazy nie zostały naruszone od czasu ich utworzenia. Integralność obrazu to usługa, która umożliwia dodanie wbudowanej definicji usługi Azure Policy w celu sprawdzenia, czy tylko podpisane obrazy są wdrażane w klastrach usługi AKS.
Uwaga
Integralność obrazu jest funkcją opartą na Ratify. W klastrze usługi AKS nazwa funkcji i nazwa właściwości to ImageIntegrity
, a odpowiednie nazwy zasobników integralności obrazów zawierają Ratify
wartość .
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Wymagania wstępne
Subskrypcja platformy Azure. Jeśli nie masz subskrypcji Azure, możesz utworzyć bezpłatne konto Azure.
Interfejs wiersza polecenia platformy Azure lub program Azure PowerShell.
aks-preview
Rozszerzenie interfejsu wiersza polecenia w wersji 0.5.96 lub nowszej.Upewnij się, że dodatek usługi Azure Policy dla usługi AKS jest włączony w klastrze. Jeśli nie masz zainstalowanego dodatku, zobacz Instalowanie dodatku usługi Azure Policy dla usługi AKS.
Klaster usługi AKS z włączonym wystawcą OIDC. Aby utworzyć nowy klaster lub zaktualizować istniejący klaster, zobacz Konfigurowanie klastra usługi AKS za pomocą wystawcy OIDC.
Flagi
EnableImageIntegrityPreview
funkcji iAKS-AzurePolicyExternalData
zarejestrowane w ramach subskrypcji platformy Azure. Zarejestruj flagi funkcji przy użyciu następujących poleceń:Zarejestruj flagi
EnableImageIntegrityPreview
funkcji iAKS-AzurePolicyExternalData
przy użyciuaz feature register
polecenia .# Register the EnableImageIntegrityPreview feature flag az feature register --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Register the AKS-AzurePolicyExternalData feature flag az feature register --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
Wyświetlenie stanu jako Zarejestrowane może potrwać kilka minut.
Sprawdź stan rejestracji przy użyciu
az feature show
polecenia .# Verify the EnableImageIntegrityPreview feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Verify the AKS-AzurePolicyExternalData feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
Po wybraniu stanu Zarejestrowane odśwież rejestrację dostawcy
Microsoft.ContainerService
zasobów przy użyciuaz provider register
polecenia .az provider register --namespace Microsoft.ContainerService
Rozważania i ograniczenia
- Klastry usługi AKS muszą uruchamiać platformę Kubernetes w wersji 1.26 lub nowszej.
- Nie należy używać tej funkcji do produkcyjnych rejestrów ani obciążeń usługi Azure Container Registry (ACR).
- Integralność obrazu obsługuje maksymalnie 200 unikatowych podpisów jednocześnie w całym klastrze.
- Notacja jest jedynym obsługiwanym weryfikatorem.
- Inspekcja jest jedynym obsługiwanym efektem zasad weryfikacji.
Jak działa integralność obrazu
Integralność obrazu używa rozwiązania Ratify, usługi Azure Policy i gatekeeper do weryfikowania podpisanych obrazów przed wdrożeniem ich w klastrach usługi AKS. Włączenie integralności obrazu w klastrze umożliwia wdrożenie Ratify
zasobnika. Ten Ratify
zasobnik wykonuje następujące zadania:
- Uzgadnia certyfikaty z usługi Azure Key Vault zgodnie z konfiguracją skonfigurowaną za pomocą
Ratify
identyfikatorów CRD. - Uzyskuje dostęp do obrazów przechowywanych w usłudze ACR, gdy żądania weryfikacji pochodzą z usługi Azure Policy. Aby włączyć to środowisko, usługa Azure Policy rozszerza program Gatekeeper, element webhook kontrolera dostępu dla agenta zasad open policy (OPA).
- Określa, czy obraz docelowy jest podpisany przy użyciu zaufanego certyfikatu i dlatego jest uznawany za zaufany.
AzurePolicy
iGatekeeper
używają wyników weryfikacji jako stanu zgodności, aby zdecydować, czy zezwolić na żądanie wdrożenia.
Włączanie integralności obrazów w klastrze usługi AKS
Uwaga
Weryfikacja podpisu obrazu jest scenariuszem zorientowanym na ład i wykorzystuje usługę Azure Policy do weryfikowania podpisów obrazów w klastrach usługi AKS na dużą skalę. Zalecamy użycie wbudowanej inicjatywy usługi Azure Policy integralności obrazów usługi AKS, która jest dostępna w wbudowanej bibliotece definicji usługi Azure Policy.
Utwórz przypisanie zasad z inicjatywą
[Preview]: Use Image Integrity to ensure only trusted images are deployed
zasad usługi AKS przy użyciuaz policy assignment create
polecenia .export SCOPE="/subscriptions/${SUBSCRIPTION}/resourceGroups/${RESOURCE_GROUP}" export LOCATION=$(az group show --name ${RESOURCE_GROUP} --query location -o tsv) az policy assignment create --name 'deploy-trustedimages' --policy-set-definition 'af28bf8b-c669-4dd3-9137-1e68fdc61bd6' --display-name 'Audit deployment with unsigned container images' --scope ${SCOPE} --mi-system-assigned --role Contributor --identity-scope ${SCOPE} --location ${LOCATION}
Zasobnik
Ratify
zostanie wdrożony po włączeniu tej funkcji.
Uwaga
Zasady wdrażają funkcję Integralność obrazu w klastrze, gdy wykrywa ona wszelkie operacje aktualizacji w klastrze. Jeśli chcesz natychmiast włączyć tę funkcję, musisz utworzyć korygowanie zasad przy użyciu az policy remediation create
polecenia .
assignment_id=$(az policy assignment show --name 'deploy-trustedimages' --scope ${SCOPE} --query id -o tsv)
az policy remediation create --policy-assignment "$assignment_id" --definition-reference-id deployAKSImageIntegrity --name remediation --resource-group ${RESOURCE_GROUP}
Konfigurowanie konfiguracji weryfikacji
Aby integralność obrazu została prawidłowo zweryfikowana z podpisem docelowym obrazu, należy skonfigurować Ratify
konfiguracje za pomocą K8s CRDs przy użyciu polecenia kubectl
.
W tym artykule użyjemy certyfikatu urzędu certyfikacji z podpisem własnym z oficjalnej dokumentacji usługi Ratify w celu skonfigurowania konfiguracji weryfikacji. Aby uzyskać więcej przykładów, zobacz Ratify CRDs (Ratify CRDs).
VerifyConfig
Utwórz plik o nazwieverify-config.yaml
i skopiuj go w następującym pliku YAML:apiVersion: config.ratify.deislabs.io/v1beta1 kind: CertificateStore metadata: name: certstore-inline spec: provider: inline parameters: value: | -----BEGIN CERTIFICATE----- MIIDQzCCAiugAwIBAgIUDxHQ9JxxmnrLWTA5rAtIZCzY8mMwDQYJKoZIhvcNAQEL BQAwKTEPMA0GA1UECgwGUmF0aWZ5MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMB4X DTIzMDYyOTA1MjgzMloXDTMzMDYyNjA1MjgzMlowKTEPMA0GA1UECgwGUmF0aWZ5 MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAshmsL2VM9ojhgTVUUuEsZro9jfI27VKZJ4naWSHJihmOki7IoZS8 3/3ATpkE1lGbduJ77M9UxQbEW1PnESB0bWtMQtjIbser3mFCn15yz4nBXiTIu/K4 FYv6HVdc6/cds3jgfEFNw/8RVMBUGNUiSEWa1lV1zDM2v/8GekUr6SNvMyqtY8oo ItwxfUvlhgMNlLgd96mVnnPVLmPkCmXFN9iBMhSce6sn6P9oDIB+pr1ZpE4F5bwa gRBg2tWN3Tz9H/z2a51Xbn7hCT5OLBRlkorHJl2HKKRoXz1hBgR8xOL+zRySH9Qo 3yx6WvluYDNfVbCREzKJf9fFiQeVe0EJOwIDAQABo2MwYTAdBgNVHQ4EFgQUKzci EKCDwPBn4I1YZ+sDdnxEir4wHwYDVR0jBBgwFoAUKzciEKCDwPBn4I1YZ+sDdnxE ir4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEL BQADggEBAGh6duwc1MvV+PUYvIkDfgj158KtYX+bv4PmcV/aemQUoArqM1ECYFjt BlBVmTRJA0lijU5I0oZje80zW7P8M8pra0BM6x3cPnh/oZGrsuMizd4h5b5TnwuJ hRvKFFUVeHn9kORbyQwRQ5SpL8cRGyYp+T6ncEmo0jdIOM5dgfdhwHgb+i3TejcF 90sUs65zovUjv1wa11SqOdu12cCj/MYp+H8j2lpaLL2t0cbFJlBY6DNJgxr5qync cz8gbXrZmNbzC7W5QK5J7fcx6tlffOpt5cm427f9NiK2tira50HU7gC3HJkbiSTp Xw10iXXMZzSbQ0/Hj2BF4B40WfAkgRg= -----END CERTIFICATE----- --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Store metadata: name: store-oras spec: name: oras # If you want to you use Workload Identity for Ratify to access Azure Container Registry, # uncomment the following lines, and fill the proper ClientID: # See more: https://ratify.dev/docs/reference/oras-auth-provider # parameters: # authProvider: # name: azureWorkloadIdentity # clientID: XXX --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Verifier metadata: name: verifier-notary-inline spec: name: notation artifactTypes: application/vnd.cncf.notary.signature parameters: verificationCertStores: # certificates for validating signatures certs: # name of the trustStore - certstore-inline # name of the certificate store CRD to include in this trustStore trustPolicyDoc: # policy language that indicates which identities are trusted to produce artifacts version: "1.0" trustPolicies: - name: default registryScopes: - "*" signatureVerification: level: strict trustStores: - ca:certs trustedIdentities: - "*"
Zastosuj element do klastra
VerifyConfig
kubectl apply
przy użyciu polecenia .kubectl apply -f verify-config.yaml
Wdrażanie przykładowych obrazów w klastrze usługi AKS
Wdróż podpisany obraz przy użyciu
kubectl run demo
polecenia .kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed
Następujące przykładowe dane wyjściowe pokazują, że integralność obrazu umożliwia wdrożenie:
ghcr.io/deislabs/ratify/notary-image:signed pod/demo-signed created
Jeśli chcesz używać własnych obrazów, zapoznaj się ze wskazówkami dotyczącymi podpisywania obrazów.
Wyłącz integralność obrazu
Wyłącz integralność obrazu w klastrze przy użyciu
az aks update
polecenia z flagą--disable-image-integrity
.az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
Usuwanie inicjatywy zasad
Usuń inicjatywę zasad przy użyciu
az policy assignment delete
polecenia .az policy assignment delete --name 'deploy-trustedimages'
Następne kroki
W tym artykule przedstawiono sposób używania integralności obrazu do weryfikowania podpisanych obrazów przed wdrożeniem ich w klastrach usługi Azure Kubernetes Service (AKS). Jeśli chcesz dowiedzieć się, jak podpisać własne kontenery, zobacz Kompilowanie, podpisywanie i weryfikowanie obrazów kontenerów przy użyciu notary i usługi Azure Key Vault (wersja zapoznawcza).
Azure Kubernetes Service