Verwalten von OCI-Artefakten und Lieferkettenartefakten mit ORAS
Azure Container Registry (ACR) unterstützt Sie beim Verwalten von OCI-Artefakten (Open Container Initiative) und Lieferkettenartefakten. In diesem Artikel erfahren Sie, wie Sie ACR zum effektiven Verwalten von OCI-Artefakten und Lieferkettenartefakten verwenden. Sie erfahren, wie Sie OCI-Artefakte und einen Graph von Lieferkettenartefakten speichern, verwalten und abrufen, einschließlich Signaturen, Softwarestücklisten (SBOM), Sicherheitsscanergebnissen und weiterer Typen.
Dieser Artikel ist in zwei Hauptabschnitte unterteilt:
- Pushen und Pullen von OCI-Artefakten mit ORAS
- Anfügen, Pushen und Pullen von Lieferkettenartefakten mit ORAS
Voraussetzungen
- Azure-Containerregistrierung: Erstellen Sie in Ihrem Azure-Abonnement eine Containerregistrierung. Verwenden Sie beispielsweise das Azure-Portal oder die Azure CLI.
- 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
v1.1.0
oder höher 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.
Konfigurieren der Registrierung
Führen Sie die folgenden Schritte aus, um Ihre Umgebung für die einfache Ausführung von Befehlen zu konfigurieren:
- Legen Sie die Variable
ACR_NAME
auf den Namen Ihrer Registrierung fest. - Legen Sie die Variable
REGISTRY
auf$ACR_NAME.azurecr.io
fest. - Legen Sie die Variable
REPO
auf den Namen Ihres Repositorys fest. - Legen Sie die Variable
TAG
auf das von Ihnen gewünschte Tag fest. - Legen Sie die Variable
IMAGE
auf$REGISTRY/${REPO}:$TAG
fest.
Festlegen von Umgebungsvariablen
Konfigurieren Sie einen Registrierungsnamen, Anmeldeinformationen, einen Repositorynamen und ein Tag zum Pushen und Pullen von Artefakten. Im folgenden Beispiel wird der Name des net-monitor
-Repositorys und das v1
-Tag verwendet. Ersetzen Sie diese durch den Namen Ihres eigenen Repositorys und Ihr eigenes Tag.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
Anmelden bei einer Registrierung
Authentifizieren Sie sich bei ACR, damit Sie Containerimages pullen und pushen können.
az login
az acr login -n $REGISTRY
Wenn Docker nicht verfügbar ist, können Sie das für die Authentifizierung bereitgestellte AD-Token verwenden. 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
Anmelden mit ORAS
Geben Sie die Anmeldeinformationen für oras login
an.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Mit diesem Setup können Sie Artefakte nahtlos in Ihre Azure Container Registry-Instanz pushen und diese aus ihr pullen. Passen Sie die Variablen je nach Bedarf an Ihre spezifische Konfiguration an.
Pushen und Pullen von OCI-Artefakten mit ORAS
Sie können eine Azure-Containerregistrierung verwenden, um OCI-Artefakte (Open Container Initiative) sowie Docker- und OCI-Containerimages zu speichern und zu verwalten.
Zur Veranschaulichung dieser Funktion wird in diesem Abschnitt gezeigt, wie Sie die CLI von OCI Registry as Storage (ORAS) zum Pushen und Pullen eines Graphs von Artefakten in bzw. aus einer Azure Container Registry-Instanz verwenden. In einer Azure-Containerregistrierung können verschiedene OCI-Artefakte mithilfe verschiedener, für das jeweilige Artefakt geeigneter Befehlszeilentools verwaltet werden.
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 Container Registry-Instanz.
Pushen eines Artefakts
Ein einzelnes Dateiartefakt ohne übergeordnetes subject
-Element kann unter anderem ein Containerimage, ein Helm-Charts oder eine Infodatei für das Repository darstellen. Verweisartefakte können unter anderem eine Signatur, eine Softwarestückliste, Überprüfungsberichte oder weitere sich entwickelnde Typen darstellen. Verweisartefakte, die unter Anfügen, Pushen und Pullen von Lieferkettenartefakten beschrieben werden, sind Artefakte, die auf ein anderes Artefakt verweisen.
Pushen eines Einzeldateiartefaktes
Erstellen Sie für dieses Beispiel Inhalte, die eine Markdowndatei darstellen:
echo 'Readme Content' > readme.md
Im folgenden Schritt wird die Datei readme.md
in <myregistry>.azurecr.io/samples/artifact:readme
gepusht.
- Die Registrierung wird mit dem vollqualifizierten Registrierungsnamen
<myregistry>.azurecr.io
(alles Kleinbuchstaben) identifiziert, gefolgt vom Namespace und dem Repository:/samples/artifact
. - Das Artefakt ist mit
:readme
gekennzeichnet, um es eindeutig von anderen Artefakten im Repository zu unterscheiden (:latest, :v1, :v1.0.1
). - Die Einstellung
--artifact-type readme/example
unterscheidet das Artefakt von einem Containerimage, dasapplication/vnd.oci.image.config.v1+json
verwendet. ./readme.md
identifiziert die hochgeladene Datei, und:application/markdown
stellt den IANA-mediaType
der Datei dar.
Weitere Informationen finden Sie unter Leitfaden für OCI-Artefaktautoren.
Verwenden Sie den Befehl oras push
, um die Datei in Ihre Registrierung zu pushen.
Linux, WSL2 oder macOS
oras push $REGISTRY/samples/artifact:readme \
--artifact-type readme/example \
./readme.md:application/markdown
Windows
.\oras.exe push $REGISTRY/samples/artifact:readme ^
--artifact-type readme/example ^
.\readme.md:application/markdown
Die Ausgabe für einen erfolgreichen Pushvorgang sieht in etwa wie folgt aus:
Uploading 2fdeac43552b readme.md
Uploaded 2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1
aec5d9dcf7748dd702682d53
Pushen eines Multidateiartefaktes
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 für das Repository:
echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md
Pushen des Artefakts mit mehreren Dateien:
Linux, WSL2 oder macOS
oras push $REGISTRY/samples/artifact:readme \
--artifact-type readme/example\
./readme.md:application/markdown\
./details
Windows
.\oras.exe push $REGISTRY/samples/artifact:readme ^
--artifact-type readme/example ^
.\readme.md:application/markdown ^
.\details
Ermitteln des Manifests
Zum Anzeigen des Manifests, das als Ergebnis von oras push
erstellt wurde, verwenden Sie oras manifest fetch
:
oras manifest fetch --pretty $REGISTRY/samples/artifact:readme
Die Ausgabe sieht in etwa wie folgt aus:
{
"mediaType": "application/vnd.oci.artifact.manifest.v1+json",
"artifactType": "readme/example",
"blobs": [
{
"mediaType": "application/markdown",
"digest": "sha256:2fdeac43552b71eb9db534137714c7bad86b53a93c56ca96d4850c9b41b777fc",
"size": 15,
"annotations": {
"org.opencontainers.image.title": "readme.md"
}
},
{
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
"digest": "sha256:0d6c7434a34f6854f971487621426332e6c0fda08040b9e6cc8a93f354cee0b1",
"size": 189,
"annotations": {
"io.deis.oras.content.digest": "sha256:11eceb2e7ac3183ec9109003a7389468ec73ad5ceaec0c4edad0c1b664c5593a",
"io.deis.oras.content.unpack": "true",
"org.opencontainers.image.title": "details"
}
}
],
"annotations": {
"org.opencontainers.artifact.created": "2023-01-10T14:44:06Z"
}
}
Pullen eines Artefakts
Erstellen Sie ein leeres Verzeichnis für das Herunterladen.
mkdir ./download
Führen Sie den Befehl oras pull
aus, um das Artefakt aus Ihrer Registrierung abzurufen.
oras pull -o ./download $REGISTRY/samples/artifact:readme
Anzeigen der gepullten Dateien
tree ./download
Entfernen des Artefakts (optional)
Um das Artefakt aus Ihrer Registrierung zu entfernen, verwenden Sie den Befehl oras manifest delete
.
oras manifest delete $REGISTRY/samples/artifact:readme
Anfügen, Pushen und Pullen von Lieferkettenartefakten mit ORAS
Zur Veranschaulichung dieser Funktion wird in diesem Artikel gezeigt, wie Sie die CLI von OCI Registry as Storage (ORAS) zum Ausführen von push
-, discover
- und pull
-Vorgängen für einen Graph von Lieferkettenartefakten in eine Azure Container Registry-Instanz ausführen.
Das Speichern einzelner OCI-Artefakte (subject-Artefakte) wird unter Pushen und Pullen von OCI-Artefakten behandelt.
Zum Speichern eines Graphs von Artefakten wird mithilfe des OCI-Imagemanifests ein Verweis auf ein subject
-Artefakt definiert, das Teil der Vorabversion der Spezifikation für die OCI 1.1-Distribution ist.
Pushen eines Containerimages
So ordnen Sie mithilfe der Azure CLI einen Graph von Artefakten einem Containerimage zu:
Sie können ein Containerimage erstellen oder pushen, 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
Anfügen einer Signatur
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.
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 von Artefaktgraphen
Die OCI v1.1-Spezifikation ermöglicht tiefe Graphen, sodass signierte Softwarestücklisten (Software Bill of Materials, SBoM) und andere Artefakttypen aktiviert werden.
So erstellen Sie eine SBOM und fügen diese an die Registrierung an:
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
Wichtig
Microsoft empfiehlt die Verwendung eines sicheren Kryptosignierungstools wie Notation, um das Image zu signieren und eine Signatur für das Signieren von SBOMs zu generieren.
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. In diesem Beispiel wird zu Demonstrationszwecken eine einfache JSON-Signatur verwendet.
SBOM_DIGEST=$(oras discover -o json \
--artifact-type sbom/example \
$IMAGE | jq -r ".manifests[0].digest")
Erstellen Sie die 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 Artefaktgraphs
Ein typischer DevOps-Workflow stuft Artefakte von der Entwicklungs- über die Staging- bis zur Produktionsumgebung höher. Sichere Lieferkettenworkflows stufen öffentliche Inhalte in privat gesicherte Umgebungen höher. In beiden Fällen sollten Sie die Signaturen, SBOMs, Überprüfungsergebnisse und weitere zugehörige Artefakte mit dem subject-Artefakt höher stufen, um einen vollständigen Graph 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 net-monitor:v1
-Image 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 referenzierter Artefakte
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
ORAS ermöglicht das Pushen, Entdecken, Pullen und Kopieren von Artefaktgraphen, ohne Tags zuweisen zu müssen. Außerdem kann sich eine Tagauflistung mit ORAS auf die Artefakte konzentrieren, die die Benutzer interessieren, im Gegensatz zu den Signaturen und SBOMs, die Containerimages, Helm-Charts und weiteren Artefakten zugeordnet sind.
Anzeigen einer Liste mit Tags
oras repo tags $REGISTRY/$REPO
Löschen aller Artefakte im Graph
Die Unterstützung der OCI-Spezifikation Version 1.1 ermöglicht das Löschen des Graphs der Artefakte, die dem subject-Artefakt zugeordnet sind. Verwenden Sie den Befehl oras manifest delete
, um den Graph von Artefakten (Signatur, SBOM und Signatur der SBOM) zu löschen.
oras manifest delete -f $REGISTRY/$REPO:$TAG
oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG
Sie können die Liste der Manifeste anzeigen, um das Löschen des subject-Artefakts und aller zugehörigen Artefakte zu bestätigen. Dadurch bleibt eine bereinigte Umgebung zurück.
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 haben Sie erfahren, wie Sie Azure Container Registry zum Speichern, Verwalten und Abrufen von OCI-Artefakten und Lieferkettenartefakten verwenden. Sie haben die ORAS-CLI verwendet, um Artefakte in eine Azure Container Registry-Instanz zu pushen und diese aus ihr zu pullen. Sie haben sich zudem mit dem Manifest der gepushten Artefakte auseinandergesetzt und den Graph der Artefakte angezeigt, die an das Containerimage angefügt sind.
Nächste Schritte
- Hier erfahren Sie mehr über Artefaktverweise, das Zuordnen von Signaturen, Softwarestücklisten und weitere Verweistypen.
- Hier erfahren Sie mehr über das ORAS-Projekt, einschließlich der Konfiguration des Manifests für ein Artefakt.
- Referenzinformationen zu neuen Artefakttypen finden Sie im Repository OCI Artifacts (OCI-Artefakte).