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ů.
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 push
discover
pull
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 prooras 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 discover
grafu 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
- Další informace o rozhraní příkazového řádku ORAS
- Další informace o manifestu artefaktů OCI pro nabízení, zjišťování, vyžádání, kopírování grafu artefaktů dodavatelského řetězce