IBM Cloud Docs
Chiffrement d'images pour la confidentialité du contenu dans Container Registry

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

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.

  1. 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
    
  2. 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
    
  3. 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.

  4. Répertoriez les clés pour vous assurer qu'elles ont bien été créées :

    ls -l
    
  5. 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..

  1. Accédez au répertoire dans lequel vous stockez vos applications, par exemple, MY_APP.

    cd MY_APP
    
  2. Créez le fichier Dockerfile en exécutant la commande suivante :

    cat << EOF >> Dockerfile
    FROM nginx:latest
    RUN echo "some secret" > /secret-file
    EOF
    
  3. 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.

  4. 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.

  5. 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.

  1. 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
    
  2. (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
    
  3. Utilisez Buildah pour extraire l'image avec la clé de déchiffrement, où USER_KEYS/USER_KEYPrivate.pem est la clé de déchiffrement et us.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.

  4. 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.