Wypychanie i ściąganie artefaktów łańcucha dostaw przy użyciu usługi Azure Registry (wersja zapoznawcza)
Rejestr kontenerów platformy Azure służy do przechowywania grafu artefaktów łańcucha dostaw i zarządzania nimi, w tym podpisów, rachunków za oprogramowanie materiałów (SBOM), wyników skanowania zabezpieczeń i innych typów.
Aby zademonstrować tę możliwość, w tym artykule pokazano, jak używać interfejsu wiersza polecenia rejestru OCI jako usługi Storage (ORAS) do push
, discover
oraz pull
grafu artefaktów łańcucha dostaw w rejestrze kontenerów platformy Azure.
Przechowywanie pojedynczych artefaktów OCI (root) 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 artefaktu OCI, który jest częścią specyfikacji dystrybucji OCI 1.1 w wersji wstępnej.
Obsługa manifestu artefaktu OCI 1.1 jest funkcją usługi ACR w wersji zapoznawczej i podlega ograniczeniom.
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.
Zobacz Ograniczenia wersji zapoznawczej dotyczące obsługi chmury 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
v0.16.0
. 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
.
Ograniczenia wersji zapoznawczej
Obsługa manifestu artefaktu OCI (specyfikacja OCI 1.1) jest dostępna we wszystkich regionach publicznych platformy Azure. Platforma Microsoft Azure obsługiwana przez chmury 21Vianet i government nie jest jeszcze obsługiwana.
Konfigurowanie rejestru
Skonfiguruj zmienne środowiskowe, aby łatwo kopiować/wklejać polecenia w powłoce. Polecenia można uruchamiać lokalnie lub w usłudze Azure Cloud Shell.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG
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
# 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)
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
Logowanie się przy użyciu usługi ORAS
Podaj poświadczenia do oras login
.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Wypychanie obrazu kontenera
W tym przykładzie jest skojarzony graf artefaktów z obrazem kontenera.
Skompiluj i wypchnij obraz kontenera lub pomiń 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
Tworzenie przykładowego podpisu w obrazie kontenera
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.
Utwórz dokumentację dotyczącą artefaktu:
echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md
Dołącz artefakt z wieloma plikami jako odwołanie do $IMAGE
elementu :
Linux, WSL2 lub 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
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 głębokich 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.
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
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.
SBOM_DIGEST=$(oras discover -o json \
--artifact-type sbom/example \
$IMAGE | jq -r ".manifests[0].digest")
Tworzenie podpisu 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
Podwyższanie poziomu grafu
Typowy przepływ pracy metodyki DevOps będzie promować artefakty od deweloperów przez przemieszczanie do środowiska produkcyjnego Bezpieczne przepływy pracy łańcucha dostaw promują zawartość publiczną do środowisk zabezpieczonych prywatnie. W obu przypadkach chcesz podwyższyć poziom podpisów, SBOMs, wyników skanowania i innych powiązanych artefaktów z artefaktem głównym, 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 jest powiązany z nim 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 przywołynego artefaktu
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
Manifest artefaktu OCI umożliwia wypychanie, odnajdywanie, ściąganie i kopiowanie wykresów artefaktów bez konieczności przypisywania tagów. Manifesty artefaktów umożliwiają wyświetlanie listy tagów, aby skoncentrować 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
Wyświetlanie listy manifestów
Repozytorium może zawierać listę manifestów, które są oznaczone i nieotagowane. Za pomocą interfejsu az acr manifest
wiersza polecenia wyświetl pełną listę manifestów:
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME \
--output jsonc
Zwróć uwagę, że manifesty obrazu kontenera mają "tags"
typ , a typy referencyjne ("mediaType": "application/vnd.oci.artifact.manifest.v1+json"
) nie.
W danych wyjściowych podpis jest nieoznakowany, ale śledzony jako oci.artifact.manifest
odwołanie do obrazu kontenera:
{
"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"
}
Usuń wszystkie artefakty na grafie
Obsługa specyfikacji OCI w wersji 1.1 umożliwia usunięcie grafu artefaktów skojarzonych z artefaktem głównym. oras 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
Wyświetlanie pozostałych manifestów
Usunięcie artefaktu głównego powoduje również usunięcie wszystkich powiązanych artefaktów, pozostawiając czyste środowisko:
az acr manifest list-metadata \
--name $REPO \
--registry $ACR_NAME -o jsonc
Dane wyjściowe:
2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.
Podsumowanie
W tym artykule tworzony jest graf artefaktów łańcucha dostaw, odnaleziony, promowany i ściągany zapewniający zarządzanie cyklem życia tworzonych artefaktów i od których zależy.
Następne kroki
- Dowiedz się więcej o interfejsie wiersza polecenia USŁUGI ORAS
- Dowiedz się więcej o manifeście artefaktu OCI, aby dowiedzieć się, jak wypychać, odnajdywać, ściągać i kopiować graf artefaktów łańcucha dostaw