Utiliser l’intégrité des images pour valider les images signées avant de les déployer sur vos clusters Azure Kubernetes Service (AKS) (préversion)
Azure Kubernetes Service (AKS) et son modèle de conteneur sous-jacent offrent une scalabilité et une facilité de gestion accrues pour les applications natives cloud. Avec AKS, vous pouvez lancer des applications logicielles flexibles en fonction des besoins d’exécution de votre système. Toutefois, cette flexibilité peut présenter de nouveaux défis.
Dans ces environnements d’application, l’utilisation d’images conteneur signées permet de vérifier que vos déploiements sont générés à partir d’une entité approuvée et que les images n’ont pas été falsifiées depuis leur création. L’intégrité de l’image est un service qui vous permet d’ajouter une définition intégrée Azure Policy pour vérifier que seules les images signées sont déployées sur vos clusters AKS.
Remarque
L’intégrité de l’image est une fonctionnalité qui repose sur Ratify. Sur un cluster AKS, le nom de la fonctionnalité et le nom de propriété est ImageIntegrity
alors que les noms des pods Image Cleaner pertinents contiennent Ratify
.
Important
Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :
Prérequis
Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, vous pouvez créer un compte gratuit.
La version d’extension CLI
aks-preview
0.5.96 ou ultérieure.Vérifiez que le module complémentaire Azure Policy pour AKS est activé sur votre cluster. Si vous n’avez pas installé ce module complémentaire, consultez Installer Azure Policy module complémentaire pour AKS.
Un cluster AKS activé avec l’émetteur OIDC. Pour créer un cluster ou mettre à jour un cluster existant, consultez Configurer un cluster AKS avec l’émetteur OIDC.
Indicateurs de fonctionnalité
EnableImageIntegrityPreview
etAKS-AzurePolicyExternalData
inscrits sur votre abonnement Azure. Inscrivez les indicateurs de fonctionnalité à l’aide des commandes suivantes :Inscrivez l’indicateur de fonctionnalité
EnableImageIntegrityPreview
etAKS-AzurePolicyExternalData
à l’aide de la commandeaz 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"
Quelques minutes peuvent être nécessaires avant que l’état affiche Registered (Inscrit).
Vérifiez l’état de l’inscription en utilisant la commande
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"
Quand l’état indique Registered (Inscrit), actualisez l’inscription du fournisseur de ressources
Microsoft.ContainerService
à l’aide de la commandeaz provider register
:az provider register --namespace Microsoft.ContainerService
Observations et limitations
- Vos clusters AKS doivent exécuter Kubernetes version 1.26 ou ultérieure.
- Vous ne devez pas utiliser cette fonctionnalité pour les registres ou charges de travail de production Azure Container Registry (ACR).
- L’intégrité de l’image prend en charge un maximum de 200 signatures uniques simultanément à l’échelle du cluster.
- La notation est le seul vérificateur pris en charge.
- L’audit est le seul effet de stratégie de vérification pris en charge.
Fonctionnement de l’intégrité de l’image
L’intégrité de l’image utilise Ratify, Azure Policy et Gatekeeper pour valider les images signées avant de les déployer sur vos clusters AKS. L’activation de l’intégrité de l’image sur votre cluster déploie un pod Ratify
. La méthode Ratify
effectue les tâches suivantes :
- Rapproche les certificats d’Azure Key Vault selon la configuration que vous avez configurée à l’aide des CRD
Ratify
. - Accède aux images stockées dans ACR lorsque les demandes de validation proviennent de Azure Policy. Pour permettre cette expérience, Azure Policy étend Gatekeeper, un webhook de contrôleur d’admission pour Open Policy Agent (OPA).
- Détermine si l’image cible est signée avec un certificat approuvé et donc considérée comme fiable.
AzurePolicy
etGatekeeper
utilisent les résultats de validation comme état de conformité pour décider s’il faut autoriser la demande de déploiement.
Activer l’intégrité de l’image sur votre cluster AKS
Remarque
La vérification de la signature d’image est un scénario orienté gouvernance qui tire parti de Azure Policy pour vérifier les signatures d’image sur les clusters AKS à grande échelle. Nous vous recommandons d’utiliser l’initiative de Azure Policy intégrée à l’intégrité de l’image d’AKS, disponible dans la bibliothèque de définitions intégrée de Azure Policy.
Créez une affectation de stratégie avec l’initiative de stratégie AKS
[Preview]: Use Image Integrity to ensure only trusted images are deployed
à l’aide de la commandeaz policy assignment create
.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}
Le pod
Ratify
se déploie après l’activation de la fonctionnalité.
Remarque
La stratégie déploie la fonctionnalité Intégrité de l’image sur votre cluster lorsqu’elle détecte une opération de mise à jour sur le cluster. Si vous souhaitez activer la fonctionnalité immédiatement, vous devez créer une correction de stratégie à l’aide de la commande az policy remediation create
.
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}
Paramétrer des configurations de vérification
Pour que l’intégrité de l’image vérifie correctement l’image signée cible, vous devez configurer des configurations Ratify
via des CRD K8s à l’aide de kubectl
.
Dans cet article, nous utilisons un certificat d’autorité de certification auto-signé à partir de la documentation officielle ratification pour paramétrer des configurations de vérification. Pour plus d’exemples, consultez Ratifier les CRD.
Créez un fichier
VerifyConfig
nomméverify-config.yaml
, et copiez-y le code YAML suivant :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: - "*"
Appliquez le
VerifyConfig
à votre cluster à l’aide de la commandekubectl apply
.kubectl apply -f verify-config.yaml
Déployer des exemples d’images sur votre cluster AKS
Déployez une image signée à l’aide de la commande
kubectl run demo
.kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed
L’exemple de sortie suivant montre que l’intégrité de l’image autorise le déploiement :
ghcr.io/deislabs/ratify/notary-image:signed pod/demo-signed created
Si vous souhaitez utiliser vos propres images, consultez les instructions relatives à la signature d’images.
Désactiver l’intégrité de l’image
Désactivez Image Cleaner sur votre cluster à l’aide de la commande
az aks update
avec le paramètre--disable-image-integrity
.az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
Supprimer une initiative de stratégie
Supprimez l’initiative de stratégie à l’aide de la commande
az policy assignment delete
.az policy assignment delete --name 'deploy-trustedimages'
Étapes suivantes
Dans cet article, vous avez appris à utiliser l’intégrité des images pour valider des images signées avant de les déployer sur vos clusters Azure Kubernetes Service (AKS). Si vous souhaitez savoir comment signer vos propres conteneurs, consultez Générer, signer et vérifier des images conteneur à l’aide de Notary et d’Azure Key Vault (préversion).
Azure Kubernetes Service