Acerca del controlador de admisión de Kubernetes
Las atestaciones de artefactos permiten crear garantías de integridad y procedencia no verificables para el software que compile. A su vez, las personas que consumen el software pueden comprobar dónde y cómo se compiló el software.
Los controladores de admisión de Kubernetes son complementos que rigen el comportamiento del servidor de API de Kubernetes. Normalmente se usan para aplicar directivas de seguridad y procedimientos recomendados en un clúster de Kubernetes.
Utilizando el proyecto de código abierto Sigstore Policy Controller puede añadir un controlador de admisión a su clúster de Kubernetes que pueda hacer cumplir las atestaciones de artefactos. De este modo, puede asegurarse de que solo se pueden implementar artefactos con atestaciones válidas.
Para instalar el controlador, ofrecemos dos gráficos de Helm: uno para implementar el Sigstore Policy Controller y otro para cargar la raíz de confianza de GitHub y una directiva predeterminada.
Acerca de las directivas y raíces de confianza
El Sigstore Policy Controller se configura principalmente con las directivas y raíces de confianza, representadas por los recursos TrustRoot
personalizados y ClusterImagePolicy
. TrustRoot
representa un canal de distribución de confianza para el material de clave pública utilizado para comprobar las atestaciones. ClusterImagePolicy
representa una directiva para aplicar atestaciones en imágenes.
También TrustRoot
puede contener una raíz del repositorio TUF, lo que permite que el clúster reciba actualizaciones de forma continua y segura en su material de clave pública de confianza. Si se deja sin especificar, se usará ClusterImagePolicy
de forma predeterminada el material clave de código abierto instancia pública de Sigstore. Al comprobar las atestaciones generadas para repositorios privados, ClusterImagePolicy
debe hacer referencia a GitHub TrustRoot
.
Introducción al controlador de admisión de Kubernetes
Para configurar un controlador de admisión para aplicar atestaciones de artefactos de GitHub, debe:
- Implementar el Sigstore Policy Controller.
- Agregar el GitHub
TrustRoot
y un elementoClusterImagePolicy
al clúster. - Habilitar la directiva en el espacio de nombres.
Implementación del Sigstore Policy Controller
Hemos empaquetado el Sigstore Policy Controller como un gráfico de Helm distribuido de GitHub. Asegúrese de que dispone de los siguientes requisitos previos:
En primer lugar, instale el gráfico de Helm que implementa el Sigstore Policy Controller:
helm upgrade policy-controller --install --atomic \ --create-namespace --namespace artifact-attestations \ oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \ --version v0.10.0-github9
helm upgrade policy-controller --install --atomic \
--create-namespace --namespace artifact-attestations \
oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller \
--version v0.10.0-github9
Esto instala el controlador de directivas en el espacio de nombres artifact-attestations
. En este momento, no se ha configurado ninguna directiva y no aplicará ninguna atestación.
Adición de GitHub TrustRoot
y un ClusterImagePolicy
Una vez implementado el controlador de directivas, debe agregar GitHub TrustRoot
y un elemento ClusterImagePolicy
al clúster. Use el gráfico de Helm que proporcionamos para hacerlo. Asegúrese de reemplazar MY-ORGANIZATION
por el nombre de la organización de GitHub (por ejemplo, github
o octocat-inc
).
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
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
Ahora ha instalado la raíz de confianza de GitHub y una directiva de atestación de artefactos en el clúster. Esta directiva rechazará los artefactos que no se hayan originado en la organización de GitHub.
Habilitación de la directiva en el espacio de nombres
Warning
Esta directiva no se aplicará hasta que especifique los espacios de nombres a los que se debe aplicar.
Cada espacio de nombres del clúster puede aplicar directivas de forma independiente. Para habilitar la aplicación en un espacio de nombres, puede agregar la siguiente etiqueta al espacio de nombres:
metadata:
labels:
policy.sigstore.dev/include: "true"
Una vez agregada la etiqueta, la directiva de atestación de artefactos de GitHub se aplicará en el espacio de nombres.
Como alternativa, puede ejecutar:
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
kubectl label namespace MY-NAMESPACE policy.sigstore.dev/include=true
Imágenes coincidentes
De forma predeterminada, la directiva instalada con el gráfico de Helm trust-policies
comprobará las atestaciones de todas las imágenes antes de admitirlas en el clúster. Si solo pretende aplicar atestaciones para un subconjunto de imágenes, puede usar los valores de Helm policy.images
y policy.exemptImages
especificar una lista de imágenes con las que debe coincidir. Estos valores se pueden establecer en una lista de patrones globales que coinciden con los nombres de imagen. La sintaxis global usa la semántica de Go filepath, con la adición de **
para que coincida con cualquier secuencia de caracteres, incluidas las barras diagonales.
Por ejemplo, para aplicar atestaciones para imágenes que coincidan con el patrón ghcr.io/MY-ORGANIZATION/*
y admitan busybox
sin una atestación válida, puede ejecutar:
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/**"]'
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/**"]'
Todos los modelos deben usar el nombre completo, incluso si las imágenes se originan en Docker Hub. En este ejemplo, si queremos excluir la imagen busybox
, debemos proporcionar el nombre completo, incluido el dominio y el glob de doble estrella para que coincida con todas las versiones de la imagen: index.docker.io/library/busybox**
.
Tenga en cuenta que cualquier imagen que quiera admitir debe tener un patrón global coincidente en la lista policy.images
. Si una imagen no coincide con ningún patrón, se rechazará. Además, si una imagen coincide con policy.images
y policy.exemptImages
, se rechazará.
Uso avanzado
Para ver el conjunto completo de opciones que puede configurar con el gráfico de Helm, puede ejecutar cualquiera de los siguientes comandos. Para las opciones del controlador de directivas:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/policy-controller --version v0.10.0-github9
Para opciones de directiva de confianza:
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2
helm show values oci://ghcr.io/github/artifact-attestations-helm-charts/trust-policies --version v0.6.2
Para obtener más información sobre el Sigstore Policy Controller, consulte la documentación del Sigstore Policy Controller.