Signature d'images à des fins de sécurité
Découvrez comment signer des images stockées dans Container Registry.
Pour des raisons de conformité et de sécurité, les administrateurs système veulent souvent déployer des logiciels dans un système de production uniquement lorsqu'ils sont convaincus que :
-
Le logiciel provient d'une source fiable.
-
Le logiciel n'a pas été modifié depuis sa publication, ce qui compromet son intégrité.
Pour répondre à ces exigences, vous pouvez signer des images stockées dans Oracle Cloud Infrastructure Registry (également appelé Container Registry). Les images signées sont un moyen de vérifier à la fois la source d'une image et son intégrité.
Container Registry permet aux utilisateurs ou aux systèmes de propager des images vers le registre, puis de les signer à l'aide d'une clé de cryptage maître obtenue à partir d'Oracle Cloud Infrastructure Vault, en créant une signature d'image. Une signature d'image associe une image signée à une clé de cryptage maître particulière utilisée pour signer l'image. Une image peut avoir plusieurs signatures, chacune étant créée à l'aide d'une clé de cryptage maître différente.
Les utilisateurs ou les systèmes extrayant une image signée à partir de Container Registry peuvent être sûrs que sa source est sécurisée et que son intégrité n'a pas été compromise. Pour améliorer davantage la conformité et la sécurité, les clients peuvent être configurés de manière à extraire uniquement les images signées du registre.
Pour stocker les images signées dans Container Registry, procédez comme suit :
-
Créez l'image sur votre propre ordinateur ou dans votre système d'intégration continue et de déploiement continu.
-
Balisez et propagez l'image vers Container Registry.
-
Si vous n'avez pas accès à une clé de cryptage maître dans Oracle Cloud Infrastructure Vault, obtenez l'accès à une clé existante ou créez une clé.
-
Signez l'image à l'aide de l'interface de ligne de commande Container Registry, créant ainsi une signature d'image qui associe l'image à la clé de cryptage maître et à la version de clé dans le service Vault.
Signature d'une image et création d'une signature d'image
Après avoir créé une image et l'avoir propagée vers Container Registry, vous pouvez la signer à l'aide d'une clé de cryptage maître 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 propagation particulière de l'image.
Pour signer une image et créer une signature d'image :
-
Créez une image sur votre propre ordinateur ou dans votre système d'intégration continue et de déploiement continu (par exemple, à l'aide de la commande
docker build
). -
propager l'image vers Container Registry, Suivez les instructions de la section Push d'images à l'aide de l'interface de ligne de commande Docker pour :
-
Connectez-vous à Container Registry à l'aide de la commande
docker login
. -
Balisez l'image à propager à l'aide de la commande
docker tag
. Par exemple :docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
Poussez l'image vers Container Registry à 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 (reportez-vous à Obtention des détails d'une image) ou 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 encore 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 clé de cryptage maître en tant que clé asymétrique RSA (reportez-vous à Création d'une clé de cryptage maître).
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é, reportez-vous à Présentation de Vault.
-
Notez à la fois l'OCID de la clé de cryptage maître et l'OCID de la version de clé stockée dans Oracle Cloud Infrastructure Vault. Reportez-vous à Liste des clés de cryptage maître.
-
Signez l'image propagée vers Container Registry à l'aide de la clé maître et de la version de clé dans le service Vault, créant ainsi une signature d'image, en saisissant ce qui suit :
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 cryptage maître à 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 cryptage maître.
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 le 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, au 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 dans un référentiel de la console, le texte "(Signé)" apparaît en regard du nom de l'image.
-
Affichage des images signées
Vous pouvez utiliser la console pour afficher les images signées dans un référentiel.
Pour afficher les images signées :
-
Sur la page de liste Registre de conteneurs, sélectionnez le référentiel à utiliser dans la liste Référentiels et images. Si vous avez besoin d'aide pour rechercher la page de liste ou le référentiel, reportez-vous à 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éférentiels et images une deuxième fois.
Les images du référentiel, y compris leurs identificateurs de version, sont répertoriées sous le référentiel dans la liste Référentiels 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 cliquez sur l'onglet Signatures pour afficher 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 Vault) utilisée pour signer l'image. Une image peut avoir plusieurs signatures, chacune étant créée à l'aide d'une clé de cryptage maître différente.
Après avoir signé une image dans Container Registry et créé une signature d'image, vous pouvez :
-
Afficher les détails de la signature.
-
Vérifiez la signature avec le service Vault pour vérifier que la clé de cryptage maître utilisée pour signer l'image est toujours valide et disponible.
-
Ajouter des balises à format libre et des balises définies à la signature.
-
Supprimez la signature pour indiquer que l'image ne doit plus être considérée comme sécurisée.
Pour afficher, vérifier, baliser ou supprimer les signatures créées lors de la signature d'une image, procédez comme suit :
-
Sur la page de liste Registre de conteneurs, sélectionnez le référentiel à utiliser dans la liste Référentiels et images. Si vous avez besoin d'aide pour rechercher la page de liste ou le référentiel, reportez-vous à 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éférentiels et images une deuxième fois.
Les images du référentiel, y compris leurs identificateurs de version, sont répertoriées sous le référentiel dans la liste Référentiels 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 et sélectionnez l'onglet Signatures pour afficher 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 Vault.
-
Balises : nombre de balises définies ou à format libre appliquées à la signature d'image.
-
Date : date de signature de l'image et de création de celle-ci.
-
-
(Facultatif) Pour afficher la clé principale, la version de clé et l'algorithme de signature d'une signature particulière, sélectionnez Visualiser les détails de clé dans le menu Actions de la signature.
-
(Facultatif) Pour vérifier une signature particulière avec le service Vault, sélectionnez Vérifier la signature dans le menu Actions de la signature.
Le service Vault vérifie que la source de l'image avait accès à une clé privée valide lorsqu'elle a propagé l'image et que l'image n'a pas été modifiée depuis qu'elle a été propagée. Si les deux conditions sont remplies, la signature est affichée avec le statut Vérifié. Les utilisateurs ou les systèmes extrayant l'image à partir du registre peuvent être sûrs à la fois que la source de l'image est sécurisée et que son intégrité n'a pas été compromise.
Si la vérification de l'image échoue, vérifiez que vous avez accès à la clé maître et qu'elle n'a pas été supprimée.
-
(Facultatif) Pour ajouter une balise à format libre ou une balise définie à une signature à laquelle aucune balise n'a encore été appliquée, sélectionnez Ajouter des balises dans le menu Actions de la signature.
Si des balises ont déjà été appliquées à la signature, sélectionnez Visualiser les balises dans le menu Actions de la signature, puis Ajouter des balises dans la boîte de dialogue Visualiser les balises. Pour plus d'informations, reportez-vous à Application de balises à format libre et de balises définies 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 en regard du nom de l'image dans la liste des images du référentiel.
Utilisation de l'interface de ligne de commande
Afin d'obtenir la liste complète des indicateurs et des options de variable pour les commandes d'interface de ligne de commande, reportez-vous à Référence de ligne de commande.
Pour signer une image et créer une signature d'image
Utilisez la commande oci artefacts 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 artefacts 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 Verify pour vérifier la signature.