Signature d'images à des fins de sécurité
Découvrez comment signer des images stockées dans le registre de conteneurs.
Pour des raisons de conformité et de sécurité, les administrateurs de système ne déploient souvent des logiciels dans un système de production que lorsqu'ils ont l'assurance que :
-
Le logiciel provient d'une source de confiance.
-
Le logiciel n'a pas été modifié depuis sa publication, compromettant son intégrité.
Pour répondre à ces exigences, vous pouvez signer les images stockées dans Oracle Cloud Infrastructure Registry (également appelé Container Registry). Les images signées permettent de vérifier à la fois la source d'une image et son intégrité.
Le registre de conteneurs permet aux utilisateurs ou aux systèmes de transmettre des images au registre, puis de les signer à l'aide d'une clé de chiffrement principale obtenue à partir d'Oracle Cloud Infrastructure Vault, pour créer une signature d'image. Une signature d'image associe une image signée à une clé de chiffrement principale particulière utilisée pour signer l'image. Une image peut avoir plusieurs signatures, chacune créée à l'aide d'une clé de chiffrement principale différente.
Les utilisateurs ou les systèmes qui tirent une image signée du registre de conteneurs peuvent être certains que la source de l'image est fiable et que l'intégrité de l'image n'a pas été compromise. Pour améliorer davantage la conformité et la sécurité, les clients peuvent être configurés pour extraire uniquement les images signées du registre.
À un niveau élevé, voici les étapes à suivre pour stocker des images signées dans le registre de conteneurs :
-
Créez l'image sur votre propre machine ou dans votre système d'intégration et de développement en continu.
-
Marquer et pousser l'image vers le registre de conteneurs.
-
Si vous n'avez pas accès à une clé de chiffrement principale dans Oracle Cloud Infrastructure Vault, obtenez l'accès à une clé existante ou créez-en une nouvelle.
-
Signez l'image à l'aide de l'interface de ligne de commande du registre de conteneurs, en créant une signature d'image qui associe l'image à la clé de chiffrement principale et à la version de clé dans le service de chambre forte.
Signer une image et créer une signature d'image
Après avoir créé une image et l'avoir poussée vers le registre de conteneurs, vous pouvez signer l'image à l'aide d'une clé de chiffrement principale obtenue à partir d'Oracle Cloud Infrastructure Vault, en créant une signature d'image. Notez qu'une signature d'image est associée à l'OCID d'une image, ce qui la rend spécifique à une poussée particulière de l'image.
Pour signer une image et créer une signature d'image :
-
Créez une image sur votre propre machine ou dans votre système d'intégration et de développement en continu (par exemple, à l'aide de la commande
docker build
). -
Pousser l'image vers le registre de conteneurs. Suivez les instructions sous Transmission d'images à l'aide de l'interface de ligne de commande Docker pour :
-
Connectez-vous au registre de conteneurs à l'aide de la commande
docker login
. -
Marquez l'image à pousser à l'aide de la commande
docker tag
. Par exemple :docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
Pousser l'image vers le registre de conteneurs à l'aide de la commande
docker push
. Par exemple :docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
-
Obtenez l'OCID de l'image, à l'aide de la console (voir Obtention des détails d'une image) ou à l'aide de l'interface de ligne de commande (utilisez la commande
oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>
). -
Si vous n'avez pas déjà accès à une clé asymétrique RSA dans Oracle Cloud Infrastructure Vault, obtenez l'accès à une clé asymétrique RSA existante ou créez une nouvelle clé de chiffrement principale en tant que clé asymétrique RSA (voir Création d'une clé de chiffrement principale).
Notez que l'utilisation de clés symétriques AES pour signer des images n'est pas prise en charge. Pour plus d'informations sur les différents types de clé, voir Aperçu du service de chambre forte.
-
Notez l'OCID de la clé de chiffrement principale et l'OCID de la version de clé stockée dans Oracle Cloud Infrastructure Vault. Voir Liste des clés de chiffrement principales.
-
Signez l'image que vous avez poussée vers le registre de conteneurs à l'aide de la clé principale et de la version de clé dans le service de chambre forte, en créant une signature d'image, en entrant :
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>
où :-
--compartment-id <compartment-ocid>
est l'OCID du compartiment auquel appartient le référentiel de l'image. Par exemple,--compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa
-
--kms-key-id <key-ocid>
est l'OCID de la clé de chiffrement principale à utiliser pour signer l'image. Par exemple,--kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj
-
--kms-key-version-id <key-version-ocid>
est l'OCID de la version de clé à utiliser pour signer l'image. Par exemple,--kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb
-
--signing-algorithm <signing-algorithm>
est l'un des algorithmes suivants à utiliser pour signer l'image :-
SHA_224_RSA_PKCS_PSS
-
SHA_256_RSA_PKCS_PSS
-
SHA_384_RSA_PKCS_PSS
-
SHA_512_RSA_PKCS_PSS
L'algorithme à choisir dépend du type de la clé de chiffrement principale.
Par exemple,
--signing-algorithm SHA_224_RSA_PKCS_PSS
-
-
--image-id <image-ocid>
est l'OCID de l'image à signer. Par exemple,--image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks
-
--description <signature-description>
est un texte facultatif de votre choix pour décrire l'image. La description est incluse dans la signature et est affichée dans la console. Par exemple,--description "Image for UAT testing"
-
--metadata <image-metadata-json>
est une information facultative de votre choix sur l'image, dans un format JSON valide (caractères alphanumériques uniquement, sans espace ni caractère d'échappement). Par exemple,--metadata {"buildnumber":"8447"}
Par exemple :
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"}
L'image que vous avez spécifiée est maintenant signée. Lorsque vous affichez la liste des images d'un référentiel dans la console, le texte "(Signé)" apparaît à côté du nom de l'image.
-
Affichage des images signées
Vous pouvez utiliser la console pour voir les images signées dans un référentiel.
Pour voir les images signées :
-
Dans la page de liste Registre de conteneurs, sélectionnez le référentiel avec lequel vous voulez travailler dans la liste Repositaires et images. Si vous avez besoin d'aide pour trouver la page de liste ou le référentiel, voir Liste des référentiels.
La section des détails du référentiel s'ouvre.
- Sélectionnez le référentiel dans la liste Répôts et images une deuxième fois.
Les images du référentiel, y compris leurs identificateurs de version, sont listées sous le référentiel dans la liste Répôts et images.
Le texte "(Signé)" apparaît à côté des images qui ont été signées.
-
(Facultatif) Dans la liste, sélectionnez une image signée, puis sélectionnez l'onglet Signatures pour voir les signatures créées lors de la signature de l'image.
Utilisation des signatures d'image
Une signature d'image associe une image à la clé maître (obtenue à partir du service de chambre forte) qui a été utilisée pour signer l'image. Une image peut avoir plusieurs signatures, chacune créée à l'aide d'une clé de chiffrement principale différente.
Après avoir signé une image dans le registre de conteneurs et créé une signature d'image, vous pouvez :
-
Sert à consulter les détails de la signature.
-
Vérifiez la signature avec le service de chambre forte pour vérifier que la clé de chiffrement principale utilisée pour signer l'image est toujours valide et disponible.
-
Ajoutez des marqueurs à structure libre et des marqueurs définis à la signature.
-
Supprimez la signature pour indiquer que l'image ne doit plus être considérée comme approuvée.
Pour voir, vérifier, marquer ou supprimer les signatures créées lors de la signature d'une image :
-
Dans la page de liste Registre de conteneurs, sélectionnez le référentiel avec lequel vous voulez travailler dans la liste Repositaires et images. Si vous avez besoin d'aide pour trouver la page de liste ou le référentiel, voir Liste des référentiels.
La section des détails du référentiel s'ouvre.
-
Sélectionnez le référentiel dans la liste Répôts et images une deuxième fois.
Les images du référentiel, y compris leurs identificateurs de version, sont listées sous le référentiel dans la liste Répôts et images.
Le texte "(Signé)" apparaît à côté des images qui ont été signées.
-
Dans la liste, sélectionnez une image signée, puis sélectionnez l'onglet Signatures pour voir les détails des signatures créées lors de la signature de l'image :
-
Description : Description de la signature spécifiée lors de la signature de l'image.
-
Réponse de vérification : Résultat de la dernière tentative de vérification de la signature d'image avec le service de chambre forte.
-
Marqueurs : Nombre de marqueurs à structure libre ou définis appliqués à la signature d'image.
-
Date : Lorsque l'image a été signée et que la signature de l'image a été créée.
-
-
(Facultatif) Pour voir la clé principale, la version de la clé et l'algorithme de signature d'une signature particulière, sélectionnez Voir les détails de la clé dans le menu Actions pour la signature.
-
(Facultatif) Pour vérifier une signature particulière avec le service de chambre forte, sélectionnez Vérifier la signature dans le menu Actions pour la signature.
Le service de chambre forte vérifie que la source de l'image a accès à une clé privée valide lorsqu'elle a poussé l'image et que celle-ci n'a pas été modifiée depuis sa poussée. Si les deux conditions sont remplies, la signature est affichée avec le statut Vérifié. Les utilisateurs ou les systèmes qui extraient l'image du registre peuvent être certains que la source de l'image est fiable et que l'intégrité de l'image n'a pas été compromise.
Si la vérification de l'image échoue, vérifiez que vous avez accès à la clé principale et qu'elle n'a pas été supprimée.
-
(Facultatif) Pour ajouter un marqueur à structure libre ou un marqueur défini à une signature à laquelle aucun marqueur n'a encore été appliqué, sélectionnez Ajouter des marqueurs dans le menu Actions pour la signature.
Si un ou plusieurs marqueurs ont déjà été appliqués à la signature, sélectionnez Voir les marqueurs dans le menu Actions de la signature, puis sélectionnez Ajouter des marqueurs dans la boîte de dialogue Voir les marqueurs. Pour plus d'informations, voir Application de marqueurs à structure libre et de marqueurs définis aux référentiels, images et signatures d'image.
-
(Facultatif) Pour supprimer une signature particulière, sélectionnez Supprimer la signature dans le menu Actions de la signature.
La signature est supprimée et n'apparaît plus dans l'onglet Signatures. Si l'image n'a pas d'autres signatures, le texte "(Signé)" n'apparaît plus à côté du nom de l'image dans la liste des images du référentiel.
Utilisation de l'interface de ligne de commande
Pour la liste complète des indicateurs et des options de variable pour les commandes de l'interface de ligne de commande, voir Informations de référence sur la ligne de commande.
Pour signer une image et créer une signature d'image
Utilisez la commande oci arteacts container image-signature sign-upload et les paramètres requis pour signer une image et créer une signature d'image :
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"}
Pour vérifier une image signée à l'aide d'une signature d'image
Utilisez la commande oci arteacts container image-signature get-verify et les paramètres requis pour vérifier une image signée à l'aide d'une signature d'image :
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]
Par exemple :
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
Utilisation de l'API
Exécutez l'opération CreateContainerImageSignature pour signer une image et créer une signature d'image.
Exécutez l'opération GetContainerImageSignature pour extraire une signature d'image et l'opération Vérifier pour vérifier la signature.