Udostępnij za pośrednictwem


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:

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 programu oras login.

Konfigurowanie rejestru

Aby skonfigurować środowisko pod kątem łatwego wykonywania poleceń, wykonaj następujące kroki:

  1. Ustaw zmienną ACR_NAME na nazwę rejestru.
  2. Ustaw zmienną REGISTRY na $ACR_NAME.azurecr.io.
  3. Ustaw zmienną REPO na nazwę repozytorium.
  4. Ustaw zmienną TAG na żądany tag.
  5. 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:readmepliku .

  • 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 elementu application/vnd.oci.image.config.v1+json.
  • Element ./readme.md identyfikuje przekazany plik i :application/markdown reprezentuje IANA mediaType 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 pushpolecenia , 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, discoveri 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 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 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.