Pushen und Pullen von Lieferkettenartefakten mithilfe der Azure-Registrierung (Vorschauversion)
Mithilfe einer Azure-Containerregistrierung können Sie einen Graphen von Lieferkettenartefakten speichern und verwalten, z. B. Signaturen, Softwarestücklisten (Software Bill of Materials, SBoM), Ergebnisse von Sicherheitsüberprüfungen oder andere Typen.
Zur Veranschaulichung dieser Funktion wird in diesem Artikel gezeigt, wie Sie die Befehlszeilenschnittstelle von OCI Registry as Storage (ORAS) zum Ausführen von push
-, discover
- und pull
-Vorgängen für einen Graphen von Lieferkettenartefakten in einer Azure-Containerregistrierung ausführen.
Das Speichern einzelner (Stamm-)OCI-Artefakte wird unter Pushen und Pullen von OCI-Artefakten unter Verwendung einer Azure-Containerregistrierung behandelt
Zum Speichern eines Graphen von Artefakten wird mithilfe des OCI-Artefaktmanifests ein Verweis auf ein subject
-Artefakt definiert. Dieses Manifest ist Teil der Vorabversion der Spezifikation für die OCI 1.1-Distribution.
Unterstützung von OCI 1.1-Artefaktmanifesten ist eine Previewfunktion von ACR, die Einschränkungen unterliegt.
Voraussetzungen
- Azure-Containerregistrierung: Erstellen Sie in Ihrem Azure-Abonnement eine Containerregistrierung. Verwenden Sie beispielsweise das Azure-Portal oder die Azure CLI.
Weitere Informationen zur Unterstützung von Azure-Clouds finden Sie unter Einschränkungen der Vorschau. - Azure CLI: Version
2.29.1
oder höher ist erforderlich. Informationen zum Ausführen einer Installation oder eines Upgrades finden Sie unter Installieren der Azure CLI. - ORAS CLI: Version
v0.16.0
ist erforderlich. Siehe Installation von ORAS - Docker (optional): Um die exemplarische Vorgehensweise abzuschließen, wird auf ein Containerimage verwiesen.
Sie können eine lokal installierte Docker-Instanz zum Erstellen und Pushen eines Containerimages oder
acr build
für die Remoteerstellung in Azure verwenden.
Docker Desktop ist zwar nicht erforderlich, doch dieoras
-CLI nutzt den Anmeldeinformationsspeicher von Docker Desktop zum Speichern von Anmeldeinformationen. Wenn Docker Desktop installiert ist, muss die Ausführung füroras login
erfolgen.
Einschränkungen der Vorschau
Die Unterstützung des OCI-Artefaktmanifests (OCI 1.1-Spezifikation) ist in allen öffentlichen Azure-Regionen verfügbar. Azure China 21Vianet und Government-Clouds werden noch nicht unterstützt.
Konfigurieren einer Registrierung
Konfigurieren Sie Umgebungsvariablen, um Befehle einfach in Ihre Shell zu kopieren/einzufügen. Die Befehle können lokal oder in Azure Cloud Shell ausgeführt werden.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
Authentifizieren Sie sich mit Ihrer persönlichen Microsoft Entra-Identität mithilfe eines AD-Tokens. Verwenden Sie immer „000...“ als USER_NAME
, da das Token anhand der Variablen PASSWORD
analysiert wird.
# Login to Azure
az login
# Login to ACR, using a token based on your Azure identity
USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)
Hinweis
ACR und ORAS unterstützen mehrere Authentifizierungsoptionen für Benutzer und Systemautomatisierung. In diesem Artikel wird eine einzelne Identität mithilfe eines Azure-Tokens verwendet. Weitere Authentifizierungsoptionen finden Sie unter Authentifizieren bei einer Azure-Containerregistrierung.
Anmelden mit ORAS
Geben Sie die Anmeldeinformationen für oras login
an.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Pushen eines Containerimages
In diesem Beispiel wird einem Containerimage ein Graph von Artefakten zugeordnet.
Erstellen und pushen Sie ein Containerimage, oder überspringen Sie diesen Schritt, wenn $IMAGE
auf ein vorhandenes Image in der Registrierung verweist.
az acr build -r $ACR_NAME -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main
Erstellen einer Beispielsignatur für das Containerimage
echo '{"artifact": "'${IMAGE}'", "signature": "jayden hancock"}' > signature.json
Anfügen einer Signatur in die Registrierung (als Verweis auf das Containerimage)
Der Befehl oras attach
erstellt einen Verweis zwischen der Datei (./signature.json
) und $IMAGE
. --artifact-type
dient der Unterscheidung von Artefakten, ähnlich wie Dateierweiterungen, die unterschiedliche Dateitypen ermöglichen. Durch Angabe von [file]:[mediaType]
können eine oder mehrere Dateien angefügt werden.
oras attach $IMAGE \
--artifact-type signature/example \
./signature.json:application/json
Weitere Informationen zum Anfügen eines ORAS-Befehls finden Sie in der ORAS-Dokumentation.
Anfügen eines Artefakts mit mehreren Dateien als Referenz
Wenn OCI-Artefakte mit ORAS in eine Registrierung gepusht werden, wird jede referenzierte Datei als Blob gepusht. Um separate Blobs zu pushen, verweisen Sie einzeln auf die Dateien oder auf eine Sammlung von Dateien, indem Sie auf ein Verzeichnis verweisen.
Weitere Informationen zum Pushen einer Sammlung von Dateien finden Sie unter Pushen von Artefakten mit mehreren Dateien.
Erstellen Sie eine Dokumentation zu einem Artefakt:
echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md
Fügen Sie das Artefakt mit mehreren Dateien als Verweis an $IMAGE
an:
Linux, WSL2 oder macOS
oras attach $IMAGE \
--artifact-type readme/example \
./readme.md:application/markdown \
./details
Windows
.\oras.exe attach $IMAGE ^
--artifact-type readme/example ^
.\readme.md:application/markdown ^
.\details
Ermitteln von Artefaktverweisen
In der OCI v1.1-Spezifikation ist eine Verweis-API zum Ermitteln von Verweisen auf ein Artefakt vom Typ subject
definiert. Der Befehl oras discover
kann die Liste der Verweise auf das Containerimage zeigen.
Zeigen Sie mit oras discover
den Graphen der jetzt in der Registrierung gespeicherten Artefakte an.
oras discover -o tree $IMAGE
Die Ausgabe zeigt den Beginn eines Graphen von Artefakten, in dem Signatur und Dokumente als untergeordnete Elemente des Containerimages angezeigt werden.
myregistry.azurecr.io/net-monitor:v1
├── signature/example
│ └── sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcb...
└── readme/example
└── sha256:1a118663d1085e229ff1b2d4d89b5f6d67911f22e55...
Erstellen tiefer Graphen von Artefakten
Die OCI v1.1-Spezifikation ermöglicht tiefe Graphen, sodass signierte Softwarestücklisten (Software Bill of Materials, SBoM) und andere Artefakttypen aktiviert werden.
Erstellen einer Beispiel-SBoM
echo '{"version": "0.0.0.0", "artifact": "'${IMAGE}'", "contents": "good"}' > sbom.json
Anfügen einer Beispiel-SBoM an das Image in der Registrierung
Linux, WSL2 oder macOS
oras attach $IMAGE \
--artifact-type sbom/example \
./sbom.json:application/json
Windows
.\oras.exe attach $IMAGE ^
--artifact-type sbom/example ^
./sbom.json:application/json
Signieren der SBoM
Artefakte, die als Verweise gepusht werden, verfügen in der Regel nicht über Tags, da sie als Teil des Artefakts subject
betrachtet werden. Um eine Signatur in ein Artefakt zu übertragen, das ein untergeordnetes Element eines anderen Artefakts ist, filtern Sie mit oras discover
und --artifact-type
, um den Digest zu finden.
SBOM_DIGEST=$(oras discover -o json \
--artifact-type sbom/example \
$IMAGE | jq -r ".manifests[0].digest")
Erstellen einer Signatur einer SBoM
echo '{"artifact": "'$IMAGE@$SBOM_DIGEST'", "signature": "jayden hancock"}' > sbom-signature.json
Anfügen der SBoM-Signatur
oras attach $IMAGE@$SBOM_DIGEST \
--artifact-type 'signature/example' \
./sbom-signature.json:application/json
Anzeigen des Graphen
oras discover -o tree $IMAGE
Generiert folgende Ausgabe:
myregistry.azurecr.io/net-monitor:v1
├── sbom/example
│ └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│ └── signature/example
│ └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│ └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
└── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5
Höherstufen des Graphen
Ein typischer DevOps-Workflow stuft Artefakte von der Entwicklung über das Staging in die Produktionsumgebung hoch. Sichere Lieferkettenworkflows stufen öffentliche Inhalte in privat geschützte Umgebungen hoch. In beiden Fällen sollten Sie die Signaturen, SBoMs, Überprüfungsergebnisse und andere verwandte Artefakte mit dem Stammartefakt höher stufen, um einen vollständigen Graphen von Abhängigkeiten zu erhalten.
Mit dem Befehl oras copy
können Sie einen gefilterten Graphen von Artefakten registrierungsübergreifend höher stufen.
Kopieren Sie das Image net-monitor:v1
und die zugehörigen Artefakte in sample-staging/net-monitor:v1
:
TARGET_REPO=$REGISTRY/sample-staging/$REPO
oras copy -r $IMAGE $TARGET_REPO:$TAG
Die Ausgabe von oras copy
:
Copying 6bdea3cdc730 sbom-signature.json
Copying 78e159e81c6b sbom.json
Copied 6bdea3cdc730 sbom-signature.json
Copied 78e159e81c6b sbom.json
Copying 7cf1385c7f4d signature.json
Copied 7cf1385c7f4d signature.json
Copying 3e797ecd0697 details
Copying 2fdeac43552b readme.md
Copied 3e797ecd0697 details
Copied 2fdeac43552b readme.md
Copied demo42.myregistry.io/net-monitor:v1 => myregistry.azurecr.io/sample-staging/net-monitor:v1
Digest: sha256:ff858b2ea3cdf4373cba65d2ca6bcede4da1d620503a547cab5916614080c763
Ermitteln des höhergestuften Artefaktgraphen
oras discover -o tree $TARGET_REPO:$TAG
Ausgabe von oras discover
:
myregistry.azurecr.io/sample-staging/net-monitor:v1
├── sbom/example
│ └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│ └── signature/example
│ └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│ └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
└── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5
Pullen eines Artefakts, auf das verwiesen wird
Um ein bestimmtes Artefakt, auf das verwiesen wird, zu pullen, wird der Digest des Verweises mit dem Befehl oras discover
ermittelt:
DOC_DIGEST=$(oras discover -o json \
--artifact-type 'readme/example' \
$TARGET_REPO:$TAG | jq -r ".manifests[0].digest")
Erstellen eines bereinigten Verzeichnisses zum Herunterladen
mkdir ./download
Pullen der Dokumentation in das Downloadverzeichnis
oras pull -o ./download $TARGET_REPO@$DOC_DIGEST
Anzeigen der Dokumentation
tree ./download
Die Ausgabe von tree
:
./download
├── details
│ ├── readme-details.md
│ └── readme-more-details.md
└── readme.md
Anzeigen des Repositorys und der Tagauflistung
Das OCI-Artefaktmanifest ermöglicht das Pushen, Ermitteln, Pullen und Kopieren von Artefaktgraphen, ohne Tags zuweisen zu müssen. Artefaktmanifeste ermöglichen es einer Tagauflistung, sich auf die Artefakte zu konzentrieren, die die Benutzer interessieren, im Gegensatz zu den Signaturen und SBoMs, die Containerimages, Helm-Charts und anderen Artefakten zugeordnet sind.
Anzeigen einer Liste mit Tags
oras repo tags $REGISTRY/$REPO
Anzeigen einer Liste mit Manifesten
Ein Repository kann eine Liste mit Manifesten enthalten, die mit Tags versehen sind oder nicht. Zeigen Sie mithilfe der az acr manifest
-CLI die vollständige Liste der Manifeste an:
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME \
--output jsonc
Beachten Sie, dass die Containerimagemanifeste "tags"
enthalten, die Verweistypen ("mediaType": "application/vnd.oci.artifact.manifest.v1+json"
) hingegen nicht.
In der Ausgabe ist die Signatur nicht mit Tags versehen, wird aber als oci.artifact.manifest
-Verweis auf das Containerimage nachverfolgt:
{
"changeableAttributes": {
"deleteEnabled": true,
"listEnabled": true,
"readEnabled": true,
"writeEnabled": true
},
"createdTime": "2023-01-10T17:58:28.4403142Z",
"digest": "sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5",
"imageSize": 80,
"lastUpdateTime": "2023-01-10T17:58:28.4403142Z",
"mediaType": "application/vnd.oci.artifact.manifest.v1+json"
}
Löschen aller Artefakte im Graphen
Unterstützung der OCI v1.1-Spezifikation ermöglicht das Löschen des Graphen der Artefakte, die dem Stammartefakt zugeordnet sind. Verwenden Sie den Befehl oras delete
, um den Graphen der Artefakte (Signatur, SBoM und die Signatur der SBoM) zu löschen.
oras manifest delete -f $REGISTRY/$REPO:$TAG
oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG
Anzeigen der verbleibenden Manifeste
Durch Löschen des Stammartefakts werden auch alle zugehörigen Artefakte gelöscht, sodass eine bereinigte Umgebung entsteht:
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME -o jsonc
Ausgabe:
2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.
Zusammenfassung
In diesem Artikel wird ein Graph mit Lieferkettenartefakten erstellt, ermittelt, höher gestuft und gepullt und ermöglicht damit die Lebenszyklusverwaltung der Artefakte, die Sie erstellen und von denen Abhängigkeiten bestehen.
Nächste Schritte
- Erfahren Sie mehr zur ORAS CLI.
- Erfahren Sie mehr über das OCI-Artefaktmanifest zum Pushen, Ermitteln, Pullen und Kopieren eines Graphen von Lieferkettenartefakten.