Chiffrement d'images pour la confidentialité du contenu dans Container Registry
Vous pouvez protéger la confidentialité de vos images IBM Cloud® Container Registry et vous assurer que les hôtes qui ne sont pas sécurisés ne peuvent pas exécuter les images.
Créez une image cryptée afin que les personnes ne disposant pas de la clé privéeCanevas algorithmique servant à chiffrer des messages que seule la clé publique correspondante pourra déchiffrer. La clé privée sert également à déchiffrer les messages encodés par la clé publique correspondante. Elle est conservée sur le système de l'utilisateur et protégée par un mot de passe. ne puissent pas accéder au contenu. Créez l'image chiffrée à l'aide d'une paire de clés public-privé RSA pour chiffrer et déchiffrer l'image. Une clé publique n'est pas une valeur confidentielle et tout le monde peut l'utiliser pour chiffrer une image. Une clé privée est une valeur confidentielle, et seuls les utilisateurs qui disposent de cette clé privée peuvent l'utiliser pour déchiffrer l'image.
Le chiffrement est pris en charge dans IBM Cloud Container Registry et respecte les normes suivantes :
Pour plus d'informations sur le chiffrement des images, voir Images de conteneurs chiffrées pour la sécurité des images de conteneurs au repos et Améliorer la sécurité et la conformité des images grâce au chiffrement des images de conteneurs.
Avant de commencer
- Suivez les instructions dans Initiation à IBM Cloud Container Registry.
- Assurez-vous que vous disposez de la version la plus récente du plug-in d'interface de ligne de commande
container-registry
pour l'interface de ligne de commande IBM Cloud. Voir Mise à jour du plug-in d'interface de ligne de commandecontainer-registry
. - Vérifiez que vous disposez d'un espace de nom privé auquel envoyer votre image chiffrée, voir Configuration d'un espace de nom.
- Installez la version Buildah 1.15, ou une version ultérieure, afin de pouvoir créer des images cryptées. Buildah fonctionne uniquement dans l'environnement Linux®. Comme alternative à Linux®, vous pouvez utiliser une machine virtuelle ou une image Docker pour exécuter Buildah pour générer des images.
- Installez Podman.
Création de la paire de clés publique-privée
Créez une paire de clés public-privé à l'aide de commandes OpenSSL.
-
Créez un répertoire de travail, par exemple,
USER_KEYS
, dans lequel seront stockées les clés et les modifications de ce répertoire :mkdir USER_KEYS; cd USER_KEYS
-
Utilisez OpenSSL pour créer une clé privée, où
USER_KEY
est le nom de l'identité de votre clé :openssl genrsa --out USER_KEYPrivate.pem
-
Créer une clé publique :
openssl rsa -in USER_KEYPrivate.pem -pubout -out USER_KEYPub.pem
Pour utiliser la clé privée en production, vous devez stocker et protéger la clé privée dans un magasin approprié. Vous pouvez également vouloir gérer la clé publique de la même manière. Pour plus d'informations, voir Stockage des clés.
-
Répertoriez les clés pour vous assurer qu'elles ont bien été créées :
ls -l
-
Pour utiliser cette paire de clés pour chiffrer des images, affichez la clé publique en exécutant la commande
cat
suivante :cat USER_KEYPub.pem
Vous obtenez une réponse similaire à la sortie suivante :
-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8Ny7dCWQ8Pdq1ddYSwk QOCB3lUEZVEyj9StX3jnISF/rxIsUZzJfbOrQN0fGkm+1sCCtltgQdztTjito8Fh DGflqQBSmV40XP3iZnNUJDrHuAol463Z/BuxxFXL3ry6rTosLGfrRwdQjxp8RSsn WyIIO2rmcqXZYe4SCtiMjMejLlTIDWLIMdYL3d6hA4DpgDLoh6EPmhKMVVwRt5b0 ew5eMLcDuq6ButOM5yv4zYVHNrajY41NK+abSlFb6wzMg2AUDiC/MxV1LRq6mpyZ GJllx3LS1M1j7fDO3pmh/M0X7yD/4RgHwFaW4/4CQBw3fyxrOv0pZzZay+o -----END PUBLIC KEY-----
Chiffrement de l'image
Crypter l'image en utilisant la clé publique, puis construire une image de conteneur en utilisant un fichier DockerFichier texte contenant des instructions pour générer une image Docker..
-
Accédez au répertoire dans lequel vous stockez vos applications, par exemple,
MY_APP
.cd MY_APP
-
Créez le fichier Dockerfile en exécutant la commande suivante :
cat << EOF >> Dockerfile FROM nginx:latest RUN echo "some secret" > /secret-file EOF
-
Utilisez Buildah pour créer une image non cryptée en exécutant la commande suivante, où
NAMESPACE
est votre espace de noms :buildah bud -t us.icr.io/NAMESPACE/MY_APP .
us.icr.io/NAMESPACE/MY_APP
est validé pour le magasin d'images local. -
Chiffrez l'image à l'aide de la clé publique et téléchargez l'image dans le registre en exécutant les commandes suivantes et en spécifiant le protocole JSON Web Encryption (
jwe
) pour chiffrer l'image, oùUSER_KEYS/USER_KEYPub.pem
est la clé de chiffrement.buildah push --encryption-key jwe:..USER_KEYS/USER_KEYPub.pem us.icr.io/NAMESPACE/MY_APP
Buildah, version 1.15 ou ultérieure, utilise les données d'identification de connexion de Docker pour l'authentification. Si ces informations d'identification ne fonctionnent pas ou si vous souhaitez utiliser une clé APICode unique utilisé pour authentifier et autoriser les demandes d'API. Le code est transmis à une API pour identifier l'application ou l'utilisateur appelant et pour suivre et contrôler la façon dont l'API est utilisée., vous pouvez fournir l'option
—-creds <username>
, où<username>
est le nom d'utilisateur. Si vous utilisez l'option—-creds <username>
, saisissez le mot de passe de l'identifiant du registre lorsque cela vous est demandé.Vous obtenez une réponse qui vous informe que le manifeste est écrit dans la destination de l'image, qui est le registre.
-
Vérifiez dans votre registre pour vous assurer que l'image est bien là.
Extraction et déchiffrement de l'image
Extrayez l'image du registre et déchiffrer-le à l'aide de la clé privée.
-
Pour vous assurer que l'extraction est effectuée depuis le registre et que vous n'utilisez pas le cache local, supprimez l'image en local :
buildah rmi -f us.icr.io/NAMESPACE/MY_APP
-
(Facultatif) Vous pouvez essayer d'extraire l'image sans fournir la clé de déchiffrement pour confirmer que l'image ne peut pas être déchiffrée :
buildah pull us.icr.io/NAMESPACE/MY_APP
La sortie contient un message similaire au message suivant :
...<truncated>... Error decrypting layer sha256:ab4ea03582e08a8e8fc35b778cc6f1a1fa797469fa9cc61cee85f703b316bb12: missing private key needed for decryption ERRO exit status 125
-
Utilisez Buildah pour extraire l'image avec la clé de déchiffrement, où
USER_KEYS/USER_KEYPrivate.pem
est la clé de déchiffrement etus.icr.io/NAMESPACE/MY_APP
est le registre :buildah pull --decryption-key ../USER_KEYS/USER_KEYPrivate.pem us.icr.io/NAMESPACE/MY_APP
L'image chiffrée est extraite du registre, déchiffrée, puis stockées dans le magasin d'images local.
-
Confirmez que l'image est stockée en exécutant Podman :
podman run -it us.icr.io/NAMESPACE/MY_APP /bin/bash
Stockage des clés
Pour utiliser la clé privée en production, vous devez stocker et protéger la clé privée. Vous pouvez également vouloir gérer la clé publique de la même manière, afin de contrôler qui peut générer des images. Vous pouvez utiliser IBM Key Protect pour stocker et protéger vos clés.
IBM Key Protect stocke les clés symétriques plutôt que les clés PKI asymétriques qui sont utilisées pour le chiffrement d'image. Vous pouvez ajouter vos clés séparément sous la forme de deux clés standard IBM Key Protect à l'aide du tableau
de bord, de l'interface de ligne de commande ou de l'API. IBM Key Protect requiert que seules les données Base64 soient importées. Pour obtenir des données Base64 pures, vous pouvez coder les fichiers Privacy Enhanced Mail (PEM) en exécutant
"openssl enc -base64 -A -in USER_KEYPrivate.pem -out USER_KEYPrivate.b64"
avant de charger le contenu Base64, et inverser cette action pour obtenir à nouveau la clé utilisable en exécutant "openssl enc -base64 -A -d -in USER_KEYPrivate..b64 -out USER_KEYPrivate.pem"
.
Pour plus d'informations sur l'utilisation de IBM Key Protect pour stocker et protéger vos clés, voir Déplacer vos clés de chiffrement dans le cloud et Importation de vos propres clés.
Comme alternative, vous pouvez protéger vos clés dans votre propre magasin à l'aide d'une clé racine IBM Key Protect pour les encapsuler. Cette action signifie que vous devez les annuler à nouveau à l'aide de IBM Key Protect et de la clé racine valide.
Par exemple, pour encapsuler les clés à l'aide de l'interface de ligne de commande, exécutez la commande "ibmcloud kp key wrap ROOT_KEY_ID -p <base64 encoded image key>"
et pour désencapsuler les clés, exécutez la
commande "ibmcloud kp key unwrap ROOT_KEY_ID -p <base64 cyphertext>
, où ROOT_KEY_ID
est l'ID de la clé racine que vous utilisez.
Pour plus d'informations sur la façon de protéger vos clés dans votre propre magasin à l'aide d'une clé racine IBM Key Protect pour les encapsuler, voir Encapsulage de clés.
Les images chiffrées ne sont pas analysées par Vulnerability Advisor.
Etapes suivantes
Exécutez votre image chiffrée dans un cluster Red Hat® OpenShift® on IBM Cloud® en utilisant le module complémentaire de cluster IBM Cloud Image Key Synchronizer.