IBM Cloud Docs
Images verschlüsseln, um die Vertraulichkeit von Inhalten in Container Registry sicherzustellen

Images verschlüsseln, um die Vertraulichkeit von Inhalten in Container Registry sicherzustellen

Sie können die Vertraulichkeit Ihrer IBM Cloud® Container Registry-Images schützen und sicherstellen, dass nicht vertrauenswürdige Hosts die Images nicht ausführen können.

Erstellen Sie ein verschlüsseltes Bild, damit Personen ohne den privaten SchlüsselEin algorithmisches Muster, das verwendet wird, um Nachrichten zu verschlüsseln, die nur der zugehörige öffentliche Schlüssel entschlüsseln kann. Mit dem privaten Schlüssel werden auch Nachrichten entschlüsselt, die vom entsprechenden öffentlichen Schlüssel verschlüsselt wurden. Der private Schlüssel wird im System des Benutzers gespeichert und durch ein Kennwort geschützt. nicht auf den Inhalt zugreifen können. Verwenden Sie bei der Erstellung des verschlüsselten Images ein RSA-Schlüsselpaar aus öffentlichem und privatem Schlüssel, um das Image zu verschlüsseln bzw. zu entschlüsseln. Bei einem öffentlichen Schlüssel handelt es sich nicht um einen geheimen Schlüssel; er kann von jedem zu Verschlüsselung eines Images verwendet werden. Ein privater Schlüssel ist ein geheimer Schlüssel; nur Benutzer, die über den entsprechenden privaten Schlüssel verfügen, können das Image damit entschlüsseln.

Die Verschlüsselung wird in IBM Cloud Container Registry unterstützt und erfüllt die Vorgaben der folgenden Standards:

Weitere Informationen zum Verschlüsseln von Images finden Sie unter Verschlüsselte Container-Images für Container-Image-Sicherheit im Ruhezustand und Höhere Image-Sicherheit und Compliance durch Container Image Encryption.

Vorbereitende Schritte

  • Führen Sie die Anweisungen in Erste Schritte mit IBM Cloud Container Registry aus.
  • Stellen Sie sicher, dass Sie über die neueste Version des container-registry-CLI-Plug-ins für die IBM Cloud-Befehlszeilenschnittstelle verfügen. Weitere Informationen finden Sie in container-registry-CLI-Plug-in aktualisieren.
  • Stellen Sie sicher, dass Sie über einen privaten Namensbereich verfügen, in den Sie das verschlüsselte Image per Push-Operation übertragen. Der Abschnitt Namensbereich einrichten enthält weitere Informationen hierzu.
  • Installieren Sie Buildah in der Version 1.15 oder höher, damit Sie verschlüsselte Images erstellen können. Buildah funktioniert nur in der Linux®-Umgebung. Als Alternative zu Linux® können Sie eine virtuelle Maschine oder ein Docker-Image verwenden, um Buildah zum Erstellen von Images auszuführen.
  • Installieren Sie Podman.

Schlüsselpaar aus öffentlichem und privatem Schlüssel erstellen

Verwenden Sie OpenSSL-Befehle, um ein Schlüsselpaar aus öffentlichem und privatem Schlüssel zu erstellen.

  1. Erstellen Sie ein Arbeitsverzeichnis, z. B. USER_KEYS, in dem die Schlüssel gespeichert werden sollen, und wechseln Sie in dieses Verzeichnis:

    mkdir USER_KEYS; cd USER_KEYS
    
  2. Verwenden Sie OpenSSL, um einen privaten Schlüssel zu erstellen; dabei ist USER_KEY der Name der Schlüssel-ID:

    openssl genrsa --out USER_KEYPrivate.pem
    
  3. Erstellen Sie einen öffentlichen Schlüssel:

    openssl rsa -in USER_KEYPrivate.pem -pubout -out USER_KEYPub.pem
    

    Wenn Sie den privaten Schlüsse für Produktionszwecke verwenden möchten, müssen Sie diesen an einer geeigneten Speicherposition sicher speichern und schützen. Dieselbe Vorgehensweise empfiehlt sich für die Verwaltung des öffentlichen Schlüssels. Weitere Informationen finden Sie unter Schlüssel speichern.

  4. Rufen Sie eine Liste der Schlüssel auf, um sicherzustellen, dass diese erstellt wurden:

    ls -l
    
  5. Wenn Sie dieses Schlüsselpaar zum Verschlüsseln von Images verwenden möchten, führen Sie den folgenden cat-Befehl aus, um den öffentlichen Schlüssel anzuzeigen:

    cat USER_KEYPub.pem
    

    Die Antwort entspricht in etwa der folgenden Ausgabe:

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8Ny7dCWQ8Pdq1ddYSwk
    QOCB3lUEZVEyj9StX3jnISF/rxIsUZzJfbOrQN0fGkm+1sCCtltgQdztTjito8Fh
    DGflqQBSmV40XP3iZnNUJDrHuAol463Z/BuxxFXL3ry6rTosLGfrRwdQjxp8RSsn
    WyIIO2rmcqXZYe4SCtiMjMejLlTIDWLIMdYL3d6hA4DpgDLoh6EPmhKMVVwRt5b0
    ew5eMLcDuq6ButOM5yv4zYVHNrajY41NK+abSlFb6wzMg2AUDiC/MxV1LRq6mpyZ
    GJllx3LS1M1j7fDO3pmh/M0X7yD/4RgHwFaW4/4CQBw3fyxrOv0pZzZay+o
    -----END PUBLIC KEY-----
    

Image verschlüsseln

Verschlüsseln Sie das Image mit dem öffentlichen Schlüssel und erstellen Sie dann ein Container-Image mit Hilfe einer DockerdateiEine Textdatei, die Anweisungen für den Build eines Docker-Images enthält..

  1. Rufen Sie das Verzeichnis auf, in dem Ihre Apps gespeichert sind, z. B. MY_APP.

    cd MY_APP
    
  2. Erstellen Sie die Dockerfile, indem Sie den folgenden Befehl ausführen:

    cat << EOF >> Dockerfile
    FROM nginx:latest
    RUN echo "some secret" > /secret-file
    EOF
    
  3. Verwenden Sie Buildah, um ein unverschlüsseltes Abbild zu erstellen, indem Sie den folgenden Befehl ausführen, wobei NAMESPACE Ihr Namensraum ist:

    buildah bud -t us.icr.io/NAMESPACE/MY_APP .
    

    us.icr.io/NAMESPACE/MY_APP wird im lokalen Imagespeicher festgeschrieben.

  4. Verschlüsseln Sie das Image mit dem öffentlichen Schlüssel und laden Sie es in die Registry hoch, indem Sie die folgenden Befehle ausführen und das JSON Web Encryption-Protokoll (jwe) zur Verschlüsselung des Images angeben. Dabei ist USER_KEYS/USER_KEYPub.pem der Verschlüsselungsschlüssel.

    buildah push --encryption-key jwe:..USER_KEYS/USER_KEYPub.pem us.icr.io/NAMESPACE/MY_APP
    

    In Buildah Version 1.15 oder höher werden die Docker-Anmeldeberechtigungsnachweise zur Authentifizierung verwendet. Wenn diese Anmeldedaten nicht funktionieren oder Sie einen API-SchlüsselEin einzigartiger Code, der zur Authentifizierung und Autorisierung von API-Anfragen verwendet wird. Der Code wird an eine API weitergeleitet, um die aufrufende Anwendung oder den Benutzer zu identifizieren und die Verwendung der API zu verfolgen und zu kontrollieren. verwenden möchten, können Sie die Option —-creds <username> angeben, wobei <username> der Benutzername ist. Wenn Sie die Option —-creds <username> verwenden, geben Sie nach Aufforderung das Kennwort für die Registrierungsdaten ein.

    Es wird eine Antwort zurückgegeben, die Sie darüber informiert, dass das Manifest an der Imagezielposition, d. h. in der Registry, erstellt wird.

  5. Überprüfen Sie, ob das Image in der Registry vorhanden ist.

Image mit einer Pull-Operation abrufen und entschlüsseln

Rufen Sie das Image aus der Registry ab und entschlüsseln Sie es mithilfe des privaten Schlüssels.

  1. Damit sichergestellt ist, dass Sie das Image aus der Registry abrufen und nicht aus dem lokalen Cache, entfernen Sie das Image lokal:

    buildah rmi -f us.icr.io/NAMESPACE/MY_APP
    
  2. Optional können Sie versuchen, das Image per Pull-Operation abzurufen, ohne den Entschlüsselungsschlüssel anzugeben, um sicherzustellen, dass das Image nicht entschlüsselt werden kann:

    buildah pull us.icr.io/NAMESPACE/MY_APP
    

    Die Ausgabe enthält eine Nachricht ähnlich der folgenden:

    ...<truncated>...
    Error decrypting layer sha256:ab4ea03582e08a8e8fc35b778cc6f1a1fa797469fa9cc61cee85f703b316bb12: missing private key needed for decryption
    ERRO exit status 125
    
  3. Verwenden Sie Buildah, um das Image mit dem Entschlüsselungsschlüssel per Pull-Operation abzurufen. Dabei ist USER_KEYS/USER_KEYPrivate.pem der Entschlüsselungsschlüssel und us.icr.io/NAMESPACE/MY_APP die Registry:

    buildah pull --decryption-key ../USER_KEYS/USER_KEYPrivate.pem us.icr.io/NAMESPACE/MY_APP
    

    Das entschlüsselte Image wird aus der Registry abgerufen, entschlüsselt und im lokalen Imagespeicher gespeichert.

  4. Stellen Sie sicher, dass das Image gespeichert wurde, indem Sie Podman ausführen:

    podman run -it us.icr.io/NAMESPACE/MY_APP /bin/bash
    

Schlüssel speichern

Wenn Sie den privaten Schlüsse für Produktionszwecke verwenden möchten, müssen Sie diesen sicher speichern und schützen. Dieselbe Vorgehensweise empfiehlt sich für die Verwaltung des öffentlichen Schlüssels, um zu steuern, wer Images erstellen kann. Zum Speichern und Schützen Ihrer Schlüssel können Sie IBM Key Protect verwenden.

In IBM Key Protect werden symmetrische Schlüssel gespeichert, nicht die bei der Imageverschlüsselung verwendeten asymmetrischen PKI-Schlüssel. Sie können Ihre Schlüssel separat als zwei IBM Key Protect-Standardschlüssel hinzufügen, indem Sie das Dashboard, die Befehlszeilenschnittstelle oder die API verwenden. In IBM Key Protect können nur Base64-Daten importiert werden. Um reine Base64-Daten zu erhalten, können Sie die PEM-Dateien codieren, indem Sie vor dem Laden des Base64-Inhalts "openssl enc -base64 -A -in USER_KEYPrivate.pem -out USER_KEYPrivate.b64" ausführen. Anschließend kehren Sie diese Aktion um, um wieder den verwendbaren Schlüssel zu erhalten, indem Sie "openssl enc -base64 -A -d -in USER_KEYPrivate..b64 -out USER_KEYPrivate.pem" ausführen.

Weitere Informationen zur Verwendung von IBM Key Protect zum Speichern und Schützen von Schlüsseln finden Sie in Eigene Verschlüsselungsschlüssel in der Cloud verwenden und in Eigene Schlüssel importieren.

Als Alternative können Sie Schlüssel im eigenen Speicher schützen, indem Sie Wrapping mithilfe eines IBM Key Protect-Rootschlüssels für die Schlüssel anwenden. Wenn Sie diese Aktion ausführen, müssen Sie das Wrapping für die Schlüssel wieder aufheben, indem Sie IBM Key Protect und den gültigen Rootschlüssel verwenden.

Beispiel: Zur Verwendung von Wrapping für Schlüssel über die Befehlszeilenschnittstelle führen Sie den Befehl "ibmcloud kp key wrap ROOT_KEY_ID -p <base64 encoded image key>" aus; zum Aufheben des Wrappings für die Schlüssel führen Sie den Befehl "ibmcloud kp key unwrap ROOT_KEY_ID -p <base64 cyphertext> aus. Dabei ist ROOT_KEY_ID die ID des verwendeten Rootschlüssels.

Weitere Informationen darüber, wie Sie Ihre Schlüssel in Ihrem eigenen Speicher durch Wrapping mithilfe eines IBM Key Protect-Rootschlüssels schützen können, finden Sie im Abschnitt zum Wrapping für Schlüssel.

Verschlüsselte Images werden nicht von Vulnerability Advisor gescannt.

Nächste Schritte

Führen Sie das verschlüsselte Image in einem Red Hat® OpenShift® on IBM Cloud®-Cluster aus, indem Sie das Cluster-Add-on für die Synchronisierung von Imageschlüsseln verwenden.