Artefakty dodavatelského řetězce nabízených oznámení a vyžádání změn pomocí služby Azure Registry (Preview)

Pomocí registru kontejnerů Azure můžete ukládat a spravovat graf artefaktů dodavatelského řetězce, včetně podpisů, faktur softwaru (SBOM), výsledků kontroly zabezpečení a dalších typů.

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

Abychom si ukázali tuto funkci, tento článek ukazuje, jak pomocí rozhraní příkazového řádku OCI Registry jako úložiště (ORAS) a pushdiscoverpull graf artefaktů dodavatelského řetězce do registru kontejnerů Azure. Ukládání jednotlivých (kořenových) artefaktů OCI se vztahuje na artefakty OCI push a pull.

Pokud chcete uložit graf artefaktů, definuje se odkaz na subject artefakt pomocí manifestu artefaktů OCI, který je součástí předem vydané specifikace distribuce OCI 1.1. Podpora manifestu artefaktů OCI 1.1 je funkce ACR Preview a podléhá omezením.

Předpoklady

  • Registr kontejnerů Azure – Vytvořte registr kontejnerů ve svém předplatném Azure. Použijte například Azure Portal nebo Azure CLI.
    Viz omezení verze Preview pro podporu cloudu Azure.
  • Azure CLI – Vyžaduje se verze 2.29.1 nebo novější. Viz Instalace Azure CLI pro instalaci nebo upgrade.
  • Rozhraní příkazového řádku ORAS – Vyžaduje se verze v0.16.0 . Viz: Instalace ORAS.
  • Docker (volitelné) – K dokončení návodu se odkazuje na image kontejneru. Docker nainstalovaný místně můžete použít k sestavení a nasdílení image kontejneru nebo k acr build vzdálenému sestavení v Azure.
    I když se Desktop Dockeru nevyžaduje, oras rozhraní příkazového řádku využívá úložiště přihlašovacích údajů desktopového Dockeru k ukládání přihlašovacích údajů. Pokud je nainstalovaný Docker Desktop, musí být spuštěn pro oras login.

Omezení verze Preview

Podpora manifestu artefaktů OCI (specifikace OCI 1.1) je dostupná ve všech veřejných oblastech Azure. Microsoft Azure provozované cloudy 21Vianet a government se zatím nepodporují.

Konfigurace registru

Nakonfigurujte proměnné prostředí pro snadné kopírování a vkládání příkazů do prostředí. Příkazy je možné spouštět místně nebo v Azure Cloud Shellu.

ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
REPO=net-monitor
TAG=v1
IMAGE=$REGISTRY/${REPO}:$TAG

Ověřování pomocí individuální identity Microsoft Entra pomocí tokenu AD. Vždy použijte hodnotu 000 pro token, USER_NAME protože se token parsuje prostřednictvím PASSWORD proměnné.

# 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)

Poznámka:

ACR a ORAS podporují více možností ověřování pro uživatele a automatizaci systému. Tento článek používá jednotlivé identity pomocí tokenu Azure. Další možnosti ověřování najdete v tématu Ověřování pomocí registru kontejneru Azure.

Přihlášení pomocí ORAS

Zadejte přihlašovací údaje pro oras login.

oras login $REGISTRY \
  --username $USER_NAME \
  --password $PASSWORD

Nasdílení image kontejneru

Tento příklad přidruží graf artefaktů k imagi kontejneru.

Pokud odkazujete na existující image v registru, sestavte a nasdílejte image kontejneru nebo tento krok $IMAGE přeskočte.

az acr build -r $ACR_NAME -t $IMAGE https://github.com/wabbit-networks/net-monitor.git#main

Vytvoření ukázkového podpisu pro image kontejneru

echo '{"artifact": "'${IMAGE}'", "signature": "jayden hancock"}' > signature.json

Připojení podpisu k registru jako odkazu na image kontejneru

Příkaz oras attach vytvoří odkaz mezi souborem (./signature.json) na $IMAGE. Poskytuje --artifact-type pro odlišování artefaktů, podobně jako u přípon souborů, které umožňují různé typy souborů. Jeden nebo více souborů lze připojit zadáním [file]:[mediaType].

oras attach $IMAGE \
    --artifact-type signature/example \
    ./signature.json:application/json

Další informace o připojení oras najdete v dokumentaci k ORAS.

Připojení artefaktu s více soubory jako odkazu

Když se artefakty OCI nasdílí do registru s ORAS, každý odkaz na soubor se odešle jako objekt blob. Pokud chcete odeslat samostatné objekty blob, odkazujte na soubory jednotlivě nebo na kolekci souborů odkazováním na adresář.
Další informace o tom, jak odeslat kolekci souborů, naleznete v tématu Odesílání artefaktů s více soubory.

Vytvoření dokumentace k artefaktu:

echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md

Připojte artefakt s více soubory jako odkaz na $IMAGE:

Linux, WSL2 nebo 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

Zjišťování odkazů na artefakty

Specifikace OCI v1.1 definuje referenční rozhraní API pro zjišťování odkazů na subject artefakt. Příkaz oras discover může zobrazit seznam odkazů na image kontejneru.

Zobrazení oras discovergrafu artefaktů, které jsou nyní uloženy v registru, pomocí .

oras discover -o tree $IMAGE

Výstup ukazuje začátek grafu artefaktů, kde se podpis a dokumenty zobrazují jako podřízené položky image kontejneru.

myregistry.azurecr.io/net-monitor:v1
├── signature/example
│   └── sha256:555ea91f39e7fb30c06f3b7aa483663f067f2950dcb...
└── readme/example
    └── sha256:1a118663d1085e229ff1b2d4d89b5f6d67911f22e55...

Vytvoření hlubokých grafů artefaktů

Specifikace OCI v1.1 umožňuje hloubkové grafy, povolení podepsaných softwarových faktur materiálů (SBOM) a dalších typů artefaktů.

Vytvoření ukázkového SBOM

echo '{"version": "0.0.0.0", "artifact": "'${IMAGE}'", "contents": "good"}' > sbom.json

Připojení ukázkového SBOM k imagi v registru

Linux, WSL2 nebo 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

Podepsání SBOM

Artefakty, které se nasdílí jako odkazy, obvykle nemají značky, protože jsou považovány za součást artefaktu subject . Pokud chcete podpis odeslat do artefaktu, který je podřízeným jiným artefaktem, použijte oras discover--artifact-type k vyhledání hodnot hash funkci filtrování.

SBOM_DIGEST=$(oras discover -o json \
                --artifact-type sbom/example \
                $IMAGE | jq -r ".manifests[0].digest")

Vytvoření podpisu SBOM

echo '{"artifact": "'$IMAGE@$SBOM_DIGEST'", "signature": "jayden hancock"}' > sbom-signature.json

Připojení podpisu SBOM

oras attach $IMAGE@$SBOM_DIGEST \
  --artifact-type 'signature/example' \
  ./sbom-signature.json:application/json

Zobrazení grafu

oras discover -o tree $IMAGE

Generuje následující výstup:

myregistry.azurecr.io/net-monitor:v1
├── sbom/example
│   └── sha256:4f1843833c029ecf0524bc214a0df9a5787409fd27bed2160d83f8cc39fedef5
│       └── signature/example
│           └── sha256:3c43b8cb0c941ec165c9f33f197d7f75980a292400d340f1a51c6b325764aa93
├── readme/example
│   └── sha256:5fafd40589e2c980e2864a78818bff51ee641119cf96ebb0d5be83f42aa215af
└── signature/example
    └── sha256:00da2c1c3ceea087b16e70c3f4e80dbce6f5b7625d6c8308ad095f7d3f6107b5

Zvýšení úrovně grafu

Typický pracovní postup DevOps bude podporovat artefakty z vývoje prostřednictvím přípravy do produkčního prostředí, pracovní postupy zabezpečeného dodavatelského řetězce propagují veřejný obsah na soukromě zabezpečená prostředí. V obou případech budete chtít zvýšit úroveň podpisů, SBOM, skenovat výsledky a další související artefakty s kořenovým artefaktem tak, aby měly úplný graf závislostí.

oras copy Pomocí příkazu můžete zvýšit úroveň filtrovaného grafu artefaktů napříč registry.

net-monitor:v1 Zkopírujte image a související artefakty dosample-staging/net-monitor:v1:

TARGET_REPO=$REGISTRY/sample-staging/$REPO
oras copy -r $IMAGE $TARGET_REPO:$TAG

Výstup :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

Zjištění grafu upřednostněných artefaktů

oras discover -o tree $TARGET_REPO:$TAG

Výstup :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

Stažení odkazovaného artefaktu

Pokud chcete vyžádat konkrétní odkazovaný artefakt, zjistí se hodnota hash odkazu pomocí oras discover příkazu:

DOC_DIGEST=$(oras discover -o json \
              --artifact-type 'readme/example' \
              $TARGET_REPO:$TAG | jq -r ".manifests[0].digest")

Vytvoření čistého adresáře pro stahování

mkdir ./download

Stažení dokumentů do adresáře pro stahování

oras pull -o ./download $TARGET_REPO@$DOC_DIGEST

Zobrazení dokumentace

tree ./download

Výstup :tree

./download
├── details
│   ├── readme-details.md
│   └── readme-more-details.md
└── readme.md

Zobrazení úložiště a výpisu značek

Manifest artefaktů OCI umožňuje odesílat, zjišťovat a kopírovat grafy artefaktů, aniž by bylo nutné přiřazovat značky. Manifesty artefaktů umožňují výpis značek zaměřit se na artefakty, o které uživatelé uvažují, a ne na podpisy a SBOM, které jsou přidružené k imagím kontejnerů, chartům helmu a dalším artefaktům.

Zobrazení seznamu značek

oras repo tags $REGISTRY/$REPO

Zobrazení seznamu manifestů

Úložiště může mít seznam manifestů, které jsou označené i neoznačené. Pomocí rozhraní příkazového az acr manifest řádku zobrazte úplný seznam manifestů:

az acr manifest list-metadata \
  --name $REPO \
  --registry $ACR_NAME \
  --output jsonc

Všimněte si, že manifesty image kontejneru mají "tags", zatímco odkazové typy ("mediaType": "application/vnd.oci.artifact.manifest.v1+json") ne.

Ve výstupu se podpis neoznačí, ale sleduje se jako oci.artifact.manifest odkaz na image kontejneru:

{
  "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"
}

Odstranění všech artefaktů v grafu

Podpora specifikace OCI v1.1 umožňuje odstranit graf artefaktů přidružených k kořenovému artefaktu. oras delete Pomocí příkazu odstraňte graf artefaktů (podpis, SBOM a podpis SBOM).

oras manifest delete -f $REGISTRY/$REPO:$TAG

oras manifest delete -f $REGISTRY/sample-staging/$REPO:$TAG

Zobrazení zbývajících manifestů

Odstraněním kořenového artefaktu se odstraní také všechny související artefakty, které opustí čisté prostředí:

az acr manifest list-metadata \
  --name $REPO \
  --registry $ACR_NAME -o jsonc

Výstup:

2023-01-10 18:38:45.366387 Error: repository "net-monitor" is not found.

Shrnutí

V tomto článku se vytvoří graf artefaktů dodavatelského řetězce, zjistí, upřednostní a vytáhne a zajistí správu životního cyklu artefaktů, které vytváříte a závisí na něm.

Další kroky