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 attestl’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 les attestations d’artefacts GitHub, vous devez :
-
[Déployer le contrôleur de stratégie Sigstore](#deploy-the-sigstore-policy-controller). -
[Ajoutez `TrustRoot` et `ClusterImagePolicy` de GitHub à votre cluster](#add-the-github-trustroot-and-a-clusterimagepolicy). -
[Activer la politique dans votre espace de noms](#enable-the-policy-in-your-namespace).
Déployer le contrôleur de stratégie Sigstore
Le contrôleur de politique Sigstore a été intégré et est désormais disponible via un Helm chart. 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](https://helm.sh/docs/intro/install/) 3.0 ou une version ultérieure -
[kubectl](https://kubernetes.io/docs/tasks/tools/)
Tout d’abord, installez le chart Helm qui déploie le contrôleur de politiques Sigstore :
helm upgrade policy-controller --install --atomic \ --create-namespace --namespace artifact-attestations \ oci://ghcr.io/sigstore/helm-charts/policy-controller \ --version 0.10.5
helm upgrade policy-controller --install --atomic \
--create-namespace --namespace artifact-attestations \
oci://ghcr.io/sigstore/helm-charts/policy-controller \
--version 0.10.5
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.
Ajoutez le GitHub TrustRoot et un ClusterImagePolicy
Une fois que le contrôleur de stratégie a été déployé, vous devez ajouter le TrustRoot de GitHub et un 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).
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.7.0 \ --set policy.enabled=true \ --set policy.organization=MY-ORGANIZATION
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.7.0 \
--set policy.enabled=true \
--set policy.organization=MY-ORGANIZATION
Vous avez désormais installé la racine de confiance GitHub ainsi qu’une politique d’attestation des artefacts dans votre cluster. Cette stratégie rejette les artefacts qui ne proviennent pas de votre organisation GitHub.
Activer la politique 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 politique d’attestation des artefacts GitHub sera appliquée dans l’espace de noms.
Vous pouvez aussi exécuter :
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
Images correspondantes
Par défaut, la stratégie installée avec le trust-policies chart Helm vérifiera les attestations pour 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 de Helm policy.images, et policy.exemptImages pour spécifier une liste d'images à mettre en correspondance. Ces valeurs peuvent être définies dans une liste de motifs globaux qui correspondent aux noms d'image. La syntaxe globbing utilise la sémantique filepath de Go, avec en plus ** pour correspondre à toute 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 :
helm upgrade trust-policies --install --atomic \ --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \ --version v0.7.0 \ --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/**"]'
helm upgrade trust-policies --install --atomic \
--namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies \
--version v0.7.0 \
--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 spécifier le nom complet incluant le domaine et le globbing à double étoile pour correspondre à toutes les versions d'image : index.docker.io/library/busybox**.
Notez que toute image que vous envisagez d’inclure doit avoir un modèle de 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.
Si votre compte GitHub Enterprise a un sous-domaine sur GHE.com, vous devez spécifier une valeur pour le domaine d’approbation GitHub. Cette valeur est utilisée pour récupérer les documents approuvés associés à la région de résidence des données qui héberge votre compte GitHub Enterprise. Vous trouverez cette valeur en vous connectant à votre compte d’entreprise avec l’outil CLI gh et en exécutant la commande suivante :
gh api meta --jq .domains.artifact_attestations.trust_domain
gh api meta --jq .domains.artifact_attestations.trust_domain
Cette valeur doit être ajoutée lors de l’installation du graphique trust-policies, comme suit :
--set-json 'policy.trust.githubTrustDomain="YOUR-GHEC-TRUST-DOMAIN"'
--set-json 'policy.trust.githubTrustDomain="YOUR-GHEC-TRUST-DOMAIN"'
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 :
helm show values oci://ghcr.io/sigstore/helm-charts/policy-controller --version 0.10.5
helm show values oci://ghcr.io/sigstore/helm-charts/policy-controller --version 0.10.5
Pour les options de stratégie de confiance :
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.7.0
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.7.0
Pour plus d’informations sur le contrôleur de stratégie Sigstore, consultez la documentation relative au contrôleur de stratégie Sigstore.