Zarządzanie artefaktami OCI i artefaktami łańcucha dostaw za pomocą usługi ORAS
Usługa Azure Container Registry (ACR) ułatwia zarządzanie artefaktami open container initiative (OCI) i artefaktami łańcucha dostaw. W tym artykule opisano sposób efektywnego zarządzania artefaktami OCI i artefaktami łańcucha dostaw za pomocą usługi ACR. Dowiedz się, jak przechowywać artefakty OCI i pobierać je oraz pobierać je oraz graf artefaktów łańcucha dostaw, w tym podpisów, rachunków za oprogramowanie materiałów (SBOM), wyników skanowania zabezpieczeń i innych typów.
Ten artykuł jest podzielony na dwie główne sekcje:
- Wypychanie i ściąganie artefaktów OCI za pomocą usługi ORAS
- Dołączanie, wypychanie i ściąganie artefaktów łańcucha dostaw za pomocą usługi ORAS
Wymagania wstępne
- Usługa Azure Container Registry — Tworzy rejestr kontenera w subskrypcji platformy Azure. Na przykład użyj witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
- Interfejs wiersza polecenia platformy Azure — wymagana jest wersja lub nowsza
2.29.1
. Zobacz Instalowanie interfejsu wiersza polecenia platformy Azure na potrzeby instalacji i/lub uaktualniania. - Interfejs wiersza polecenia USŁUGI ORAS — wymagana jest wersja
v1.1.0
lub nowsza wersja. Zobacz: Instalacja usługi ORAS. - Docker (opcjonalnie) — aby ukończyć przewodnik, odwołuje się do obrazu kontenera.
Możesz użyć platformy Docker zainstalowanej lokalnie , aby skompilować i wypchnąć obraz kontenera lub użyć polecenia
acr build
do zdalnego kompilowania na platformie Azure.
Chociaż program Docker Desktop nie jest wymagany,oras
interfejs wiersza polecenia korzysta z magazynu poświadczeń pulpitu platformy Docker do przechowywania poświadczeń. Jeśli program Docker Desktop jest zainstalowany, musi być uruchomiony dla programuoras login
.
Konfigurowanie rejestru
Aby skonfigurować środowisko pod kątem łatwego wykonywania poleceń, wykonaj następujące kroki:
- Ustaw zmienną
ACR_NAME
na nazwę rejestru. - Ustaw zmienną
REGISTRY
na$ACR_NAME.azurecr.io
. - Ustaw zmienną
REPO
na nazwę repozytorium. - Ustaw zmienną
TAG
na żądany tag. - Ustaw zmienną
IMAGE
na$REGISTRY/${REPO}:$TAG
.
Ustawianie zmiennych środowiskowych
Skonfiguruj nazwę rejestru, poświadczenia logowania, nazwę repozytorium i tag, aby wypchnąć i ściągnąć artefakty. W poniższym przykładzie użyto net-monitor
nazwy i v1
tagu repozytorium. Zastąp ciąg własną nazwą repozytorium i tagiem.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
Logowanie do rejestru
Uwierzytelnij się przy użyciu usługi ACR, aby umożliwić ściąganie i wypychanie obrazów kontenerów.
az login
az acr login -n $REGISTRY
Jeśli platforma Docker nie jest dostępna, możesz użyć tokenu usługi AD dostarczonego do uwierzytelniania. Uwierzytelnij się przy użyciu indywidualnej tożsamości firmy Microsoft Entra przy użyciu tokenu usługi AD. Zawsze używaj wartości "000..." dla USER_NAME
elementu , ponieważ token jest analizowany za pośrednictwem zmiennej PASSWORD
.
# Login to Azure
az login
Logowanie się przy użyciu usługi ORAS
Podaj poświadczenia do oras login
.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Ta konfiguracja umożliwia bezproblemowe wypychanie i ściąganie artefaktów do i z usługi Azure Container Registry. Dostosuj zmienne zgodnie z potrzebami dla określonej konfiguracji.
Wypychanie i ściąganie artefaktów OCI za pomocą usługi ORAS
Za pomocą rejestru kontenerów platformy Azure można przechowywać artefakty open container initiative (OCI), a także obrazy kontenerów platformy Docker i OCI oraz zarządzać nimi.
Aby zademonstrować tę możliwość, w tej sekcji pokazano, jak używać interfejsu wiersza polecenia rejestru OCI jako usługi Storage (ORAS) do wypychania i ściągania artefaktów OCI do/z rejestru kontenerów platformy Azure. Różne artefakty OCI można zarządzać w rejestrze kontenerów platformy Azure przy użyciu różnych narzędzi wiersza polecenia odpowiednich dla każdego artefaktu.
Uwaga
Usługi ACR i ORAS obsługują wiele opcji uwierzytelniania dla użytkowników i automatyzacji systemu. W tym artykule użyto tożsamości indywidualnej przy użyciu tokenu platformy Azure. Aby uzyskać więcej opcji uwierzytelniania, zobacz Uwierzytelnianie za pomocą rejestru kontenerów platformy Azure.
Wypychanie artefaktu
Pojedynczy artefakt pliku, który nie subject
ma elementu nadrzędnego, może pochodzić z obrazu kontenera, wykresu helm, pliku readme dla repozytorium. Artefakty referencyjne mogą być dowolnymi elementami od podpisu, rachunków za oprogramowanie materiałów, skanowania raportów lub innych ewoluujących typów. Artefakty referencyjne opisane w artykule Dołączanie, wypychanie i ściąganie artefaktów łańcucha dostaw to artefakty odwołujące się do innego artefaktu.
Wypychanie artefaktu pojedynczego pliku
W tym przykładzie utwórz zawartość reprezentującą plik markdown:
echo 'Readme Content' > readme.md
Poniższy krok wypycha readme.md
plik do <myregistry>.azurecr.io/samples/artifact:readme
pliku .
- Rejestr jest identyfikowany z w pełni kwalifikowaną nazwą
<myregistry>.azurecr.io
rejestru (wszystkie małe litery), a następnie przestrzeni nazw i repozytorium:/samples/artifact
. - Artefakt jest oznaczony tagiem
:readme
, aby zidentyfikować go unikatowo z innych artefaktów wymienionych w repozytorium (:latest, :v1, :v1.0.1
). - Ustawienie
--artifact-type readme/example
odróżnia artefakt od obrazu kontenera, który używa elementuapplication/vnd.oci.image.config.v1+json
. - Element
./readme.md
identyfikuje przekazany plik i:application/markdown
reprezentuje IANAmediaType
pliku.
Aby uzyskać więcej informacji, zobacz OCI Artifact Authors Guidance (Wskazówki dla autorów artefaktów OCI).
Użyj polecenia , oras push
aby wypchnąć plik do rejestru.
Linux, WSL2 lub 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
Dane wyjściowe pomyślnego wypychania są podobne do następujących danych wyjściowych:
Uploading 2fdeac43552b readme.md
Uploaded 2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1
aec5d9dcf7748dd702682d53
Wypychanie artefaktu z wieloma plikami
Gdy artefakty OCI są wypychane do rejestru za pomocą usługi ORAS, każde odwołanie do pliku jest wypychane jako obiekt blob. Aby wypchnąć oddzielne obiekty blob, odwołaj się do plików pojedynczo lub kolekcji plików, odwołując się do katalogu.
Aby uzyskać więcej informacji na temat wypychania kolekcji plików, zobacz Wypychanie artefaktów z wieloma plikami.
Utwórz dokumentację dla repozytorium:
echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md
Wypchnij artefakt z wieloma plikami:
Linux, WSL2 lub 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
Odnajdywanie manifestu
Aby wyświetlić manifest utworzony w wyniku oras push
polecenia , użyj polecenia oras manifest fetch
:
oras manifest fetch --pretty $REGISTRY/samples/artifact:readme
Dane wyjściowe są podobne do następujących:
{
"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"
}
}
Ściąganie artefaktu
Utwórz czysty katalog do pobrania.
mkdir ./download
Uruchom polecenie , oras pull
aby ściągnąć artefakt z rejestru.
oras pull -o ./download $REGISTRY/samples/artifact:readme
Wyświetlanie ściągniętych plików
tree ./download
Usuwanie artefaktu (opcjonalnie)
Aby usunąć artefakt z rejestru, użyj oras manifest delete
polecenia .
oras manifest delete $REGISTRY/samples/artifact:readme
Dołączanie, wypychanie i ściąganie artefaktów łańcucha dostaw za pomocą usługi ORAS
Aby zademonstrować tę możliwość, w tym artykule pokazano, jak używać interfejsu wiersza polecenia rejestru OCI jako magazynu (ORAS) do push
, discover
i pull
graf artefaktów łańcucha dostaw w rejestrze kontenerów platformy Azure.
Przechowywanie pojedynczych artefaktów OCI (temat) jest objęte artefaktami wypychania i ściągania OCI.
Aby przechowywać graf artefaktów, odwołanie do subject
artefaktu jest definiowane przy użyciu manifestu obrazu OCI, który jest częścią specyfikacji dystrybucji OCI 1.1 w wersji wstępnej.
Wypychanie obrazu kontenera
Aby skojarzyć graf artefaktów z obrazem kontenera przy użyciu interfejsu wiersza polecenia platformy Azure:
Możesz skompilować i wypchnąć obraz kontenera lub pominąć ten krok, jeśli $IMAGE
odwołuje się do istniejącego obrazu w rejestrze.
az acr build -r $ACR_NAME -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main
Dołączanie podpisu
echo '{"artifact": "'${IMAGE}'", "signature": "jayden hancock"}' > signature.json
Dołączanie podpisu do rejestru jako odwołania do obrazu kontenera
Polecenie oras attach
tworzy odwołanie między plikiem (./signature.json
) a elementem $IMAGE
. Zapewnia różnicowanie --artifact-type
artefaktów, podobnie jak rozszerzenia plików, które umożliwiają różne typy plików. Jeden lub więcej plików można dołączyć, określając wartość [file]:[mediaType]
.
oras attach $IMAGE \
--artifact-type signature/example \
./signature.json:application/json
Aby uzyskać więcej informacji na temat dołączania oras, zobacz dokumentację usługi ORAS.
Dołączanie artefaktu z wieloma plikami jako odwołania
Gdy artefakty OCI są wypychane do rejestru za pomocą usługi ORAS, każde odwołanie do pliku jest wypychane jako obiekt blob. Aby wypchnąć oddzielne obiekty blob, odwołaj się do plików pojedynczo lub kolekcji plików, odwołując się do katalogu.
Aby uzyskać więcej informacji na temat wypychania kolekcji plików, zobacz Wypychanie artefaktów z wieloma plikami.
Odnajdywanie odwołań do artefaktów
Specyfikacja OCI w wersji 1.1 definiuje interfejs API odwołań do odnajdywania odwołań do artefaktusubject
. Polecenie oras discover
może wyświetlić listę odwołań do obrazu kontenera.
Za pomocą polecenia oras discover
wyświetl wykres artefaktów przechowywanych teraz w rejestrze.
oras discover -o tree $IMAGE
Dane wyjściowe przedstawiają początek wykresu artefaktów, w którym podpis i dokumenty są wyświetlane jako elementy podrzędne obrazu kontenera.
myregistry.azurecr.io/net-monitor:v1
├── signature/example
│ └── sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcb...
└── readme/example
└── sha256:1a118663d1085e229ff1b2d4d89b5f6d67911f22e55...
Tworzenie grafów artefaktów
Specyfikacja OCI w wersji 1.1 umożliwia głębokie wykresy, umożliwiając podpisany rachunek za oprogramowanie materiałów (SBOM) i inne typy artefaktów.
Poniżej przedstawiono sposób tworzenia i dołączania rozwiązania SBOM do rejestru:
Tworzenie przykładowego rozwiązania SBOM
echo '{"version": "0.0.0.0", "artifact": "'${IMAGE}'", "contents": "good"}' > sbom.json
Dołączanie przykładowego SBOM do obrazu w rejestrze
Linux, WSL2 lub 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
Podpisywanie SBOM
Ważne
Firma Microsoft zaleca używanie bezpiecznego narzędzia podpisywania kryptograficznego, takiego jak Notation , aby podpisać obraz i wygenerować podpis do podpisywania SBOMs.
Artefakty, które są wypychane jako odwołania, zwykle nie mają tagów, ponieważ są traktowane jako część artefaktu subject
. Aby wypchnąć podpis do artefaktu będącego elementem podrzędnym innego artefaktu, użyj oras discover
funkcji z filtrowaniem --artifact-type
, aby znaleźć skrót. W tym przykładzie użyto prostego podpisu JSON do celów demonstracyjnych.
SBOM_DIGEST=$(oras discover -o json \
--artifact-type sbom/example \
$IMAGE | jq -r ".manifests[0].digest")
Utwórz podpis SBOM.
echo '{"artifact": "'$IMAGE@$SBOM_DIGEST'", "signature": "jayden hancock"}' > sbom-signature.json
Dołączanie podpisu SBOM
oras attach $IMAGE@$SBOM_DIGEST \
--artifact-type 'signature/example' \
./sbom-signature.json:application/json
Wyświetlanie grafu
oras discover -o tree $IMAGE
Generuje następujące dane wyjściowe:
myregistry.azurecr.io/net-monitor:v1
├── sbom/example
│ └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│ └── signature/example
│ └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│ └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
└── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5
Promowanie grafu artefaktów
Typowy przepływ pracy Metodyki DevOps promuje artefakty od deweloperów przez przemieszczanie do środowiska produkcyjnego. Bezpieczne przepływy pracy łańcucha dostaw promują zawartość publiczną w środowiskach zabezpieczonych prywatnie. W obu przypadkach chcesz podwyższyć poziom podpisów, SBOMs, wyników skanowania i innych powiązanych artefaktów z artefaktem tematu, aby mieć pełny graf zależności.
oras copy
Za pomocą polecenia można podwyższyć poziom filtrowanego grafu artefaktów w rejestrach.
net-monitor:v1
Skopiuj obraz i powiązane artefakty do :sample-staging/net-monitor:v1
TARGET_REPO=$REGISTRY/sample-staging/$REPO
oras copy -r $IMAGE $TARGET_REPO:$TAG
Dane wyjściowe polecenia 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
Odnajdywanie promowanego grafu artefaktów
oras discover -o tree $TARGET_REPO:$TAG
Dane wyjściowe polecenia 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
Ściąganie odwołanych artefaktów
Aby ściągnąć określony przywoływane artefakty, skrót odwołania zostanie odnaleziony za pomocą oras discover
polecenia :
DOC_DIGEST=$(oras discover -o json \
--artifact-type 'readme/example' \
$TARGET_REPO:$TAG | jq -r ".manifests[0].digest")
Tworzenie czystego katalogu do pobierania
mkdir ./download
Ściąganie dokumentacji do katalogu pobierania
oras pull -o ./download $TARGET_REPO@$DOC_DIGEST
Wyświetlanie dokumentacji
tree ./download
Dane wyjściowe polecenia tree
:
./download
├── details
│ ├── readme-details.md
│ └── readme-more-details.md
└── readme.md
Wyświetlanie listy repozytorium i tagów
Usługa ORAS umożliwia wypychanie, odnajdywanie, ściąganie i kopiowanie grafów artefaktów bez konieczności przypisywania tagów. Umożliwia również wyświetlanie listy tagów, aby skupić się na artefaktach, o których użytkownicy myślą, w przeciwieństwie do podpisów i SBOMs skojarzonych z obrazami kontenerów, wykresami helm i innymi artefaktami.
Wyświetlanie listy tagów
oras repo tags $REGISTRY/$REPO
Usuwanie wszystkich artefaktów na grafie
Obsługa specyfikacji OCI w wersji 1.1 umożliwia usunięcie grafu artefaktów skojarzonych z artefaktem tematu. oras manifest delete
Użyj polecenia , aby usunąć graf artefaktów (podpis, SBOM i podpis SBOM).
oras manifest delete -f $REGISTRY/$REPO:$TAG
oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG
Listę manifestów można wyświetlić, aby potwierdzić usunięcie artefaktu tematu oraz wszystkie powiązane artefakty pozostawiając czyste środowisko.
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME -o jsonc
Wyjście:
2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.
Podsumowanie
W tym artykule przedstawiono sposób używania usługi Azure Container Registry do przechowywania artefaktów OCI i artefaktów łańcucha dostaw oraz zarządzania nimi. Interfejs wiersza polecenia ORAS był używany do wypychania i ściągania artefaktów do/z usługi Azure Container Registry. Odkryliśmy również manifest wypchniętych artefaktów i wyświetliliśmy graf artefaktów dołączonych do obrazu kontenera.
Następne kroki
- Dowiedz się więcej na temat odwołań do artefaktów, kojarzenia podpisów, rachunków za oprogramowanie materiałów i innych typów referencyjnych.
- Dowiedz się więcej o projekcie ORAS, w tym o sposobie konfigurowania manifestu dla artefaktu.
- Odwiedź repozytorium OCI Artifacts, aby uzyskać informacje referencyjne dotyczące nowych typów artefaktów.