|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
|
Esta es documentación inédita para Admission Controller 1.34-dev. |
Formato de configuración de verificación
Introducción
Puedes utilizar el formato verification-config con:
-
policy-serverpara verificar la procedencia de los módulos de directivas -
verify-image-signaturesdirectiva para verificar la procedencia de las imágenes del clúster
Consulta sistema de suministro seguro para más información.
Formato
La configuración tiene 2 claves raíz:
-
allOf: Debes satisfacer toda la información de verificación listada aquí para verificar que las imágenes de contenedores están firmadas. -
anyOf: Debes satisfacer al menosanyOf.minimumMatchesde toda la información de verificación listada para aceptar una imagen de contenedor como firmada.
Estas dos claves raíz aceptan un array de claves de tipo kind. Una lista completa de claves aceptadas según diferentes casos de uso se encuentra a continuación:
-
pubKey: Para firmas realizadas con criptografía tradicional de clave pública/privada. -
githubAction: Para firmas realizadas con el flujo de trabajo sin clave de Sigstore dentro de GitHub Actions. Admission Controller verifica esta información contra la extensión del certificado x509workflow_repositorycreada por el OpenID Connect de GitHub, y no solo contra elissuery elsubject. Deberías utilizar estekindsi trabajas con GitHub Actions. -
genericIssuer: Para firmas realizadas con el flujo de trabajo sin clave de Sigstore, donde el usuario necesita validar el certificadoissuerysubjectpor su cuenta. Acepta unsubject, que puede ser:-
equal: El valor pasado aquí debe coincidir exactamente con elsubjecten el certificado de firma. -
urlPrefix: El valor pasado aquí se post-fija con/para prevenir el typo-squatting, y debe ser un prefijo delsubjecten el certificado de firma.
-
La clave kind acepta una clave opcional annotations, con una lista de pares clave-valor, que debe estar presente en la firma.
Ejemplo
Este es un ejemplo de una configuración para verificar firmas utilizando el flujo de trabajo de 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
Referencia de configuración de firma
Puedes validar los requisitos de firma contenidos en un archivo. Expande para un ejemplo:
Un archivo de requisitos de firma
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
Validación de firma
La configuración anterior contiene las dos secciones, allOf y anyOf:
-
allOf: Confías en la directiva solo si todos los requisitos de firma son válidos. -
anyOf: Confías en la directiva si el criteriominimumMatcheses válido.
En el ejemplo, el campo minimumMatches es 2. Por lo tanto, necesitas cumplir al menos dos de los requisitos de firma. El valor por defecto para el campo minimumMatches es 1.
Para la validación de firma, necesitas cumplir todos los requisitos de la firma de allOf y el número mínimo de anyOf.
Validación de clave pública
Para comprobar que una directiva tiene la firma de clave pública correcta, especificas los datos de la clave y el propietario de la clave. En este ejemplo, estableces kind en pubKey y la key tiene la clave pública. El campo del propietario es opcional, pero puede ser útil para aclarar quién es el propietario de la clave.
- kind: pubKey
owner: bob # optional
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
Validación de firma sin clave
Una directiva firmada en modo sin clave no tiene una clave pública que puedas verificar. Aún puedes verificar la directiva con los datos de OpenID Connect (OIDC) utilizados durante el proceso de firma. Para ello, es necesario definir la validación de la firma como genericIssuer.
Es posible verificar la información de la firma:
-
issuer(obligatorio): esto coincide con el atributoIssueren el certificado generado por Fulcio. Esto muestra el OIDC utilizado para firmar la directiva. -
subject: campo utilizado para coincidir con el atributoSubjecten el certificado de Fulcio. El campoSubject(Fulcio) contiene el usuario utilizado para autenticar contra el proveedor de OIDC. El campo de verificación,subject, puede tener uno de dos subcampos:-
equal: elSubject(Fulcio) del certificado debe ser igual al valor en la validación de la firma; -
urlPrefix: el valor del campoSubject(Fulcio) del certificado debe estar precedido por el valor definido en la validación de la firma.
-
|
Tanto el |
Por ejemplo, esta configuración significa que la directiva debe tener una firma sin clave de Alice utilizando el OIDC de GitHub:
- kind: genericIssuer
issuer: https://github.com/login/oauth
subject:
equal: alice@example.com
Esta configuración necesita que la directiva esté firmada en las acciones de GitHub, desde un repositorio propiedad del usuario de GitHub flavio:
- kind: genericIssuer
issuer: https://token.actions.githubusercontent.com
subject:
urlPrefix: https://github.com/flavio
Verificación de la firma de acciones de GitHub
El "tipo", githubAction es para validar directivas firmadas en las acciones de GitHub.
Puedes hacer esto también con el tipo genericIssuer. Para simplificar el proceso de requisitos de firma, utiliza dos campos adicionales para githubAction:
-
owner(obligatorio): ID de GitHub del usuario u organización en la que confiar. -
repo: El nombre del repositorio en el que confiar.
Por ejemplo, el último fragmento, utilizando genericIssuer, podría reescribirse como:
- kind: githubAction
owner: flavio
Validación de anotaciones de firma
Todos los tipos de firma pueden tener otros campos de validación opcionales, annotations.
Estos campos son datos clave/valor añadidos durante el proceso de firma.
Con Admission Controller, puedes verificar que las firmas de directivas provienen de usuarios de confianza y tienen anotaciones específicas.
La siguiente validación comprueba dos condiciones para la directiva:
-
que está firmada con una clave específica
-
tiene una anotación de entorno de producción.
- kind: pubKey
key: |
-----BEGIN PUBLIC KEY-----
MBFKHFDGHKIJH0CAQYIKoZIzj0DAQcDQgAEX0HFTtCfTtPmkx5p1RbDE6HJSGAVD
BVDF6SKFSF87AASUspkQsN3FO4iyWodCy5j3o0CdIJD/KJHDJFHDFIu6sA==
-----END PUBLIC KEY-----
annotations:
environment: production
Utilizando un archivo de configuración de verificación de firma para comprobar un artefacto OCI de la directiva
Puedes probar si una directiva pasa la verificación utilizando el archivo de configuración de verificación. Utiliza la bandera --verification-config-path del comando 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
Este último ejemplo prueba si una directiva dada provino de la organización 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