Hola, hallamos la solución a tu búsqueda, has scroll y la encontrarás aquí.
Las delegaciones en Docker Content Trust (DCT) le permiten controlar quién puede y quién no puede firmar una etiqueta de imagen. Una delegación tendrá un par de claves de delegación públicas y privadas. Una delegación podría contener varios pares de claves y contribuyentes para a) permitir que varios usuarios formen parte de una delegación yb) admitir la rotación de claves.
La delegación más importante dentro de Docker Content Trust es targets/releases
. Esto se ve como la fuente canónica de una etiqueta de imagen confiable, y sin la clave de un colaborador bajo esta delegación, no podrán firmar una etiqueta.
Afortunadamente al usar el $ docker trust
comandos, automáticamente inicializaremos un repositorio, administraremos las claves del repositorio y agregaremos una clave de colaborador al targets/releases
delegación vía docker trust signer add
.
Configuración del cliente de Docker
Por defecto, el $ docker trust
Los comandos esperan que la URL del servidor del notario sea la misma que la URL del registro especificada en la etiqueta de la imagen (siguiendo una lógica similar a $ docker push
). Al usar Docker Hub o DTR, la URL del servidor del notario es la misma que la URL del registro. Sin embargo, para entornos autohospedados o registros de terceros, deberá especificar una URL alternativa para el servidor notarial. Esto se hace con:
export DOCKER_CONTENT_TRUST_SERVER=https://:
Si no exporta esta variable en entornos autohospedados, es posible que vea errores como:
$ docker trust signer add --key cert.pem jeff dtr.example.com/admin/demo Adding signer "jeff" to dtr.example.com/admin/demo... [...] Error: trust data missing for remote repository dtr.example.com/admin/demo or remote repository not found: timestamp key trust data unavailable. Has a notary repository been initialized? $ docker trust inspect dtr.example.com/admin/demo --pretty WARN[0000] Error while downloading remote metadata, using cached timestamp - this might not be the latest version available remotely [...]
Si ha habilitado la autenticación para su servidor notarial o está utilizando DTR, deberá iniciar sesión antes de poder enviar datos al servidor notarial.
$ docker login dtr.example.com/user/repo Username: admin Password: Login Succeeded $ docker trust signer add --key cert.pem jeff dtr.example.com/user/repo Adding signer "jeff" to dtr.example.com/user/repo... Initializing signed repository for dtr.example.com/user/repo... Successfully initialized "dtr.example.com/user/repo" Successfully added signer: jeff to dtr.example.com/user/repo
Si no inicia sesión, verá:
$ docker trust signer add --key cert.pem jeff dtr.example.com/user/repo Adding signer "jeff" to dtr.example.com/user/repo... Initializing signed repository for dtr.example.com/user/repo... you are not authorized to perform this operation: server returned 401. Failed to add signer to: dtr.example.com/user/repo
Si está utilizando DTR y le gustaría trabajar con la política de firma de un UCP remoto, debe registre su instancia DTR con ese UCP remoto. Ver Uso de Docker Content Trust con un clúster UCP remoto para más detalles.
Configuración del cliente notario
Algunas de las funciones más avanzadas de DCT requieren la CLI de notario. Para instalar y configurar Notary CLI:
1) Descarga el cliente y asegúrese de que esté disponible en su camino.
2) Cree un archivo de configuración en ~/.notary/config.json
con el siguiente contenido:
"trust_dir" : "~/.docker/trust", "remote_server": "url": "https://dtr.example.com", "root_ca": "../.docker/ca.pem"
El archivo de configuración recién creado contiene información sobre la ubicación de los datos de confianza de Docker locales y la URL del servidor del notario.
Para obtener información más detallada sobre cómo utilizar el notario fuera de los casos de uso de Docker Content Trust, consulte la documentación de la CLI del notario aquí
Creación de claves de delegación
Un requisito previo para agregar su primer colaborador es un par de claves de delegación. Estas claves se pueden generar localmente usando $ docker trust
, generado por una autoridad de certificación, o puede tomarse de un paquete de cliente de Universal Control Plane.
Uso de Docker Trust para generar claves
Docker Trust tiene un generador integrado para un par de claves de delegación, $ docker trust generate
. La ejecución de este comando cargará automáticamente la clave privada de delegación en el almacén de confianza local de Docker.
$ docker trust key generate jeff Generating key for jeff... Enter passphrase for new jeff key with ID 9deed25: Repeat passphrase for new jeff key with ID 9deed25: Successfully generated and loaded private key. Corresponding public key available: /home/ubuntu/Documents/mytrustdir/jeff.pub
Generación manual de claves
Si necesita generar manualmente una clave privada (ya sea RSA o ECDSA) y un certificado x509 que contenga la clave pública, puede utilizar herramientas locales como openssl o cfssl junto con una autoridad de certificación local o de toda la empresa.
A continuación, se muestra un ejemplo de cómo generar una clave de porción RSA de 2048 bits (todas las claves RSA deben tener al menos 2048 bits):
$ openssl genrsa -out delegation.key 2048 Generating RSA private key, 2048 bit long modulus ....................................................+++ ............+++ e is 65537 (0x10001)
Deberían mantener delegation.key
privado porque se utiliza para firmar etiquetas.
Luego, deben generar un certificado x509 que contenga la clave pública, que es lo que necesita de ellos. Aquí está el comando para generar una CSR (solicitud de firma de certificado):
$ openssl req -new -sha256 -key delegation.key -out delegation.csr
Luego, pueden enviarlo a cualquier CA en la que confíe para firmar certificados, o pueden autofirmar el certificado (en este ejemplo, crear un certificado que sea válido por 1 año):
$ openssl x509 -req -sha256 -days 365 -in delegation.csr -signkey delegation.key -out delegation.crt
Entonces necesitan darte delegation.crt
, ya sea autofirmado o firmado por una CA.
Finalmente, deberá agregar la clave privada a su almacén de confianza local de Docker.
$ docker trust key load delegation.key --name jeff Loading key from "delegation.key"... Enter passphrase for new jeff key with ID 8ae710e: Repeat passphrase for new jeff key with ID 8ae710e: Successfully imported key from delegation.key
Uso de paquetes de cliente de Universal Control Plane
Universal Control Plane (UCP) administra el acceso CLI y API a sus clústeres a través de certificados generados en un paquete de cliente. Estos certificados y claves se pueden utilizar como un par de claves de delegación. Dentro de cada paquete de cliente hay una clave privada única (key.pem
) y certificado x509 que contiene una clave pública (cert.pem
).
1) Descargue el paquete de cliente de un usuario desde Universal Control Plane.
2) Extraiga el paquete del cliente en su directorio actual
3) Cargue la clave privada en su tienda de confianza local de Docker
$ docker trust key load key.pem --name jeff Loading key from "key.pem"... Enter passphrase for new jeff key with ID 9deed25: Repeat passphrase for new jeff key with ID 9deed25: Successfully imported key from key.pem
Ver claves de delegación locales
Para enumerar las claves que se han importado al almacén de confianza local de Docker, podemos usar la CLI de notario.
$ notary key list ROLE GUN KEY ID LOCATION ---- --- ------ -------- root f6c6a4b00fefd8751f86194c7d87a3bede444540eb3378c4a11ce10852ab1f96 /home/ubuntu/.docker/trust/private jeff 9deed251daa1aa6f9d5f9b752847647cf8d705da0763aa5467650d0987ed5306 /home/ubuntu/.docker/trust/private
Gestión de delegaciones en un notario
Cuando se agrega la primera delegación al Notary Server usando $ docker trust
, iniciamos automáticamente datos de confianza para el repositorio. Esto incluye la creación del destino del notario y las claves de instantáneas, y la rotación de la clave de instantáneas para que sea administrada por el notario. Puede encontrar más información sobre estas claves aquí
Al iniciar un repositorio, necesitará la clave y la frase de contraseña de una clave raíz canónica de notario local. Si no ha iniciado un repositorio antes y, por lo tanto, no tiene una clave raíz de notario, $ docker trust
creará uno para ti.
Asegúrese de proteger y hacer una copia de seguridad de su clave raíz canónica de notario
Iniciando el repositorio
Para cargar la primera clave a una delegación, al mismo tiempo que inicia un repositorio, puede usar el $ docker trust signer add
mando. Esto agregará la clave pública del colaborador a la targets/releases
delegación y crear una segunda targets/
delegación.
Para DCT, el nombre de la segunda delegación, en el siguiente ejemplo jeff
, está ahí para ayudarlo a realizar un seguimiento del propietario de las llaves. En casos de uso más avanzados de Notario, se utilizan delegaciones adicionales para la jerarquía.
$ docker trust signer add --key cert.pem jeff dtr.example.com/admin/demo Adding signer "jeff" to dtr.example.com/admin/demo... Initializing signed repository for dtr.example.com/admin/demo... Enter passphrase for root key with ID f6c6a4b: Enter passphrase for new repository key with ID b0014f8: Repeat passphrase for new repository key with ID b0014f8: Successfully initialized "dtr.example.com/admin/demo" Successfully added signer: jeff to dtr.example.com/admin/demo
Puede ver qué claves se han enviado al servidor de notarios para cada repositorio con el $ docker trust inspect
mando.
$ docker trust inspect --pretty dtr.example.com/admin/demo No signatures for dtr.example.com/admin/demo List of signers and their keys for dtr.example.com/admin/demo SIGNER KEYS jeff 1091060d7bfd Administrative keys for dtr.example.com/admin/demo Repository Key: b0014f8e4863df2d028095b74efcb05d872c3591de0af06652944e310d96598d Root Key: 64d147e59e44870311dd2d80b9f7840039115ef3dfa5008127d769a5f657a5d7
También puede utilizar la CLI de notario para enumerar las delegaciones y las claves. Aquí puede ver claramente que se adjuntaron las llaves targets/releases
y targets/jeff
.
$ notary delegation list dtr.example.com/admin/demo ROLE PATHS KEY IDS THRESHOLD ---- ----- ------- --------- targets/jeff ""1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 1 targets/releases "" 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 1
Agregar firmantes adicionales
Docker Trust le permite configurar múltiples delegaciones por repositorio, lo que le permite administrar el ciclo de vida de las delegaciones. Al agregar delegaciones adicionales con $ docker trust
la clave de colaboradores se agrega una vez más a la targets/release
papel.
Tenga en cuenta que necesitará la frase de contraseña para la clave del repositorio; esto se habría configurado cuando inició el repositorio por primera vez.
$ docker trust signer add --key ben.pub ben dtr.example.com/admin/demo Adding signer "ben" to dtr.example.com/admin/demo... Enter passphrase for repository key with ID b0014f8: Successfully added signer: ben to dtr.example.com/admin/demo
Compruebe para demostrar que ahora hay 2 delegaciones (firmante).
$ docker trust inspect --pretty dtr.example.com/admin/demo No signatures for dtr.example.com/admin/demo List of signers and their keys for dtr.example.com/admin/demo SIGNER KEYS ben afa404703b25 jeff 1091060d7bfd Administrative keys for dtr.example.com/admin/demo Repository Key: b0014f8e4863df2d028095b74efcb05d872c3591de0af06652944e310d96598d Root Key: 64d147e59e44870311dd2d80b9f7840039115ef3dfa5008127d769a5f657a5d7
Agregar claves a una delegación existente
Para admitir cosas como la rotación de claves y la expiración / retirada de claves, puede publicar varias claves de colaborador por delegación. El único requisito previo aquí es asegurarse de usar el mismo nombre de delegación, en este caso jeff
. Docker Trust se encargará automáticamente de agregar esta nueva clave a targets/releases
.
Tenga en cuenta que necesitará la frase de contraseña para la clave del repositorio; esto se habría configurado cuando inició el repositorio por primera vez.
$ docker trust signer add --key cert2.pem jeff dtr.example.com/admin/demo Adding signer "jeff" to dtr.example.com/admin/demo... Enter passphrase for repository key with ID b0014f8: Successfully added signer: jeff to dtr.example.com/admin/demo
Compruebe para demostrar que la delegación (firmante) ahora contiene varios ID de clave.
$ docker trust inspect --pretty dtr.example.com/admin/demo No signatures for dtr.example.com/admin/demo List of signers and their keys for dtr.example.com/admin/demo SIGNER KEYS jeff 1091060d7bfd, 5570b88df073 Administrative keys for dtr.example.com/admin/demo Repository Key: b0014f8e4863df2d028095b74efcb05d872c3591de0af06652944e310d96598d Root Key: 64d147e59e44870311dd2d80b9f7840039115ef3dfa5008127d769a5f657a5d7
Eliminar una delegación
Si necesita eliminar una delegación, incluidas las claves de colaborador que se adjuntan a la targets/releases
rol, puede utilizar el $ docker trust signer remove
mando.
Tenga en cuenta que las etiquetas que fueron firmadas por la delegación eliminada deberán ser resignadas por una delegación activa
$ docker trust signer remove dtr.example.com/admin/demo Removing signer "ben" from dtr.example.com/admin/demo... Enter passphrase for repository key with ID b0014f8: Successfully removed ben from dtr.example.com/admin/demo
Solución de problemas
1) Si ve un error que indica que no hay claves utilizables en targets/releases
, deberá agregar delegaciones adicionales utilizando docker trust signer add
antes de renunciar a las imágenes.
WARN[0000] role targets/releases has fewer keys than its threshold of 1; it will not be usable until keys are added to it
2) Si ya ha agregado delegaciones adicionales y está viendo un mensaje de error que indica que no hay firmas válidas en targest/releases
, deberás renunciar al targets/releases
archivo de delegación con Notary CLI.
WARN[0000] Error getting targets/releases: valid signatures did not meet threshold for targets/releases
La renuncia al archivo de delegación se realiza con el $ notary witness
mando
$ notary witness dtr.example.com/admin/demo targets/releases --publish
Más información sobre $ notary witness
se puede encontrar el comando aquí
Eliminar la clave de un colaborador de una delegación
Como parte de la rotación de claves para una delegación, es posible que desee eliminar una clave individual pero conservar la delegación. Esto se puede hacer con Notary CLI.
Recuerde que tendrá que quitar la llave tanto de la targets/releases
rol y el rol específico de ese firmante targets/
.
1) Necesitaremos obtener el ID de clave del Notary Server
$ notary delegation list dtr.example.com/admin/demo ROLE PATHS KEY IDS THRESHOLD ---- ----- ------- --------- targets/jeff ""8fb597cbaf196f0781628b2f52bff6b3912e4e8075720378fda60d17232bbcf9 1 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 targets/releases "" 8fb597cbaf196f0781628b2f52bff6b3912e4e8075720378fda60d17232bbcf9 1 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1
2) Retirar del targets/releases
delegación
$ notary delegation remove dtr.example.com/admin/demo targets/targets 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 --publish Auto-publishing changes to dtr.example.com/admin/demo Enter username: admin Enter password: Enter passphrase for targets key with ID b0014f8: Successfully published changes for repository dtr.example.com/admin/demo
3) Retirar del targets/
delegación
$ notary delegation remove dtr.example.com/admin/demo targets/jeff 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 --publish Removal of delegation role targets/jeff with keys [5570b88df0736c468493247a07e235e35cf3641270c944d0e9e8899922fc6f99], to repository "dtr.example.com/admin/demo" staged for next publish. Auto-publishing changes to dtr.example.com/admin/demo Enter username: admin Enter password: Enter passphrase for targets key with ID b0014f8: Successfully published changes for repository dtr.example.com/admin/demo
4) Verifique la lista de delegaciones restantes
$ notary delegation list dtr.example.com/admin/demo ROLE PATHS KEY IDS THRESHOLD ---- ----- ------- --------- targets/jeff ""8fb597cbaf196f0781628b2f52bff6b3912e4e8075720378fda60d17232bbcf9 1 targets/releases "" 8fb597cbaf196f0781628b2f52bff6b3912e4e8075720378fda60d17232bbcf9 1
Eliminar una clave privada de delegación local
Como parte de las claves de delegación rotativas, es posible que deba eliminar una clave de delegación local del almacén de confianza de Docker local. Esto se hace con Notary CLI, usando el $ notary key remove
mando.
1) Necesitaremos obtener el ID de clave de la tienda local de Docker Trust.
$ notary key list ROLE GUN KEY ID LOCATION ---- --- ------ -------- root f6c6a4b00fefd8751f86194c7d87a3bede444540eb3378c4a11ce10852ab1f96 /home/ubuntu/.docker/trust/private admin 8fb597cbaf196f0781628b2f52bff6b3912e4e8075720378fda60d17232bbcf9 /home/ubuntu/.docker/trust/private jeff 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 /home/ubuntu/.docker/trust/private targets ...example.com/admin/demo c819f2eda8fba2810ec6a7f95f051c90276c87fddfc3039058856fad061c009d /home/ubuntu/.docker/trust/private
2) Elimina la clave de la tienda local de Docker Trust.
$ notary key remove 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 Are you sure you want to remove 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 (role jeff) from /home/ubuntu/.docker/trust/private? (yes/no) y Deleted 1091060d7bfd938dfa5be703fa057974f9322a4faef6f580334f3d6df44c02d1 (role jeff) from /home/ubuntu/.docker/trust/private.
Eliminar todos los datos de confianza de un repositorio
Puede eliminar todos los datos de confianza de un repositorio, incluido el repositorio, el destino, la instantánea y todas las claves de delegaciones mediante la CLI de Notary.
Esto suele ser requerido por un registro de contenedor antes de que se pueda eliminar un repositorio en particular.
$ notary delete dtr.example.com/admin/demo --remote Deleting trust data for repository dtr.example.com/admin/demo Enter username: admin Enter password: Successfully deleted local and remote trust data for repository dtr.example.com/admin/demo $ docker trust inspect --pretty dtr.example.com/admin/demo No signatures or cannot access dtr.example.com/admin/demo
Información relacionada
- Confianza del contenido en Docker
- Administrar claves para la confianza del contenido
- Automatización con confianza en el contenido
- Juega en un entorno limitado de confianza en el contenido
- Uso de Docker Content Trust con un clúster UCP remoto
confianza, seguridad, delegaciones, teclas, repositorio