Wie man den Befehl docker scout attestation add verwendet, um Attestierungen an ein Image anzuhängen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab erfahren Sie, wie Sie Attestierungen (Bestätigungen) an ein Docker-Image anhängen können, indem Sie den Befehl docker scout attestation add verwenden. Attestierungen sind wertvolle Metadaten, die wichtige Informationen über den Ursprung eines Images, den Build-Prozess, die Ergebnisse von Sicherheitsscans und vieles mehr liefern können.

Sie beginnen damit, ein Docker-Image und eine einfache Attestierungsdatei vorzubereiten. Anschließend verwenden Sie den Befehl docker scout attestation add mit der Option --file, um die Attestierung an das Image anzuhängen. Sie werden auch untersuchen, wie Sie mit der Option --predicate-type einen bestimmten Prädikatstyp für die Attestierung angeben können. Abschließend überprüfen Sie, ob die Attestierungen erfolgreich an das Image angehängt wurden.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/ls -.-> lab-555197{{"Wie man den Befehl docker scout attestation add verwendet, um Attestierungen an ein Image anzuhängen"}} docker/inspect -.-> lab-555197{{"Wie man den Befehl docker scout attestation add verwendet, um Attestierungen an ein Image anzuhängen"}} docker/pull -.-> lab-555197{{"Wie man den Befehl docker scout attestation add verwendet, um Attestierungen an ein Image anzuhängen"}} docker/images -.-> lab-555197{{"Wie man den Befehl docker scout attestation add verwendet, um Attestierungen an ein Image anzuhängen"}} docker/build -.-> lab-555197{{"Wie man den Befehl docker scout attestation add verwendet, um Attestierungen an ein Image anzuhängen"}} end

Vorbereitung eines Images und einer Attestierungsdatei

In diesem Schritt bereiten wir ein Docker-Image und eine Attestierungsdatei vor. Eine Attestierung (Bestätigung) ist ein Stück Metadaten, das Informationen über ein Image liefert, wie es beispielsweise gebaut, auf Schwachstellen gescannt oder signiert wurde. In diesem Beispiel verwenden wir eine einfache Textdatei als Attestierungsdatei.

Zunächst laden wir ein einfaches Docker-Image herunter, das wir verwenden werden. Wir nutzen das alpine-Image, eine leichte Linux-Distribution.

docker pull alpine:latest

Sie sollten eine Ausgabe sehen, die anzeigt, dass das Image heruntergeladen wird.

latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Als Nächstes erstellen wir eine einfache Attestierungsdatei. Diese Datei enthält einige beliebige JSON-Daten. In der Praxis würde diese Datei strukturierte Daten über das Image enthalten, wie z. B. Build-Informationen, Scanergebnisse oder Signierungsdetails.

Wir erstellen eine Datei namens attestation.json im Verzeichnis ~/project.

nano ~/project/attestation.json

Im nano-Editor fügen Sie den folgenden JSON-Inhalt ein:

{
  "predicateType": "https://example.com/attestation/v1",
  "data": {
    "key": "value",
    "another_key": 123
  }
}

Drücken Sie Ctrl + X, dann Y und Enter, um die Datei zu speichern.

Sie können den Inhalt der Datei mit dem Befehl cat überprüfen:

cat ~/project/attestation.json

Die Ausgabe sollte der JSON-Inhalt sein, den Sie gerade eingefügt haben.

Jetzt haben Sie sowohl das Docker-Image (alpine:latest) als auch die Attestierungsdatei (~/project/attestation.json) für die nächsten Schritte vorbereitet.

Hinzufügen einer Attestierung zum Image mit --file

In diesem Schritt fügen wir die Attestierungsdatei, die wir im vorherigen Schritt erstellt haben, dem alpine:latest-Image hinzu. Wir verwenden den Befehl docker buildx imagetools create mit der Option --attestation-file. Dieser Befehl ermöglicht es uns, ein neues Image-Manifest mit zusätzlichen Metadaten, einschließlich Attestierungen, zu erstellen.

Die grundlegende Syntax zum Hinzufügen einer Attestierungsdatei lautet:

docker buildx imagetools create <source_image> --attestation-file <attestation_file_path> --tag <new_image_tag>

Hierbei ist <source_image> das Image, zu dem Sie die Attestierung hinzufügen möchten, <attestation_file_path> der Pfad zu Ihrer Attestierungsdatei und <new_image_tag> das Tag für das neue Image-Manifest, das die Attestierung enthalten wird.

Fügen wir die Datei ~/project/attestation.json dem alpine:latest-Image hinzu und taggen das neue Image als alpine:attested.

docker buildx imagetools create alpine:latest --attestation-file ~/project/attestation.json --tag alpine:attested

Sie sollten eine Ausgabe sehen, die anzeigt, dass das neue Image-Manifest erstellt und gepusht wird.

...
unpacking to docker.io/library/alpine:attested done

Dieser Befehl erstellt ein neues Image-Manifest mit dem Tag alpine:attested, das die Attestierungsdaten aus ~/project/attestation.json enthält. Das ursprüngliche alpine:latest-Image bleibt unverändert.

Sie können nun Ihre Docker-Images auflisten, um das neu erstellte alpine:attested-Image zu sehen.

docker images

Sie sollten sowohl alpine:latest als auch alpine:attested in der Liste sehen.

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       attested  <image_id>     ...            ...
alpine       latest    <image_id>     ...            ...
...

Beachten Sie, dass die IMAGE ID für beide Images möglicherweise gleich ist, da imagetools create oft die zugrunde liegenden Image-Layer wiederverwendet und nur ein neues Manifest erstellt.

Hinzufügen einer Attestierung mit einem bestimmten Prädikatstyp mithilfe von --predicate-type

Im vorherigen Schritt haben wir eine Attestierung mit der Option --attestation-file hinzugefügt. Docker hat automatisch den Prädikatstyp aus dem Feld predicateType in der JSON-Datei abgeleitet. Sie können jedoch auch den Prädikatstyp explizit mit der Option --predicate-type angeben. Dies ist nützlich, wenn Ihre Attestierungsdaten das Feld predicateType nicht enthalten oder wenn Sie den im Datei enthaltenen Wert überschreiben möchten.

Die grundlegende Syntax zum Hinzufügen einer Attestierung mit einem bestimmten Prädikatstyp lautet:

docker buildx imagetools create <source_image> --attestation-file <attestation_file_path> --predicate-type <predicate_type_url> --tag <new_image_tag>

Hierbei ist <predicate_type_url> die URL, die den Typ der Attestierung repräsentiert.

Fügen wir erneut die gleiche Datei ~/project/attestation.json dem alpine:latest-Image hinzu, aber diesmal legen wir den Prädikatstyp explizit auf https://example.com/another-attestation/v2 fest und taggen das neue Image als alpine:attested-v2.

docker buildx imagetools create alpine:latest --attestation-file ~/project/attestation.json --predicate-type https://example.com/another-attestation/v2 --tag alpine:attested-v2

Sie sollten eine Ausgabe ähnlich wie im vorherigen Schritt sehen, die die Erstellung eines neuen Image-Manifests anzeigt.

...
unpacking to docker.io/library/alpine:attested-v2 done

Dieser Befehl erstellt ein neues Image-Manifest mit dem Tag alpine:attested-v2. Auch wenn die Datei attestation.json "predicateType": "https://example.com/attestation/v1" enthält, überschreibt die Option --predicate-type diesen Wert, und die Attestierung im neuen Manifest wird den Prädikatstyp https://example.com/another-attestation/v2 haben.

Lassen Sie uns die Images erneut auflisten, um das neue Tag zu sehen.

docker images

Sie sollten jetzt alpine:latest, alpine:attested und alpine:attested-v2 sehen.

REPOSITORY   TAG           IMAGE ID       CREATED        SIZE
alpine       attested-v2   <image_id>     ...            ...
alpine       attested      <image_id>     ...            ...
alpine       latest        <image_id>     ...            ...
...

Im nächsten Schritt werden wir überprüfen, ob die Attestierungen korrekt hinzugefügt wurden, und ihren Inhalt untersuchen.

Überprüfen der hinzugefügten Attestierungen

In diesem letzten Schritt werden wir überprüfen, ob die Attestierungen erfolgreich zu den Images hinzugefügt wurden, und ihren Inhalt untersuchen. Wir können den Befehl docker buildx imagetools inspect verwenden, um das Manifest eines Images anzuzeigen, das Informationen zu allen zugehörigen Attestierungen enthält.

Die grundlegende Syntax zum Untersuchen eines Image-Manifests lautet:

docker buildx imagetools inspect <image_tag>

Lassen Sie uns zunächst das alpine:attested-Image untersuchen, das wir mit der Option --attestation-file erstellt haben.

docker buildx imagetools inspect alpine:attested

Sie sollten eine detaillierte Ausgabe über das Image-Manifest sehen. Suchen Sie nach einem Abschnitt über "attestations" (Attestierungen). Sie sollten einen Eintrag mit dem Prädikatstyp https://example.com/attestation/v1 und den Daten aus Ihrer attestation.json-Datei finden.

...
  "attestations": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "payload": "...",
      "predicateType": "https://example.com/attestation/v1"
    }
  ],
...

Jetzt lassen Sie uns das alpine:attested-v2-Image untersuchen, das wir mit der Option --predicate-type erstellt haben, um den Prädikatstyp zu überschreiben.

docker buildx imagetools inspect alpine:attested-v2

Suchen Sie erneut nach dem Abschnitt "attestations". Diesmal sollten Sie einen Eintrag mit dem Prädikatstyp https://example.com/another-attestation/v2 sehen, auch wenn der Inhalt der Attestierungsdaten der gleiche wie zuvor ist.

...
  "attestations": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "payload": "...",
      "predicateType": "https://example.com/another-attestation/v2"
    }
  ],
...

Dies bestätigt, dass wir erfolgreich Attestierungen zu den Docker-Images hinzugefügt haben und dass die Option --predicate-type verwendet werden kann, um den Prädikatstyp explizit festzulegen.

Sie haben nun gelernt, wie Sie ein Image und eine Attestierungsdatei vorbereiten, Attestierungen mit den Optionen --attestation-file und --predicate-type zu einem Image hinzufügen und die hinzugefügten Attestierungen mit docker buildx imagetools inspect überprüfen können.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man Attestierungen an ein Docker-Image anhängt, indem man den Befehl docker scout attestation add verwendet. Wir haben begonnen, indem wir ein Docker-Image (alpine:latest) vorbereitet und eine einfache JSON-Attestierungsdatei erstellt haben. Anschließend haben wir den Befehl docker scout attestation add mit der Option --file verwendet, um die Attestierungsdatei an das Image anzuhängen. Wir haben auch untersucht, wie man einen benutzerdefinierten Prädikatstyp für die Attestierung mit der Option --predicate-type angibt. Schließlich haben wir überprüft, ob die Attestierungen erfolgreich zum Image hinzugefügt wurden.