|
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. |
Configurando PolicyServers para utilizar una instancia privada de Sigstore
Puedes configurar un PolicyServer para utilizar una instancia privada o autohospedada de Sigstore para la verificación de firmas de políticas, en lugar de la infraestructura pública de Sigstore por defecto. Esto es útil en entornos aislados o cuando operas tu propia ampliación de Sigstore.
Paso 1 - Generar el ClientTrustConfig JSON
El PolicyServer espera un ClientTrustConfig JSON que describe los anclajes de confianza y la configuración de firma de tu instancia privada de Sigstore.
Obtener certificados y claves públicas
Recupera lo siguiente de tu instancia privada de Sigstore:
-
fulcio.pem- Cadena de certificados CA de Fulcio (PEM) -
rekor.pub- Clave pública del registro de transparencia de Rekor -
tsa.pem- Cadena de certificados de la Autoridad de Timestamps (PEM) -
ctfe.pub- Clave pública del registro CT
# Fulcio CA certificate chain
curl --fail -o fulcio.pem "${FULCIO_URL}/api/v1/rootCert"
# Rekor transparency log public key
curl --fail -o rekor.pub "${REKOR_URL}/api/v1/log/publicKey"
# Timestamp Authority certificate chain
curl --fail -o tsa.pem "${TSA_URL}/api/v1/timestamp/certchain"
# CT log public key (from the Kubernetes secret in tuf-system namespace)
kubectl get secret -o json -n tuf-system ctlog-public-key \
| jq -r ".data.public" | base64 -d > ctfe.pub
|
Consideración de seguridad
Asegúrate de descargar de forma segura los certificados y claves de tu instancia de Sigstore. De lo contrario, podrías acabar configurando SUSE Security Admission Controller con datos comprometidos. Los comandos anteriores son ejemplos de cómo hacerlo en un entorno de pruebas. Consulta con el equipo adecuado en tu organización para aprender cómo obtener esta información correctamente. |
Genera la raíz de confianza y la configuración de firma
Establece variables de entorno que apunten a las URL de tu servicio privado de Sigstore:
export FULCIO_URL=https://fulcio.example.com
export REKOR_URL=https://rekor.example.com
export TSA_URL=https://tsa.example.com
export CTLOG_URL=https://ctlog.example.com
export ISSUER_URL=https://oidc.example.com
Ejecuta cosign para generar la raíz de confianza:
cosign trusted-root create \
--fulcio="url=$FULCIO_URL,certificate-chain=fulcio.pem" \
--rekor="url=$REKOR_URL,public-key=rekor.pub,start-time=2024-01-01T00:00:00Z" \
--tsa="url=$TSA_URL,certificate-chain=tsa.pem" \
--ctfe="url=$CTLOG_URL,public-key=ctfe.pub,start-time=2024-01-01T00:00:00Z" \
--out trusted_root.json
Ejecuta cosign para generar la configuración de firma:
cosign signing-config create \
--fulcio="url=$FULCIO_URL,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--rekor="url=$REKOR_URL,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--rekor-config="ANY" \
--oidc-provider="url=$ISSUER_URL/auth,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--tsa="url=$TSA_URL/api/v1/timestamp,api-version=1,start-time=2024-01-01T00:00:00Z,operator=sigstore.dev" \
--tsa-config="EXACT:1" \
--out signing_config.json
|
El valor de |
Para una descripción completa de todas las banderas disponibles y definiciones de campos JSON para ambos comandos, consulta la referencia de CLI de cosign y la especificación de configuración de confianza del cliente de Sigstore.
Paso 2 - Crea un ConfigMap en el espacio de nombres kubewarden
Almacena el JSON de ClientTrustConfig en un ConfigMap con la clave sigstore-trust-config. El ConfigMap debe estar en el espacio de nombres del controlador de admisión. En este ejemplo es kubewarden:
kubectl --namespace kubewarden create configmap my-sigstore-trust-config \
--from-file=sigstore-trust-config=trust_config.json
Paso 3 - Crea un ConfigMap de configuración de verificación
Crea un archivo verification_config.yaml especificando las restricciones de identidad del certificado para tus directivas firmadas. Por ejemplo, al utilizar un token de cuenta de servicio de Kubernetes:
allOf:
- kind: genericIssuer
issuer: https://kubernetes.default.svc.cluster.local
subject:
equal: https://kubernetes.io/namespaces/<namespace>/serviceaccounts/<serviceaccount>
anyOf: null
Reemplaza <namespace> y <serviceaccount> con el espacio de nombres y la cuenta de servicio utilizados al firmar la directiva.
Crea el ConfigMap:
kubectl --namespace kubewarden create configmap my-verification-config \
--from-file=verification-config=verification_config.yaml
|
La clave del ConfigMap debe ser |
Paso 4 - Configura el PolicyServer
Establece spec.sigstoreTrustConfig y spec.verificationConfig en tu PolicyServer con los nombres de los ConfigMaps que creaste:
apiVersion: policies.kubewarden.io/v1
kind: PolicyServer
metadata:
name: default
spec:
image: ghcr.io/kubewarden/policy-server:latest
replicas: 1
sigstoreTrustConfig: my-sigstore-trust-config
verificationConfig: my-verification-config
El controlador monta los ConfigMaps en el pod del PolicyServer y lo configura para utilizar tu instancia privada de Sigstore para la verificación de firmas, aplicando las restricciones de identidad especificadas en la configuración de verificación.
|
Consideración de seguridad
Cualquier usuario con acceso de escritura al ConfigMap referenciado por Restringe el acceso a este ConfigMap utilizando Kubernetes RBAC, siguiendo el principio de menor privilegio. |