Skip to main content

Application d’attestations d’artefact avec un contrôleur d’admission Kubernetes

Utilisez un contrôleur d’admission pour appliquer des attestations d’artefact dans votre cluster Kubernetes.

Remarque

Avant de poursuivre, vérifiez que vous avez activé la provenance de build pour les images de conteneur, notamment en définissant l’attribut push-to-registry dans attest-build-provenancel’action comme documenté dans Générer la provenance de build pour les images de conteneur. Cela est requis pour que le contrôleur de stratégie vérifie l’attestation.

Bien démarrer avec le contrôleur d’admission Kubernetes

Pour configurer un contrôleur d’admission afin d’appliquer des attestations d’artefact GitHub, vous devez :

  1. Déployer le contrôleur de stratégie Sigstore.
  2. Ajouter la TrustRoot de GitHub et une ClusterImagePolicy à votre cluster.
  3. Activer la stratégie dans votre espace de noms.

Déployer le contrôleur de stratégie Sigstore

Nous avons empaqueté le contrôleur de stratégie Sigstore sous la forme d’un graphique Helm distribué par GitHub. Avant de commencer, vérifiez que les prérequis suivants sont remplis :

  • Un cluster Kubernetes avec la version 1.27 ou une version ultérieure
  • Helm 3.0 ou une version ultérieure
  • kubectl

Tout d’abord, installez le graphique Helm qui déploie le contrôleur de stratégie Sigstore :

Bash
helm upgrade policy-controller --install --atomic \
  --create-namespace --namespace artifact-attestations \
  oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
  --version v0.12.0-github12

Cela installe le contrôleur de stratégie dans l’espace de noms artifact-attestations. À ce stade, aucune stratégie n’a été configurée et aucune attestation ne sera appliquée.

Ajouter la TrustRoot de GitHub et une ClusterImagePolicy

Une fois le contrôleur de stratégie déployé, vous devez ajouter la TrustRoot de GitHub et une ClusterImagePolicy à votre cluster. Utilisez le graphique Helm que nous fournissons pour effectuer cette opération. Veillez à remplacer MY-ORGANIZATION par le nom de votre organisation GitHub (par exemple, github ou octocat-inc).

Bash
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.6.2 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION

Vous avez à présent installé la racine de confiance GitHub et une stratégie d’attestation d’artefact dans votre cluster. Cette stratégie rejette les artefacts qui ne proviennent pas de votre organisation GitHub.

Activer la stratégie dans votre espace de noms

Avertissement

Cette stratégie n’est pas appliquée tant que vous ne spécifiez pas les espaces de noms auxquels elle doit s’appliquer.

Chaque espace de noms de votre cluster peut appliquer indépendamment des stratégies. Pour activer la mise en œuvre dans un espace de noms, vous pouvez ajouter l’étiquette suivante à l’espace de noms :

metadata:
  labels:
    policy.sigstore.dev/include: "true"

Une fois l’étiquette ajoutée, la stratégie d’attestation d’artefact GitHub est appliquée dans l’espace de noms.

Vous pouvez aussi exécuter :

Bash
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true

Images correspondantes

Par défaut, la stratégie installée avec le trust-policies graphique Helm vérifie les attestations de toutes les images avant de les admettre dans le cluster. Si vous envisagez uniquement d’appliquer des attestations pour un sous-ensemble d’images, vous pouvez utiliser les valeurs policy.images Helm et policy.exemptImages spécifier une liste d’images à mettre en correspondance. Ces valeurs peuvent être définies sur une liste de modèles glob qui correspondent aux noms d’image. La syntaxe globbing utilise la sémantique go filepath, avec l’ajout de la correspondance à ** n’importe quelle séquence de caractères, y compris les barres obliques.

Par exemple, pour appliquer des attestations pour les images qui correspondent au modèle ghcr.io/MY-ORGANIZATION/* et admettre busybox sans attestation valide, vous pouvez exécuter :

Bash
helm upgrade trust-policies --install --atomic \
 --namespace artifact-attestations \
 oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
 --version v0.6.2 \
 --set policy.enabled=true \
 --set policy.organization=MY-ORGANIZATION \
 --set-json 'policy.exemptImages=["index.docker.io/library/busybox**"]' \
 --set-json 'policy.images=["ghcr.io/MY-ORGANIZATION/**"]'

Tous les modèles doivent utiliser le nom complet, même si les images proviennent de Docker Hub. Dans cet exemple, si nous voulons exempter l’image busybox, nous devons fournir le nom complet incluant le domaine et la glob double étoile pour couvrir toutes les versions de l’image : index.docker.io/library/busybox**.

Notez que toute image que vous envisagez d’admettre doit avoir un modèle glob correspondant dans la liste policy.images. Si une image ne correspond à aucun modèle, elle sera rejetée. En outre, si une image correspond à la fois à policy.images et policy.exemptImages, elle sera rejetée.

Utilisation avancée

Pour afficher l’ensemble complet d’options que vous pouvez configurer avec le graphique Helm, vous pouvez exécuter l’une des commandes suivantes. Pour les options du contrôleur de stratégie :

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.12.0-github12

Pour les options de stratégie de confiance :

Bash
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2

Pour plus d’informations sur le contrôleur de stratégie Sigstore, consultez la documentation relative au contrôleur de stratégie Sigstore.