Verwenden Sie die Imageintegrität zum Überprüfen signierter Images vor der Bereitstellung in Ihren Azure Kubernetes Service-Clustern (AKS) (Vorschau)
Azure Kubernetes Service (AKS) und das zugrunde liegende Containermodell bieten eine höhere Skalierbarkeit und Verwaltbarkeit für cloudnative Anwendungen. Mit AKS können Sie flexible Softwareanwendungen entsprechend den Laufzeitanforderungen Ihres Systems starten. Diese Flexibilität kann jedoch neue Herausforderungen mit sich bringen.
In diesen Anwendungsumgebungen können Sie mit signierten Container-Images sicherstellen, dass Ihre Bereitstellungen von einer vertrauenswürdigen Instanz erstellt wurden und dass die Images seit ihrer Erstellung nicht manipuliert wurden. Image Integrity ist ein Dienst, mit dem Sie eine in Azure Policy integrierte Definition hinzufügen können, um zu überprüfen, dass nur signierte Images in Ihren AKS-Clustern bereitgestellt werden.
Hinweis
Image Integrity ist eine Funktion, die auf Ratify basiert. In einem AKS-Cluster lauten Featurename und Eigenschaftenname ImageIntegrity
, während die relevanten Namen von Image Integrity-Pods Ratify
enthalten.
Wichtig
AKS-Previewfunktionen stehen gemäß dem Self-Service- und Aktivierungsprinzip zur Verfügung. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von Service Level Agreements und der Herstellergarantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:
Voraussetzungen
Ein Azure-Abonnement. Falls Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
aks-preview
Die CLI-Erweiterung Version 0.5.96 oder höher.Stellen Sie sicher, dass das Azure Policy Add-On für AKS in Ihrem Cluster aktiviert ist. Wenn Sie dieses Add-On nicht installiert haben, finden Sie weitere Informationen unter Installieren des Azure Policy Add-Ons für AKS.
Ein AKS-Cluster, der mit dem OIDC-Aussteller aktiviert ist. Um einen neuen Cluster zu erstellen oder einen bestehenden Cluster zu aktualisieren, siehe Konfigurieren eines AKS-Clusters mit OIDC-Aussteller.
Die
EnableImageIntegrityPreview
undAKS-AzurePolicyExternalData
registrierten Featureflags in Ihrem Azure-Abonnement. Registrieren Sie die Featureflags, indem Sie den folgenden Befehl ausführen:Registrieren Sie die
EnableImageIntegrityPreview
undAKS-AzurePolicyExternalData
Featureflags mit dem Befehlaz feature register
.# 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"
Es dauert einige Minuten, bis der Status Registriert angezeigt wird.
Überprüfen Sie den Registrierungsstatus mithilfe des Befehls
az feature show
.# 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"
Sobald im Status Registriert angezeigt wird, aktualisieren Sie die Registrierung des
Microsoft.ContainerService
Ressourcenanbieters mithilfe des Befehlsaz provider register
.az provider register --namespace Microsoft.ContainerService
Überlegungen und Einschränkungen
- Ihre AKS-Cluster müssen Kubernetes Version 1.26 oder höher ausführen.
- Sie sollten dieses Feature nicht für ACR-Registrierungen (Production Azure Container Registry) oder Workloads verwenden.
- Die Imageintegrität unterstützt maximal 200 eindeutige Signaturen gleichzeitig clusterweit.
- Notation ist der einzige unterstützte Verifizierer.
- Die Überwachung ist die einzige unterstützte Auswirkung auf die Überprüfungsrichtlinie.
Funktionsweise der Imageintegrität
Die Imageintegrität verwendet Ratify, Azure Policy und Gatekeeper, um signierte Images zu überprüfen, bevor sie in Ihren AKS-Clustern bereitgestellt werden. Wenn Sie die Imageintegrität in Ihrem Cluster aktivieren, wird ein Ratify
Pod bereitgestellt. Dieser Pod Ratify
führt die folgenden Aufgaben aus:
- Stimmt Zertifikate aus Azure Key Vault gemäß der Konfiguration ab, die Sie über
Ratify
CRDs eingerichtet haben. - Greift auf in ACR gespeicherte Bilder zu, wenn Validierungsanforderungen von Azure Policy stammen. Um diese Erfahrung zu ermöglichen, erweitert Azure Policy Gatekeeper, einen Zugangscontroller-Webhook für Open Policy Agent (OPA).
- Bestimmt, ob das Zielimage mit einem vertrauenswürdigen Zertifikat signiert und daher als vertrauenswürdig betrachtet wird.
AzurePolicy
undGatekeeper
verwenden die Validierungsergebnisse als Konformitätszustand, um zu entscheiden, ob die Bereitstellungsanforderung zugelassen werden soll.
Aktivieren von Imageintegrität für Ihren AKS-Cluster
Hinweis
Die Überprüfung von Bildsignaturen ist ein governanceorientiertes Szenario und nutzt Azure Policy, um Bildsignaturen in AKS-Clustern im großen Stil zu überprüfen. Es wird empfohlen, die integrierte AKS-Imageintegrität Azure Policy-Initiative zu verwenden, die in Azure Policy integrierten Definitionsbibliothek verfügbar ist.
Erstellen Sie mit dem Befehl
az policy assignment create
eine Richtlinienzuweisung[Preview]: Use Image Integrity to ensure only trusted images are deployed
mit der Richtlinieninitiative AKS.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}
Der
Ratify
Pod wird bereitgestellt, nachdem Sie das Feature aktiviert haben.
Hinweis
Die Richtlinie stellt das Feature Imageintegrität in Ihrem Cluster bereit, wenn ein Updatevorgang im Cluster erkannt wird. Wenn Sie das Feature sofort aktivieren möchten, müssen Sie mithilfe des Befehls az policy remediation create
eine Richtlinienkorrektur erstellen.
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}
Einrichten von Überprüfungskonfigurationen
Damit die Imageintegrität das signierte Zielimage ordnungsgemäß überprüfen kann, müssen Sie Ratify
Konfigurationen über K8s-CRDs mit kubectl
einrichten.
In diesem Artikel verwenden wir ein selbstsigniertes Zertifizierungsstellenzertifikat aus der offiziellen Ratify-Dokumentation, um Überprüfungskonfigurationen einzurichten. Weitere Beispiele finden Sie unter Ratify CRDs.
Erstellen Sie eine
VerifyConfig
Datei namensverify-config.yaml
, und fügen Sie den folgenden YAML-Code ein: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: - "*"
Wenden Sie die
VerifyConfig
mithilfe des Befehlskubectl apply
auf Ihren Cluster an.kubectl apply -f verify-config.yaml
Bereitstellen von Beispielimages in Ihrem AKS-Cluster
Stellen Sie ein signiertes Image mithilfe des Befehls
kubectl run demo
bereit.kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed
Die folgende Beispielausgabe zeigt, dass die Imageintegrität die Bereitstellung zulässt:
ghcr.io/deislabs/ratify/notary-image:signed pod/demo-signed created
Wenn Sie Ihre eigenen Images verwenden möchten, lesen Sie die Anleitung für die Bildsignierung.
Deaktivieren der Imageintegrität
Dektivieren Sie Imageintegrität in Ihrem Cluster mithilfe des Befehls
az aks update
mit dem Parameter--disable-image-integrity
.az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
Benutzerdefinierte Richtlinieninitiative entfernen
Entfernen Sie die Richtlinieninitiative mithilfe des
az policy assignment delete
Befehls.az policy assignment delete --name 'deploy-trustedimages'
Nächste Schritte
In diesem Artikel haben Sie erfahren, wie Sie die Imageintegrität verwenden, um signierte Images zu überprüfen, bevor Sie sie in Ihren AKS-Clustern (Azure Kubernetes Service) bereitstellen. Wenn Sie erfahren möchten, wie Sie Ihre eigenen Container signieren, lesen Sie Erstellen, Signieren und Überprüfen von Containerimages mithilfe von Notar und Azure Key Vault (Vorschau).
Azure Kubernetes Service