Images für Sicherheit signieren

Erfahren Sie, wie Sie in Container Registry gespeicherte Images signieren.

Aus Compliance- und Sicherheitsgründen möchten Systemadministratoren Software oft nur dann in einem Produktionssystem bereitstellen, wenn sie sich sicher sind, dass:

  • Die Software stammt aus einer vertrauenswürdigen Quelle.

  • Die Software wurde seit ihrer Veröffentlichung nicht verändert, was ihre Integrität beeinträchtigt.

Um diese Anforderungen zu erfüllen, können Sie Images signieren, die in der Oracle Cloud Infrastructure Registry (auch als Container-Registry bezeichnet) gespeichert sind. Signierte Images bieten eine Möglichkeit, sowohl die Quelle eines Images als auch seine Integrität zu überprüfen.

Mit Container Registry können Benutzer oder Systeme Images an die Registry übertragen und diese dann mit einem Masterverschlüsselungsschlüssel aus Oracle Cloud Infrastructure Vault signieren. Dadurch wird eine Imagesignatur erstellt. Eine Abbildsignatur verknüpft ein signiertes Abbild mit einem bestimmten Masterverschlüsselungsschlüssel, mit dem das Abbild signiert wird. Ein Image kann über mehrere Signaturen verfügen, die jeweils mit einem anderen Masterverschlüsselungsschlüssel erstellt wurden.

Benutzer oder Systeme, die ein signiertes Image aus Container Registry abrufen, können sich sicher sein, dass die Quelle des Images vertrauenswürdig ist und dass die Integrität des Images nicht kompromittiert wurde. Um die Compliance und Sicherheit weiter zu verbessern, können Clients so konfiguriert werden, dass nur signierte Images aus der Registry abgerufen werden.

Auf hoher Ebene sind dies die folgenden Schritte zum Speichern signierter Images in Container Registry:

  • Erstellen Sie das Image auf Ihrem eigenen Rechner oder in Ihrem CI/CD-System.

  • Taggen Sie das Image, und übertragen Sie es an Container Registry.

  • Wenn Sie keinen Zugriff auf einen Masterverschlüsselungsschlüssel in Oracle Cloud Infrastructure Vault haben, erhalten Sie entweder Zugriff auf einen vorhandenen Schlüssel, oder erstellen Sie einen neuen Schlüssel.

  • Signieren Sie das Image mit der Container Registry-CLI, und erstellen Sie so eine Imagesignatur, die das Image mit dem Masterverschlüsselungsschlüssel und der Schlüsselversion im Vault-Service verknüpft.

Bilder abzeichnen und Bildsignatur erstellen

Nachdem Sie ein Image erstellt und in Container Registry übertragen haben, können Sie das Image mit einem Masterverschlüsselungsschlüssel signieren, der aus Oracle Cloud Infrastructure Vault abgerufen wird, und eine Imagesignatur erstellen. Beachten Sie, dass eine Imagesignatur mit der OCID eines Images verknüpft ist, sodass sie für einen bestimmten Push des Images spezifisch ist.

So signieren Sie ein Bild und erstellen eine Bildsignatur:

  1. Erstellen Sie ein Image auf Ihrem eigenen Rechner oder in Ihrem CI/CD-System (Beispiel: mit dem Befehl docker build).

  2. Senden Sie das Image per Push an Container Registry. Befolgen Sie die Anweisungen unter Images mit der Docker-CLI per Push übertragen, um:

    1. Melden Sie sich mit dem Befehl docker login bei Container Registry an.

    2. Taggen Sie das Image, das Sie übertragen möchten, mit dem Befehl docker tag. Beispiel:

      docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
    3. Übertragen Sie das Image mit dem Befehl docker push an Container Registry. Beispiel:

      docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
  3. Rufen Sie die OCID des Images ab, entweder mit der Konsole (siehe Details eines Images abrufen) oder mit der CLI (verwenden Sie den Befehl oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>).

  4. Wenn Sie noch keinen Zugriff auf einen asymmetrischen RSA-Schlüssel in Oracle Cloud Infrastructure Vault haben, erhalten Sie entweder Zugriff auf einen vorhandenen asymmetrischen RSA-Schlüssel oder erstellen einen neuen Masterverschlüsselungsschlüssel als asymmetrischen RSA-Schlüssel (siehe Masterverschlüsselungsschlüssel erstellen).

    Beachten Sie, dass die Verwendung von symmetrischen AES-Schlüsseln zum Signieren von Images nicht unterstützt wird. Weitere Informationen zu verschiedenen Schlüsseltypen finden Sie unter Überblick über Vault.

  5. Notieren Sie sich sowohl die OCID des Masterverschlüsselungsschlüssels als auch die OCID der Schlüsselversion, die in Oracle Cloud Infrastructure Vault gespeichert ist. Siehe Masterschlüssel auflisten.

  6. Signieren Sie das Image, das Sie per Push an Container Registry übergeben haben, mit dem Masterschlüssel und der Schlüsselversion im Vault-Service, und erstellen Sie so eine Imagesignatur, indem Sie Folgendes eingeben:

    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>
    Dabei gilt:
    • --compartment-id <compartment-ocid> ist die OCID des Compartments, zu dem das Repository des Images gehört. Beispiel: --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa

    • --kms-key-id <key-ocid> ist die OCID des Masterverschlüsselungsschlüssels, mit dem das Image signiert werden soll. Beispiel: --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj

    • --kms-key-version-id <key-version-ocid> ist die OCID der Schlüsselversion, mit der das Image signiert werden soll. Beispiel: --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb

    • --signing-algorithm <signing-algorithm> ist einer der folgenden Algorithmen zum Signieren des Images:

      • SHA_224_RSA_PKCS_PSS

      • SHA_256_RSA_PKCS_PSS

      • SHA_384_RSA_PKCS_PSS

      • SHA_512_RSA_PKCS_PSS

      Der zu wählende Algorithmus hängt vom Typ des Masterverschlüsselungsschlüssels ab.

      Beispiel: --signing-algorithm SHA_224_RSA_PKCS_PSS

    • --image-id <image-ocid> ist die OCID des zu signierenden Images. Beispiel: --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks

    • --description <signature-description> ist ein optionaler Text Ihrer Wahl, um das Bild zu beschreiben. Die Beschreibung ist als Teil der Signatur enthalten und wird in der Konsole angezeigt. Beispiel: --description "Image for UAT testing"

    • --metadata <image-metadata-json> ist eine optionale Information Ihrer Wahl zum Image in einem gültigen JSON-Format (nur alphanumerische Zeichen, ohne Leerzeichen oder Escapezeichen). Beispiel: --metadata {"buildnumber":"8447"}

    Beispiel:

    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"}

    Das angegebene Abbild ist jetzt signiert. Wenn Sie die Liste der Images in einem Repository in der Konsole anzeigen, wird neben dem Imagenamen der Text "(Signed)" angezeigt.

Abgezeichnete Bilder anzeigen

Mit der Konsole können Sie die signierten Images in einem Repository anzeigen.

So zeigen Sie abgezeichnete Bilder an:

  1. Wählen Sie auf der Listenseite Container Registry in der Liste Repositories und Images das Repository aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Repository benötigen, finden Sie weitere Informationen unter Repositorys auflisten.

    Der Abschnitt mit den Repository-Details wird geöffnet.

  2. Wählen Sie das Repository ein zweites Mal in der Liste Repositories und Images aus.

    Die Images im Repository, einschließlich ihrer Versions-IDs, werden unter dem Repository in der Liste Repositories und Images aufgeführt.

    Der Text "(Unterzeichnet)" wird neben abgezeichneten Bildern angezeigt.

  3. (Optional) Wählen Sie in der Liste ein signiertes Image aus, und wählen Sie die Registerkarte Signaturen aus, um die Signaturen anzuzeigen, die beim Signieren des Images erstellt wurden.

Mit Imagesignaturen arbeiten

Eine Abbildsignatur verknüpft ein Abbild mit dem Masterschlüssel (aus dem Vault-Service abgerufen), der zum Signieren des Abbilds verwendet wurde. Ein Image kann über mehrere Signaturen verfügen, die jeweils mit einem anderen Masterverschlüsselungsschlüssel erstellt wurden.

Nachdem Sie ein Image in Container Registry signiert und eine Imagesignatur erstellt haben, können Sie:

  • Auf dieser Seite zeigen Sie Details zur Signatur an.

  • Prüfen Sie die Signatur mit dem Vault-Service, um zu bestätigen, dass der Masterverschlüsselungsschlüssel, mit dem das Image signiert wurde, noch gültig und verfügbar ist.

  • Fügen Sie der Signatur Freiformtags und definierte Tags hinzu.

  • Löschen Sie die Signatur, um anzugeben, dass das Bild nicht mehr als vertrauenswürdig betrachtet wird.

So können Sie die Signatur(en), die beim Signieren eines Images erstellt wurde(n), anzeigen, verifizieren, taggen oder löschen:

  1. Wählen Sie auf der Listenseite Container Registry in der Liste Repositories und Images das Repository aus, mit dem Sie arbeiten möchten. Wenn Sie Hilfe bei der Suche nach der Listenseite oder dem Repository benötigen, finden Sie weitere Informationen unter Repositorys auflisten.

    Der Abschnitt mit den Repository-Details wird geöffnet.

  2. Wählen Sie das Repository ein zweites Mal in der Liste Repositories und Images aus.

    Die Images im Repository, einschließlich ihrer Versions-IDs, werden unter dem Repository in der Liste Repositories und Images aufgeführt.

    Der Text "(Unterzeichnet)" wird neben abgezeichneten Bildern angezeigt.

  3. Wählen Sie in der Liste ein signiertes Image aus, und wählen Sie die Registerkarte Signaturen aus, um Details zu den Signaturen anzuzeigen, die beim Signieren des Images erstellt wurden:

    • Beschreibung: Eine Beschreibung der Signatur, die bei der Signatur des Images angegeben wurde.

    • Verifizierungsantwort: Das Ergebnis des letzten Versuchs, die Imagesignatur mit dem Vault-Service zu prüfen.

    • Tags: Die Anzahl der Freiformtags oder definierten Tags, die auf die Bildsignatur angewendet werden.

    • Datum: Wann das Bild signiert und die Bildsignatur erstellt wurde.

  4. (Optional) Um den Masterschlüssel, die Schlüsselversion und den Signaturalgorithmus für eine bestimmte Signatur anzuzeigen, wählen Sie im Menü Aktionen für die Signatur die Option Schlüsseldetails anzeigen aus.

  5. (Optional) Um eine bestimmte Signatur mit dem Vault-Service zu prüfen, wählen Sie im Menü Aktionen die Option Signatur prüfen für die Signatur aus.

    Der Vault-Service prüft, ob die Quelle des Images beim Push des Images Zugriff auf einen gültigen Private Key hatte und ob das Image seit dem Push nicht geändert wurde. Wenn beide Bedingungen erfüllt sind, wird die Signatur mit dem Status "Geprüft" angezeigt. Benutzer oder Systeme, die das Image aus der Registry abrufen, können sich sicher sein, dass die Quelle des Images vertrauenswürdig ist und dass die Integrität des Images nicht kompromittiert wurde.

    Wenn die Imageverifizierung nicht erfolgreich verläuft, prüfen Sie, ob Sie Zugriff auf den Masterschlüssel haben und ob er nicht gelöscht wurde.

  6. (Optional) Um einer Signatur, auf die noch keine Tags angewendet wurden, ein Freiformtag oder ein definiertes Tag hinzuzufügen, wählen Sie im Menü Aktionen für die Signatur die Option Tags hinzufügen aus.

    Wenn bereits ein oder mehrere Tags auf die Signatur angewendet wurden, wählen Sie im Menü Aktionen für die Signatur die Option Tags anzeigen aus, und wählen Sie im Dialogfeld Tags anzeigen die Option Tags hinzufügen aus. Weitere Informationen finden Sie unter Freiformtags und definierte Tags auf Repositorys, Images und Imagesignaturen anwenden.

  7. (Optional) Um eine bestimmte Signatur zu löschen, wählen Sie im Menü Aktionen für die Signatur die Option Signatur löschen aus.

    Die Signatur wird gelöscht und nicht mehr auf der Registerkarte Signaturen angezeigt. Wenn das Bild keine anderen Signaturen aufweist, wird der Text "(Signiert)" nicht mehr neben dem Bildnamen in der Liste der Bilder im Repository angezeigt.

CLI verwenden

Eine vollständige Liste der Kennzeichen und Variablenoptionen für CLI-Befehle finden Sie in der Befehlszeilenreferenz.

So signieren Sie ein Bild und erstellen eine Bildsignatur

Verwenden Sie den Befehl oci Artefaktcontainerimage-signature sign-upload und die erforderlichen Parameter, um ein Image zu signieren und eine Imagesignatur zu erstellen:

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]
Beispiel:
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"}

So verifizieren Sie ein abgezeichnetes Bild mit einer Bildsignatur

Verwenden Sie den Befehl oci Artefaktcontainerimage-signature get-verify und die erforderlichen Parameter, um ein signiertes Image mit einer Imagesignatur zu prüfen:

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]

Beispiel:

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