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.

Graph of artifacts, including a container image, signature and signed software bill of materials

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 programu oras 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 $IMAGEelementu :

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 discoverwyś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