|
Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi. |
|
Il s'agit d'une documentation non publiée pour Admission Controller 1.34-dev. |
Format de configuration de vérification
Introduction
Vous pouvez utiliser le format verification-config avec :
-
policy-serverpour vérifier la provenance des modules de stratégie -
verify-image-signaturesstratégie pour vérifier la provenance des images de cluster
Référez-vous à chaîne d’approvisionnement sécurisée pour plus d’informations.
Format
La configuration a 2 clés racines :
-
allOf: Vous devez satisfaire à toutes les informations de vérification énumérées ici pour vérifier que les images de conteneurs sont signées. -
anyOf: Vous devez satisfaire à au moinsanyOf.minimumMatchesde toutes les informations de vérification énumérées pour accepter une image de conteneur comme signée.
Ces deux clés racines acceptent un tableau de clés de type kind. Une liste complète des clés acceptées en fonction de différents cas d’utilisation est ci-dessous :
-
pubKey: Pour les signatures effectuées avec la cryptographie traditionnelle à clé publique/privée. -
githubAction: Pour les signatures effectuées avec le flux de travail sans clé de Sigstore à l’intérieur de GitHub Actions. Admission Controller vérifie ces informations par rapport à l’extension de certificat x509workflow_repositorycréée par l’OpenID Connect de GitHub, et pas seulement lesissueretsubject. Vous devriez utiliser cekindsi vous travaillez avec GitHub Actions. -
genericIssuer: Pour les signatures effectuées avec le flux de travail sans clé de Sigstore, où l’utilisateur doit valider le certificatissueretsubjectpar lui-même. Il accepte unsubject, qui peut être :-
equal: La valeur passée ici doit correspondre exactement ausubjectdans le certificat de signature. -
urlPrefix: La valeur passée ici est post-fixée avec/pour éviter le typo-squatting, et doit être un préfixe dusubjectdans le certificat de signature.
-
La clé kind accepte une clé annotations optionnelle, avec une liste de paires clé-valeur, qui doit être présente dans la signature.
Par exemple :
Ceci est un exemple de configuration pour vérifier les signatures en utilisant le flux de travail Sigstore :
---
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden # mandatory
repo: policy-server # optional
annotations: # optional
env: prod
anyOf: # at least `+anyOf.minimumMatches+` are required to match
minimumMatches: 2 # default is 1
signatures:
- kind: pubKey
owner: alice # optional
key: | # mandatory
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQiTy5S+2JFvVlhUwWPLziM7iTM2j
byLgh2IjpNQN0Uio/9pZOTP/CsJmXoUNshfpTUHd3OxgHgz/6adtf2nBwQ==
-----END PUBLIC KEY-----
annotations: # optional
env: prod
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
equal: https://github.com/bob/app-example/.github/workflows/release.yml@refs/heads/main
annotations: # optional
env: prod
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/bob # <- it will be post-fixed with `+/+` for security reasons
Référence de configuration de signature
Vous pouvez valider les exigences de signature contenues dans un fichier. Développez pour un exemple :
Un fichier d’exigences de signature
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden # mandatory
annotations:
env: prod
anyOf: # at least `+anyOf.minimumMatches+` are required to match
minimumMatches: 2 # default is 1
signatures:
- kind: pubKey
owner: flavio # optional
key: .... # mandatory
annotations: # optional
env: prod
foo: bar
- kind: pubKey
owner: victor # optional
key: .... # mandatory
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
equal: https://github.com/flavio/policy-secure-pod-images/.github/workflows/release.yml@refs/heads/main
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio/
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/kubewarden # <- it will be post-fixed with `+/+` for security reasons
- kind: githubAction
owner: flavio # mandatory
repo: policy1 # optional
- kind: pubKey
owner: alice # optional
key: .... # mandatory
Validation de signature
La configuration précédente contient les deux sections, allOf et anyOf :
-
allOf: Vous faites confiance à la stratégie uniquement si toutes les exigences de signature sont valides. -
anyOf: Vous faites confiance à la stratégie si le critèreminimumMatchesest valide.
Dans l’exemple, le champ minimumMatches est 2. Ainsi, vous devez satisfaire à au moins deux des exigences de signature. La valeur par défaut pour le champ minimumMatches est 1.
Pour la validation de signature, vous devez répondre à toutes les exigences de signature de allOf et au nombre minimum de anyOf.
Validation de clé publique
Pour vérifier qu’une stratégie a la signature de clé publique correcte, vous spécifiez les données de la clé et le propriétaire de la clé. Dans cet exemple, vous définissez kind sur pubKey et le key a la clé publique. Le champ propriétaire est optionnel, mais peut être utile pour clarifier qui possède la clé.
- kind: pubKey
owner: bob # optional
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
Validation de signature sans clé
Une stratégie signée en mode sans clé n’a pas de clé publique que vous pouvez vérifier. Vous pouvez toujours vérifier la stratégie avec les données OpenID Connect (OIDC) utilisées lors du processus de signature. Pour cela, il est nécessaire de définir la validation de la signature comme genericIssuer.
Il est possible de vérifier les informations de la signature :
-
issuer(obligatoire) : cela correspond à l’attributIssuerdans le certificat généré par Fulcio. Cela montre l’OIDC utilisé pour signer la stratégie. -
subject: champ utilisé pour correspondre à l’attributSubjectdans le certificat de Fulcio. Le champSubject(Fulcio) contient l’utilisateur utilisé pour s’authentifier auprès du fournisseur OIDC. Le champ de vérification,subject, peut avoir l’un des deux sous-champs :-
equal: leSubject(Fulcio) du certificat doit être égal à la valeur dans la validation de la signature ; -
urlPrefix: la valeur du champSubject(Fulcio) du certificat doit être préfixée par la valeur définie dans la validation de la signature.
-
|
À la fois le |
Par exemple, cette configuration signifie que la stratégie doit avoir une signature sans clé d’Alice utilisant l’OIDC de GitHub :
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
Cette configuration nécessite que la stratégie soit signée dans les actions GitHub, à partir d’un dépôt appartenant à l’utilisateur GitHub flavio :
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio
Vérification de la signature des actions GitHub
Le "type", githubAction est pour valider les stratégies signées dans les actions GitHub.
Vous pouvez faire cela avec le type genericIssuer également. Pour simplifier le processus d’exigence de signature, utilisez deux champs supplémentaires pour githubAction :
-
owner(obligatoire) : L’identifiant GitHub de l’utilisateur ou de l’organisation en qui avoir confiance. -
repo: Le nom du dépôt en qui avoir confiance.
Par exemple, le dernier extrait, utilisant genericIssuer, pourrait être réécrit comme suit :
- kind: githubAction
owner: flavio
Validation des annotations de signature
Tous les types de signature peuvent avoir d’autres champs de validation optionnels, annotations.
Ces champs sont des données clé/valeur ajoutées lors du processus de signature.
Avec Admission Controller, vous pouvez vérifier que les signatures de stratégie proviennent d’utilisateurs de confiance et ont des annotations spécifiques.
La prochaine validation vérifie deux conditions pour la stratégie :
-
qu’elle est signée avec une clé spécifique
-
elle a une annotation d’environnement de production.
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
annotations:
environment: production
Utilisation d’un fichier de configuration de vérification de signature pour vérifier un artefact OCI de stratégie.
Vous pouvez tester si une stratégie passe la vérification en utilisant le fichier de configuration de vérification. Utilisez le drapeau --verification-config-path de la commande kwctl
verify.
$ cat signatures_requirements.yaml
apiVersion: v1
allOf:
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5Q+cN1Jj2S7N05J4AXnqwP2DyzSg
Mc+raYce2Wthrd30MSgFtoh5ADAkCd/nML2Nx8UD9KBuASRb0gG5jXqgMQ==
-----END PUBLIC KEY-----
$ kwctl verify --verification-config-path signatures_requirements.yaml ghcr.io/kubewarden/policies/user-group-psp:latest
2022-03-29T17:34:37.847169Z INFO kwctl::verify: Policy successfully verified
Ce dernier exemple teste si une stratégie donnée provient de l’organisation Admission Controller :
$ cat kubewarden_signatures.yaml
apiVersion: v1
allOf:
- kind: githubAction
owner: kubewarden
$ kwctl verify --verification-config-path kubewarden_signatures.yaml ghcr.io/kubewarden/policies/user-group-psp:latest
2022-03-29T18:07:39.062292Z INFO kwctl::verify: Policy successfully verified