Firma de imágenes para seguridad
Descubra cómo firmar imágenes almacenadas en Container Registry.
Por motivos de conformidad y seguridad, los administradores de sistemas a menudo desean desplegar software en un sistema de producción solo cuando están seguros de que:
-
El software proviene de un origen de confianza.
-
El software no ha sido modificado desde su publicación, comprometiendo su integridad.
Para cumplir estos requisitos, puede firmar imágenes almacenadas en Oracle Cloud Infrastructure Registry (también conocido como Container Registry). Las imágenes firmadas proporcionan una forma de verificar tanto el origen de una imagen como su integridad.
Container Registry permite a los usuarios o sistemas enviar imágenes al registro y, a continuación, firmarlas mediante una clave de cifrado maestra obtenida de Oracle Cloud Infrastructure Vault, creando una firma de imagen. Una firma de imagen asocia una imagen firmada a una clave de cifrado maestra determinada utilizada para firmar la imagen. Una imagen puede tener varias firmas, cada una creada utilizando una clave de cifrado maestra diferente.
Los usuarios o sistemas que extraen una imagen firmada de Container Registry pueden estar seguros de que el origen de la imagen es de confianza y de que la integridad de la imagen no se ha visto afectada. Para mejorar aún más el cumplimiento y la seguridad, los clientes se pueden configurar para extraer solo imágenes firmadas del registro.
A nivel general, estos son los pasos a seguir para almacenar imágenes firmadas en Container Registry:
-
Cree la imagen en su propia máquina o en su sistema de integración y despliegue continuos.
-
Etiquete y transfiera la imagen a Container Registry.
-
Si no tiene acceso a una clave de cifrado maestra en Oracle Cloud Infrastructure Vault, obtenga acceso a una clave existente o cree una nueva clave.
-
Utilice la CLI de Container Registry para firmar la imagen, creando una firma de imagen que asocie la imagen a la clave de cifrado maestra y la versión de clave en el servicio Vault.
Firma de una imagen y creación de una firma de imagen
Después de crear una imagen y transferirla a Container Registry, puede firmarla utilizando una clave de cifrado maestra obtenida de Oracle Cloud Infrastructure Vault, creando una firma de imagen. Tenga en cuenta que una firma de imagen está asociada al OCID de una imagen, lo que hace que sea específica de una transferencia concreta de la imagen.
Para firmar una imagen y crear una firma de imagen:
-
Cree una imagen en su propia máquina o en su sistema de integración y despliegue continuos (por ejemplo, mediante el comando
docker build
). -
Transfiera la imagen a Container Registry. Siga las instrucciones de Transferencia de imágenes mediante la CLI de Docker para:
-
Conéctese a Container Registry utilizando el comando
docker login
. -
Etiquete la imagen que desea transferir con el comando
docker tag
. Por ejemplo:docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
Transfiera la imagen a Container Registry mediante el comando
docker push
. Por ejemplo:docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
-
Obtenga el OCID de la imagen, ya sea mediante la consola (consulte Obtención de detalles de una imagen) o mediante la CLI (utilice el comando
oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>
). -
Si aún no tiene acceso a una clave asimétrica de RSA en Oracle Cloud Infrastructure Vault, obtenga acceso a una clave asimétrica de RSA existente o cree una nueva clave de cifrado maestra como clave asimétrica de RSA (consulte Creación de una clave de cifrado maestra).
Tenga en cuenta que no se admite el uso de claves simétricas AES para firmar imágenes. Para obtener más información sobre los diferentes tipos de clave, consulte Descripción general de Vault.
-
Anote el OCID de la clave de cifrado maestra y el OCID de la versión de clave almacenada en Oracle Cloud Infrastructure Vault. Consulte Listing Master Encryption Keys.
-
Firme la imagen que ha transferido a Container Registry utilizando la clave maestra y la versión de clave en el servicio Vault, creando una firma de imagen introduciendo:
oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json>
donde:-
--compartment-id <compartment-ocid>
es el OCID del compartimento al que pertenece el repositorio de la imagen. Por ejemplo,--compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa
-
--kms-key-id <key-ocid>
es el OCID de la clave de cifrado maestra que se va a utilizar para firmar la imagen. Por ejemplo,--kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj
-
--kms-key-version-id <key-version-ocid>
es el OCID de la versión de clave que se va a utilizar para firmar la imagen. Por ejemplo,--kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb
-
--signing-algorithm <signing-algorithm>
es uno de los siguientes algoritmos que se deben utilizar para firmar la imagen:-
SHA_224_RSA_PKCS_PSS
-
SHA_256_RSA_PKCS_PSS
-
SHA_384_RSA_PKCS_PSS
-
SHA_512_RSA_PKCS_PSS
El algoritmo que se selecciona depende del tipo de clave de cifrado maestra.
Por ejemplo,
--signing-algorithm SHA_224_RSA_PKCS_PSS
-
-
--image-id <image-ocid>
es el OCID de la imagen que se debe firmar. Por ejemplo,--image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks
-
--description <signature-description>
es el texto opcional que elija para describir la imagen. La descripción se incluye como parte de la firma y se muestra en la consola. Por ejemplo,--description "Image for UAT testing"
-
--metadata <image-metadata-json>
es información opcional de su elección sobre la imagen, en un formato JSON válido (solo caracteres alfanuméricos, sin espacios en blanco ni caracteres de escape). Por ejemplo,--metadata {"buildnumber":"8447"}
Por ejemplo:
oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}
La imagen especificada ahora está firmada. Al ver la lista de imágenes de un repositorio en la consola, aparece el texto "(Firmado)" junto al nombre de la imagen.
-
Visualización de imágenes firmadas
Puede utilizar la consola para ver las imágenes firmadas en un repositorio.
Para ver imágenes firmadas:
-
En la página de lista Container Registry, seleccione el repositorio con el que desea trabajar en la lista Repositorios e imágenes. Si necesita ayuda para buscar la página de lista o el repositorio, consulte Listado de repositorios.
Se abre la sección de detalles del repositorio.
- Seleccione el repositorio en la lista Repositorios e imágenes por segunda vez.
Las imágenes del repositorio, incluidos sus identificadores de versión, se muestran en el repositorio en la lista Repositorios e imágenes.
El texto "(Firmado)" aparece junto a las imágenes que se han firmado.
-
(Opcional) En la lista, seleccione una imagen firmada y seleccione el separador Firmas para ver las firmas creadas cuando se firmó la imagen.
Trabajar con firmas de imagen
Una firma de imagen asocia una imagen a la clave maestra (obtenida del servicio Vault) que se utilizó para firmar la imagen. Una imagen puede tener varias firmas, cada una creada utilizando una clave de cifrado maestra diferente.
Una vez firmada una imagen en Container Registry y creada una firma de imagen, puede realizar los siguiente:
-
Consulta de detalles de la firma.
-
Verifique la firma con el servicio Vault para confirmar que la clave de cifrado maestra utilizada para firmar la imagen sigue siendo válida y sigue estando disponible.
-
Agregue etiquetas de formato libre y etiquetas definidas a la firma.
-
Supresión de la firma para indicar que la imagen ya no se considera de confianza.
Para ver, verificar, etiquetar o suprimir las firmas que se crearon al firmar una imagen:
-
En la página de lista Container Registry, seleccione el repositorio con el que desea trabajar en la lista Repositorios e imágenes. Si necesita ayuda para buscar la página de lista o el repositorio, consulte Listado de repositorios.
Se abre la sección de detalles del repositorio.
-
Seleccione el repositorio en la lista Repositorios e imágenes por segunda vez.
Las imágenes del repositorio, incluidos sus identificadores de versión, se muestran en el repositorio en la lista Repositorios e imágenes.
El texto "(Firmado)" aparece junto a las imágenes que se han firmado.
-
En la lista, seleccione una imagen firmada y seleccione el separador Firmas para ver los detalles de las firmas creadas cuando se firmó la imagen:
-
Description: descripción de la firma que se especificó cuando se firmó la imagen.
-
Verification response: resultado del último intento de verificar la firma de imagen con el servicio Vault.
-
Etiquetas: número de etiquetas definidas o de formato libre aplicadas a la firma de imagen.
-
Date: cuando se firmó la imagen y se creó la firma de imagen.
-
-
(Opcional) Para ver la clave maestra, la versión de clave y el algoritmo de firma de una firma concreta, seleccione Ver detalles de clave en el menú Acciones de la firma.
-
(Opcional) Para verificar una firma concreta con el servicio Vault, seleccione Verificar firma en el menú Acciones de la firma.
El servicio Vault comprueba que el origen de la imagen tenía acceso a una clave privada válida cuando la transfirieron y que la imagen no se ha modificado desde que se transfirió. Si se cumplen ambas condiciones, la firma se muestra con el estado Verificado. Los usuarios o sistemas que extraen la imagen del registro pueden estar seguros de que el origen de la imagen es de confianza y de que la integridad de la imagen no se ha visto comprometida.
Si la verificación de imagen falla, compruebe que tiene acceso a la clave maestra y que no se ha suprimido.
-
(Opcional) Para agregar una etiqueta de formato libre o una etiqueta definida a una firma a la que aún no se ha aplicado ninguna etiqueta, seleccione Agregar etiquetas en el menú Acciones de la firma.
Si ya se han aplicado una o más etiquetas a la firma, seleccione Ver etiquetas en el menú Acciones de la firma y, a continuación, seleccione Agregar etiquetas en el cuadro de diálogo Ver etiquetas. Para obtener más información, consulte Aplicación de etiquetas de formato libre y etiquetas definidas a repositorios, imágenes y firmas de imágenes.
-
(Opcional) Para suprimir una firma concreta, seleccione Suprimir firma en el menú Acciones de la firma.
La firma se suprime y ya no se muestra en el separador Firmas. Si la imagen no tiene otras firmas, el texto "(Firmado)" ya no aparece junto al nombre de la imagen en la lista de imágenes del repositorio.
Uso de la CLI
Para obtener una lista completa de indicadores y opciones de variables para los comandos de la CLI, consulte la Referencia de la línea de comandos.
Para firmar una imagen y crear una firma de imagen
Utilice el comando oci Artefactos Container Image-signature Sign-upload y los parámetros necesarios para firmar una imagen y crear una firma de imagen:
oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json> [OPTIONS]
oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}
Para verificar una imagen firmada mediante una firma de imagen
Utilice el comando oci Artefactos Container Image-signature get-verify y los parámetros necesarios para verificar una imagen firmada mediante una firma de imagen:
oci artifacts container image-signature get-verify --compartment-id <compartment-ocid> --repo-name <repository-name> --image-digest <image-digest> --trusted-keys <key-ocid> --compartment-id-in-subtree true|false [OPTIONS]
Por ejemplo:
oci artifacts container image-signature get-verify --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --repo-name project01/acme-web-app --image-digest sha256:da1f_____31fd --trusted-keys ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --compartment-id-in-subtree false
Uso de la API
Ejecute la operación CreateContainerImageSignature para firmar una imagen y crear una firma de imagen.
Ejecute la operación GetContainerImageSignature para recuperar una firma de imagen y la operación Verify para verificar la firma.